virt-managerを一般ユーザーで使う
virt-manager(QEMU/KVM仮想マシン)はデフォルトで、QEMUハイパーバイザに「システム接続」しリソースへのアクセス権を取得する。rootで「システム接続」することが一般的だが、仮想サーバーとして使うわけでもないので、一般ユーザーで運用したい。 というわけで、virt-managerを一般ユーザーで運用する方法をまとめた。一般ユーザーでのqemu-systemの権限エラー
virt-managerはデフォルトでは、一般ユーザーでイメージディスクの作成等ができない。一般ユーザーからゲストOSのインストールを行おうとすると、以下のようなPermission deniedのエラーが出る。インストールを完了できません: '内部エラー: process exited while connecting to monitor: 2016-05-05T08:57:02.803493Z qemu-system-x86_64: -drive file=/var/lib/libvirt/images/winxp.raw,format=raw,if=none,id=drive-ide0-0-0: Could not open '/var/lib/libvirt/images/winxp.raw': Permission denied'
QEMU, libvirtのパーミッション設定
QEMU, libvirtのパーミッションの設定を変更することで、エラーが出なくなり、ゲストOSのインストールができるようになる。パーミッション関連の説明は、openSUSEのドキュメンテーション「openSUSE 13.1: 第6章 接続と権限」に詳しく記載されており、以下の設定については、- 6.1.1. libvirtd の認証(特に、6.1.1.1. パーミッションとグループ所有者を利用した UNIX ソケット向けのアクセス制御)
- 6.3.1. 非特権ユーザに対する 「システム」 アクセス
QEMUの設定
一般ユーザーが「システム接続」できるように設定を変更する。/etc/libvirt/qemu.confを、以下のように3行編集する。
# vim /etc/libvirt/qemu.conf ... # The user for QEMU processes run by the system instance. It can be # specified as a user name or as a user id. The qemu driver will try to # parse this value first as a name and then, if the name doesn't exist, # as a user id. # # Since a sequence of digits is a valid user name, a leading plus sign # can be used to ensure that a user id will not be interpreted as a user # name. # # Some examples of valid values are: # # user = "qemu" # A user named "qemu" # user = "+0" # Super user (uid=0) # user = "100" # A user named "100" or a user with uid=100 # user = "ユーザー名" ←「ユーザー名」は普段使う一般ユーザーのユーザー名に変える。 # The group for QEMU processes run by the system instance. It can be # specified in a similar way to user. group="libvirt" ←グループをlibvirtに変える。 # Whether libvirt should dynamically change file ownership # to match the configured user/group above. Defaults to 1. # Set to 0 to disable file ownership changes. dynamic_ownership = 1 ←コメントアウトを解除。 ...
さらに、デバイスファイル/dev/kvmを利用できるように、kvmグループに一般ユーザーを追加する。「ユーザー名」は普段使う一般ユーザーのユーザー名に変える。libvirtグループへの追加は、次のlibvirtの設定とともに行う。
# gpasswd -a ユーザー名 kvm
ディスクイメージのファイルは、仮想マシンを起動していない時はrootが所有者となる。
$ ls -ld /var/lib/libvirt/images/winxp.raw -rw------- 1 root root 64424509440 5月 7 16:01 /var/lib/libvirt/images/winxp.raw
仮想マシンを起動すると、起動した一般ユーザー、libvirtグループが所有者となる。
$ ls -ld /var/lib/libvirt/images/winxp.raw -rw------- 1 ユーザー名 libvirt 64424509440 5月 7 16:01 /var/lib/libvirt/images/winxp.raw
libvirtの設定
デフォルトでlibvirtは、認証システムとしてPolicyKitを採用している。ここでは、PolicyKitによる認証を使わず、ファイルのパーミッションベースで管理する方法を採る。まず、libvirt グループのユーザーが仮想マシンを管理できるように、ファイルベースのパーミッションを定義する。/etc/libvirt/libvirtd.confの以下の行のコメントアウトを解除する。auth_unix_ro = "none"でソケットの読み込み時、auth_unix_rw = "none"でソケットの読み書き時の認証を行わないようにしている。
# vim /etc/libvirt/libvirtd.conf ... unix_sock_group = "libvirt" ... unix_sock_ro_perms = "0777" # set to 0770 to deny non-group libvirt users ... unix_sock_rw_perms = "0770" ... auth_unix_ro = "none" ... auth_unix_rw = "none" ...
次に、一般ユーザーとして使用しているユーザーを、libvirtグループに追加する。「ユーザー名」は普段使う一般ユーザーのユーザー名に変える。
# gpasswd -a ユーザー名 libvirt
libvirtdデーモンを起動する。
# systemctl start libvirtd.service # systemctl enable libvirtd.service
設定を反映させるため、PCの再起動を行う。
一般ユーザーのホームディレクトリにイメージディスクを保存する
/var/lib/libvirt/images以外の保存先で、権限のエラー
/var/lib/libvirt/images以外のディレクトリに、イメージディスクのファイルを保存すると、以下のようなエラーが出る。例えば、ホームディレクトリに保存先を作った場合:エミュレーターはパス'/home/ユーザー名/ディレクトリ名/winxp.raw'を検索する権限を持っていません。 今すぐこれを訂正しますか。
The emulator may not have search permissions for the path '/home/ユーザー名/ディレクトリ名/winxp.raw'. Do you want to correct this now?
libvirtのデフォルトのイメージディスクの保存先は、/var/lib/libvirt/imagesになっている。SELinuxを有効にしていると、/var/lib/libvirt/images以外のディレクトリへのイメージーファイルの保存が禁止される。このような経緯から、/var/lib/libvirt/imagesが保存先として推奨されていると思われる。
イメージの保存先を一般ユーザーのホームディレクトリに変更する
現在使用している環境では、SELinuxは使用していないが、念の為/var/lib/libvirt/imagesが保存先となるようにした。ただし、rootディレクトリの容量を確保していないため、ホームディレクトリにディスクイメージの保存先(/home/ユーザー名/VirtManagerImages)を作り、/var/lib/libvirt/imagesにシンボリックリンクをはることにした。# mv /var/lib/libvirt/images /home/ユーザー名/VirtManagerImages # ln -s /home/ユーザー名/VirtManagerImages /var/lib/libvirt/images
セキュリティ的には良くないのかもしれないが、これで運用する。
参考:
[1]openSUSE 13.1: KVM を利用した仮想化
[2]How to use virt-manager as a non-root user? - Ask Fedora: Community Knowledge Base and Support Forum
[3]6.2. virt-manager を使用してゲストを作成 - Red Hat Customer Portal
[4]Storing virtual disk images in a customized location - IBM Knowledge Center
スポンサーリンク
0 件のコメント:
コメントを投稿