Permissions

如何在沒有 sudo 的情況下列出 virsh 網路?

  • July 7, 2019

我注意到一台使用 Debian 的機器上的一個奇怪行為,我無法在另一台執行 Ubuntu 的機器上重現。virsh當以普通使用者的身份列出網路時,它會顯示一個空列表:

**~$ virsh net-list --all**
名稱 狀態 Autostart Persistent
----------------------------------------------------------

使用 執行相同的命令時sudo,它會顯示預設連接:

**~$ sudo virsh net-list --all**
名稱 狀態 Autostart Persistent
----------------------------------------------------------
預設啟動 否 是

文件本身的權限似乎設置正確:

**~$ ls -l /etc/libvirt/qemu/networks**
共 8 個
drwxr-xr-x 2 root root 4096 Jul 1 18:19 自動啟動
-rw-r--r-- 1 root root 228 Jul 1 18:19 default.xml

使用者屬於kvmlibvirtd組。

怎麼了?為什麼我不能以普通使用者的身份列出網路?

看來

如果沒有明確說明,virsh 二進製文件使用 ‘qemu:///session’ URI(至少在 debian 下)。

因此,不僅virsh net-list,而且實際上任何命令,包括virsh list,在使用sudo. 換句話說,virsh net-list使用的是使用者範圍而不是全域範圍。

這是有道理的;嘗試創建預設連接然後啟動它導致“網路已被介面 virbr0 使用”錯誤 - 在不知情的情況下,我正在啟動第二個名為“預設”的連接,而一個已經在執行。

解決方案很簡單:

virsh --connect qemu:///system net-list

做我期望它做的事情,同時:

virsh net-list

沒有。

為什麼Ubuntu機器沒有問題?

根據文件

如果 virsh 找到環境變數VIRSH_DEFAULT_CONNECT_URI集,它會預設嘗試這個 URI。LIBVIRT_DEFAULT_URI但是,由於 libvirt 支持自身,因此不推薦使用此環境變數。

確實,在 Ubuntu 機器上,似乎定義了第二個變數:

**ubuntu:~$ echo $VIRSH_DEFAULT_CONNECT_URI**

**ubuntu:~$ echo $LIBVIRT_DEFAULT_URI**
qemu:///系統

另一方面,在 Debian 機器上,沒有設置這些變數:

**debian:~$ echo $VIRSH_DEFAULT_CONNECT_URI**

**debian:~$ echo $LIBVIRT_DEFAULT_URI**

將這些變數之一設置為qemu:///system可能會起作用,但是,直接在virsh命令中指定連接字元串更容易(至少在編寫腳本時)。

引用自:https://serverfault.com/questions/803283