(Translated by https://www.hiragana.jp/)
libvirt - Wikipedia コンテンツにスキップ

libvirt

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
libvirt
開発元かいはつもと Red Hat
libvirt community[1]
最新さいしんばん
6.3.0 / 2020ねん5がつ5にち (4ねんまえ) (2020-05-05)[1]
リポジトリ ウィキデータを編集
プログラミング
言語げんご
C
プラットフォーム クロスプラットフォーム
種別しゅべつ 仮想かそう管理かんりAPI
ライセンス LGPL
公式こうしきサイト libvirt.org
テンプレートを表示ひょうじ
libvirtはKVMなどのハイパーバイザをサポートし、virt-managerなどの管理かんりソリューションをサポートする。

libvirtとは、仮想かそう管理かんりよう共通きょうつうAPI提供ていきょうする、レッドハット中心ちゅうしんとしたオープンソースプロジェクトである。

概要がいよう

[編集へんしゅう]

libvirtは仮想かそう機械きかい制御せいぎょ抽象ちゅうしょうしたライブラリである。 ほんライブラリの特徴とくちょうは、サポート範囲はんいひろいことである。 サポートしている仮想かそうは、現在げんざいXenKVMQEMULXCOpenVZUMLVirtualBoxVMware ESX・GSX・Workstation・Player、Hyper-V、そしてクラスタ管理かんりソフトOpenNebulaである。 さらなる対象たいしょう仮想かそう機械きかい拡大かくだい目指めざしてたとえば、対応たいおうLinux-VServerのサポートをどうするかなどが開発かいはつしゃメーリングリストじょう議論ぎろんされた。 また、様々さまざまはんすうでのサポートも特徴とくちょうである。たとえば、XenのリリースされたさまざまなはんたとえばXen3.1.0やXen3.0.3など)で動作どうさする。またUnixけいオペレーティングシステムだけでなく、WindowsうえでもMinGWCygwin使つかえば動作どうさする。

libvirt自体じたいおおくの種類しゅるい仮想かそうをサポートしていても、かならずしもlibvirtを利用りようしているアプリケーションすべての仮想かそうをサポートしているというわけではなく、KVMやXenなどがlibvirtを利用りようしているアプリケーションのサポートの中心ちゅうしんとなっている。

またハードウェアプラットフォーム着目ちゃくもくすると、CPU場合ばあいx86x86-64IA-64POWERなどをサポートしており、ビット (32/64) およびエンディアンわない。

このような幅広はばひろいサポートをおこなっているため、仮想かそう機械きかい制御せいぎょするインタフェースとしては、事実じじつじょう標準ひょうじゅん地位ちいきずきつつある。 たとえば、RHEL5うえ仮想かそう機械きかい管理かんりするためのアプリケーションであるVirtual Machine Manager実装じっそうにおいても利用りようされている[2]

ほんソフトウェアのライセンスはLGPL提供ていきょうされている。このため、GPL開発かいはつされているXenのライブラリ (libxc) にくらべてアプリケーション開発かいはつしゃ視点してんでは使つか勝手がってい。

標準ひょうじゅん提供ていきょうAPIはCPythonである。またその言語げんご (Perl, OCaml, Ruby, Java) のAPIもオプションパッケージで提供ていきょうされている。また、運用うんよう管理かんり標準ひょうじゅんインタフェースであるCIMへの対応たいおうIBM中心ちゅうしんにCMPI CIM Providerとしてlibvirt-CIMの開発かいはつすすんでいる。なお、CMPIは、Common Manageability Programming Interfaceのりゃくである。

セキュリティ拡張かくちょうとして、MACアクセス制御せいぎょとの連携れんけいかんがえたsVirt検討けんとうされている。

ほんプロジェクトのメンテナーは、Daniel Veillard(通称つうしょうDaniel)、Daniel Berrange(通称つうしょうDan)、Richard W.M.Jones(通称つうしょうRich)などレッドハットの開発かいはつしゃである。そのほか、レッドハット以外いがいにもIBMやノベル富士通ふじつう開発かいはつしゃソースコード変更へんこうけんあたえられている。

ソフトウェア構成こうせい

[編集へんしゅう]

libvirtの実装じっそうはlibvirt.cを中心ちゅうしんとしたソフトウェア構成こうせいになっている。libvirtのAPIを利用りようしているアプリケーションとしては、管理かんりコマンドvirshが提供ていきょうされている。また、Python Bindingsもlibvirt.cの上位じょうい位置いちする。

一方いっぽう各種かくしゅ仮想かそう機械きかい制御せいぎょドライバは、libvirt.cのした位置いちする。たとえばXenの制御せいぎょそう実装じっそうでは、Xen統合とうごう管理かんりそう (xen_unified.c) から、それぞれのXenのモジュールかたちになっている。ハイパーバイザ直接ちょくせつ (xen_internal.c)、管理かんりツールであるXend (xend_internal.c)、管理かんりデータベースであるxenstore (xs_internal.c) をしている。

また、ネットワークしの制御せいぎょかんするコードは、以下いかとおりである。クライアントがわでは、remote_internal.cをかいしてリクエストを発行はっこうする。サーバがわでは、libvirtd(コードてきには、qemudディレクトリ以下いか)をかいして、libvirtAPIを使つかって制御せいぎょおこなう。

アクセス制御せいぎょ

[編集へんしゅう]

libvirtAPIを使つかまえにクライアント認証にんしょう必要ひつようとする接続せつぞくがある。

接続せつぞくもちいるクライアント認証にんしょう方法ほうほうは、管理かんりしゃ選択せんたくできる。

この選択せんたくは、libvirtAPIをもちいるアプリケーションに依存いぞんせず、統一とういつてき適用てきようされる。

サーバ設定せってい

[編集へんしゅう]

管理かんりしゃは、libvirtdの認証にんしょう方法ほうほうを、ネットワークソケットごと設定せっていすることができる。

この設定せっていは、libvirtdの設定せっていファイル /etc/libvirt/libvirtd.confでおこなう。

そして、認証にんしょう方法ほうほうは、なし、POLKITそしてSASLの3つから選択せんたくすることができる。

さらに、SASL機構きこうは、将来しょうらいさまざまなオプションを設定せっていできるようになる予定よていである。

UNIXドメインソケットによる伝統でんとうてき権限けんげん管理かんり

[編集へんしゅう]

libvirtがPolkitをサポートしていない場合ばあい、UNIXドメインソケットにたいするアクセス制御せいぎょは、伝統でんとうてきなユーザグループアクセス制御せいぎょによりおこなわれる。

2種類しゅるいのソケットがあり、ひとつは可能かのう、もう1つはみのみ可能かのうとなっている。

きソケットは、アクセス制御せいぎょきびしく(0700)、ルートユーザのみが使つかうことができる。

みのみソケットは、アクセス制御せいぎょがオープン (0777) であり、どのユーザも使つかうことができる。

特権とっけんユーザによりひろいアクセスを許可きょかする場合ばあい、libvirtd.confファイルを編集へんしゅうしunix_sock_rw_permsに許可きょか権限けんげん設定せっていし、ユーザグループを、unix_sock_groupに設定せっていする必要ひつようがある。たとえば、前者ぜんしゃ属性ぞくせいを0770にして、後者こうしゃをwheelグループに設定せっていすると、wheelグループのひと全員ぜんいんlibvirtdにアクセスできることになる。

Polkitを使つかったUNIXドメインソケットの認証にんしょう

[編集へんしゅう]

libvirtがPolkit認証にんしょうをサポートする場合ばあい、アクセス制御せいぎょは、よりすすんだ形態けいたいになる。

この場合ばあい、unix_sock_authパラメータは、polkitが標準ひょうじゅんになる。そして、ファイルアクセス権限けんげんは、権限けんげんふくめ0777になる。クライアントアプリケーションは、Polkitと連携れんけいしてアイデンティティを提供ていきょうし、ソケットに接続せつぞくする。

げんデスクトップセッションのいずれのアプリケーションでも、パスワード認証にんしょうおこなうことが、きソケットの標準ひょうじゅんポリシーである。

この方法ほうほうsudoコマンドによる認証にんしょうている。しかし、クライアントアプリケーションは究極きゅうきょくてき特権とっけんユーザ(ルート)としてうご必要ひつようがない。

そして標準ひょうじゅんポリシーでは、専用せんようソケットにどのようなアプリケーションも接続せつぞくできる。

ポリシーは/etc/PolicyKit/PolicyKit.confにかれたマスター設定せっていファイルによって管理かんりしゃ変更へんこうできる。

PolicyKit.conf(5)マニュアルページに設定せってい方法ほうほう詳細しょうさい記述きじゅつがある。

属性ぞくせいとして、2つのlibvirtd操作そうさ設定せっていされている。1つは、専用せんようのorg.libvirt.unix.monitorである。もう1つは、可能かのうなorg.libvirt.unix.manageである。

れいとして、fredに権限けんげんあたえ、joeには管理かんりしゃパスワードを認証にんしょう要求ようきゅうするれいしめす。このアクセス制御せいぎょをするためには、以下いか設定せっていを、PolicyKit.confに追記ついきする必要ひつようがある。

 <match action="org.libvirt.unix.manage">
   <match user="fred">
     <return result="yes"/>
   </match>
 </match>
 <match action="org.libvirt.unix.manage">
   <match user="joe">
     <return result="auth_admin"/>
   </match>
 </match>

ユーザめいとパスワードによる認証にんしょう

[編集へんしゅう]

TCPソケットを平文へいぶんのままもちいたlibvirtdは、標準ひょうじゅんでSASLを認証にんしょう機構きこうとしてもちいる。

SASL機構きこうは、標準ひょうじゅんでは、Digest-MD5をもちいる。これは、基本きほんてきなユーザめいとパスワード形式けいしき認証にんしょうである。

データストリームを暗号あんごうする方法ほうほう提供ていきょうしている。このため平文へいぶんのTCPソケットのセキュリティもTLSソケットを使つかった場合ばあい同等どうとうのセキュリティである。このため、UNIXドメインソケットおよびTLSソケットをSASL認証にんしょうするように設定せっていしておくことはのぞましい。この設定せっていは、libvirt.conf設定せっていファイルのauth_unix_ro, auth_unix_rw, auth_tlsでSASL認証にんしょうするようにしておく。

使つかはじめの段階だんかいでは、ユーザアカウントは定義ていぎされていない。このためクライアントがTCP接続せつぞくすることが出来できない。

ユーザを追加ついかし、設定せっていおこなうためには、saslpasswd2コマンドを使つかう。

このコマンドを実行じっこうするにたって、アプリケーションがlibvirtであることを明示めいじてきしめ必要ひつようがある。

このれいでは、fredをアカウントに追加ついかするれいしめしている。

 # saslpasswd2 -a libvirt fred
 Password: xxxxxx
 Again (for verification): xxxxxx

ぜんアカウントのリストをるためには、sasldblistuser2コマンドを使つかう。このコマンドでは、libvirtのユーザデータベースを指定していする必要ひつようがある。このデータベースは/etc/libvirt/passwd.dbにある。

 # sasldblistusers2 -f /etc/libvirt/passwd.db
 fred@t60wlan.home.berrange.com: userPassword

最後さいごに、ユーザアクセスを停止ていしする場合ばあい、saslpasswd2コマンドをふたた使つかう。

 # saslpasswd2 -a libvirt -d fred

ケルベロス認証にんしょう

[編集へんしゅう]

TCPソケットを平文へいぶんのままもちいたlibvirtdは、標準ひょうじゅんでSASLを認証にんしょう機構きこうとしてもちいる。

SASL機構きこうは、標準ひょうじゅんでは、Digest-MD5をもちいる。これは、基本きほんてきなユーザめいとパスワード形式けいしき認証にんしょうである。

ケルベロス (Kerberos) 認証にんしょうのシングルサインオンを有効ゆうこうにするには、libvirtようSASL設定せっていファイルを変更へんこうする必要ひつようがある。そのファイルは、/etc/sasl2/libvirt.confである。そして、mech_listパラメータは、digest-md5のわりにgssapiに変更へんこうする必要ひつようがある。

もし、UNIXドメインソケットやTLSソケットにたいしてSASLが有効ゆうこうになっている場合ばあい、Kerberosは、SASLを使つかうことができる。DIGEST-MD5のように、ケルベロス認証にんしょう機構きこうは、セッションのデータ暗号あんごう機構きこう提供ていきょうする。

ディストリビューションによっては、SASL-Kerberosプラグインをデフォルトでインストールしない。この場合ばあい、cyrus-sasl-gssapiなどのパッケージをインストールすることが必要ひつようになる。

ケルベロス認証にんしょうプラグインがインストールされているかどうか調しらべるためには、pluginviewerを実行じっこうして、gssapiがリストされるか確認かくにんする必要ひつようがある。

 # pluginviewer
 ...snip...
 Plugin "gssapiv2" [loaded],     API version: 4
         SASL mechanism: GSSAPI, best SSF: 56
         security flags: NO_ANONYMOUS|NO_PLAINTEXT|NO_ACTIVE|PASS_CREDENTIALS|MUTUAL_AUTH
         features: WANT_CLIENT_FIRST|PROXY_AUTHENTICATION|NEED_SERVER_FQDN

つぎに、ケルベロス認証にんしょうのレルムの管理かんりしゃは、プリンシプルをlibvirtサーバよう発行はっこうする必要ひつようがある。

プリンシプルは、ホストごとに、libvirtdに対応たいおうしてひとてる必要ひつようがある。

そして、プリンシプルは、libvirt/full.hostname@KERBEROS.REALMとづける必要ひつようがある。

この作業さぎょうは、通常つうじょうkadmin.localコマンドをケルベロス認証にんしょうサーバで実行じっこうしておこなわれる。しかしながらケルベロス認証にんしょうサーバによっては、サービスプリンシプルを設定せっていするために方法ほうほう必要ひつよう場合ばあいもある。

一度いちど生成せいせいされると、プリンシプルは、キータブとしてエクスポートされる。そしてlibvirtdけには、/etc/libvirt/krb5.tabに設定せっていされる。

 # kadmin.local
 kadmin.local: add_principal libvirt/foo.example.com
 Enter password for principal "libvirt/foo.example.com@EXAMPLE.COM":
 Re-enter password for principal "libvirt/foo.example.com@EXAMPLE.COM":
 Principal "libvirt/foo.example.com@EXAMPLE.COM" created.
 
 kadmin.local:  ktadd -k /root/libvirt-foo-example.tab libvirt/foo.example.com@EXAMPLE.COM
 Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type Triple DES cbc mode with HMAC/sha1     added to keytab WRFILE:/root/libvirt-foo-example.tab.
 Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/root/libvirt-foo-example.tab.
 Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type DES with HMAC/sha1 added to keytab WRFILE:/root/libvirt-foo-example.tab.
 Entry for principal libvirt/foo.example.com@EXAMPLE.COM with kvno 4, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/root/libvirt-foo-example.tab.
 
 kadmin.local: quit
 
 # scp /root/libvirt-foo-example.tab root@foo.example.com:/etc/libvirt/krb5.tab
 # rm /root/libvirt-foo-example.tab

ケルベロス認証にんしょうするlibvirtに接続せつぞくしたいアプリケーションがユーザプリンシプルを取得しゅとくするためにkinitを実行じっこうする必要ひつようはほとんどない。 PAMがケルベロス認証にんしょうけに設定せっていされている場合ばあい、デスクトップセッションにログインした時点じてん自動的じどうてき取得しゅとくしているためである。

各種かくしゅlibvirtドライバ

[編集へんしゅう]

Xenドライバ

[編集へんしゅう]

libvirtのXenドライバは、3.0.1以降いこうのXenを制御せいぎょすることができる。

libvirtのXenドライバは、複数ふくすう制御せいぎょ方法ほうほうわせでXen仮想かそう機械きかい制御せいぎょする。

  • XenD: libvirt Xenドライバを使つかうためにはXenDにアクセスできることが必須ひっすである。このドライバを使つかうためには、XenDの設定せっていファイル/etc/xen/xend-config.sxpでUNIXドメインソケットインタフェースを利用りよう可能かのうにしておく必要ひつようがある。そのためにはこのファイルで、(xend-unix-server yes) と設定せっていしておく必要ひつようがある。このソケットでのアクセスパスは、特権とっけんユーザ(ルート)に通常つうじょうかぎられる。その選択肢せんたくしとしてHTTPインタフェースを使つかうことができる。しかしセキュリティに注意ちゅういする必要ひつようがある。
  • XenStoreD: Xenstoredにアクセスして情報じょうほう取得しゅとくすることは、ドメイン情報じょうほう取得しゅとくさいのCPUのオーバーヘッドをらすことができる。
  • Hypercalls: ハイパーコールを発行はっこうして情報じょうほう取得しゅとくする。ドメイン情報じょうほう取得しゅとくするには、一番いちばん効率こうりつてきなアクセス方法ほうほうである。
  • XM config: 3.0.4以前いぜんのXenでは、XenDにおいて活性かっせいドメインの制御せいぎょ出来できなかった。このため、これらのXenを制御せいぎょする場合ばあい、libvirtでは/etc/xenのディレクトリにXM設定せっていファイルを保存ほぞんして活性かっせいドメインの制御せいぎょをしている。このディレクトリに、設定せっていファイル以外いがいけっしておいてはいけない。

QEMU/KVMドライバ

[編集へんしゅう]

libvirtのQEMUドライバは0.8.1以降いこうのQEMUを管理かんりすることができる。そして、このドライバはQEMUコマンド書式しょしき制御せいぎょできるいずれの仮想かそう機械きかいにも適用てきようできる。QEMU形式けいしきのVMには、KVMとXennerがふくまれる。

利用りようするまえ必要ひつよう条件じょうけん以下いかとおりである。

  • QEMU: ドライバは/usr/bin以下いかのqemu, qemu-system-x86_64, qemu-system-mips, qemu-system-mipsel, qemu-system-sparc, qemu-system-ppcの存在そんざいをチェックする。チェック結果けっかは、XMLファイルのcapabilityの項目こうもくることができる。
  • KVM: ドライバは/usr/bin/qemu-kvmコマンドと/dev/kvmのデバイスノードの存在そんざいをチェックする。もし両方りょうほう存在そんざいすれば、ハードウェア支援しえん機構きこう前提ぜんていのゲストドメインを使つかうことができる。
  • Xenner: ドライバは/usr/bin/xennerコマンドと/dev/kvmのデバイスノードの存在そんざいをチェックする。もし両方りょうほう存在そんざいすれば、Xenじゅん仮想かそうドメインをKVMをもちいて使つかうことができる。

リモートドライバ

[編集へんしゅう]

ネットワークしのハイパーバイザを管理かんりすることができる。

関連かんれん項目こうもく

[編集へんしゅう]

脚注きゃくちゅう

[編集へんしゅう]

外部がいぶリンク

[編集へんしゅう]

libvirt本体ほんたい各種かくしゅ言語げんごバインディング

[編集へんしゅう]
  • Windows Support - MinGWのコンパイラをもちいてバイナリを作成さくせいすることができる。詳細しょうさい以下いかのページを参照さんしょうのこと[3]。また、WindowsでのAPIのglibcとの互換ごかんはかなりおおきいが、GNU Portability Library (Gnulib) をlibvirtパッケージのなかむことにより、互換ごかんせい手間てま回避かいひしている。

LibvirtAPIを使つかったアプリケーション

[編集へんしゅう]