Permissions
如何在沒有 sudo 的情況下列出 virsh 網路?
我注意到一台使用 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
使用者屬於
kvm
和libvirtd
組。怎麼了?為什麼我不能以普通使用者的身份列出網路?
看來:
如果沒有明確說明,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
命令中指定連接字元串更容易(至少在編寫腳本時)。