diary/Kojima/2009-07-14
の編集
http://plamo.linet.gr.jp/index.php?diary/Kojima/2009-07-14
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
-- 雛形とするページ --
diary/Template
[[diary/Kojima]] ・PolicyKit + ConsoleKit ここしばらく GNOME-2.26.2 上で,CD-ROM がうまく自動マウントできないので調べてみたメモ - PolicyKit 周辺機器に対する権限を,従来の「スーパーユーザー(root)/一般ユーザー」 モデルよりも細かく管理するための仕組み.policy と呼ばれる xml 形式の設定ファイルで, 周辺機器ごとに利用権限を設定できる. policy ファイルでは,周辺機器は伝統的なUnixにおけるデバイスファイル単位ではなく, HALで定義されるIDにより区別される.例えば,リムーバブルメディアをマウントする権限は, org.freedesktop.hal.storage.mount-removable,エジェクトする権限は org.freedesktop.hal.storage.eject というIDで設定できる.これらの設定は /usr/share/PolicyKit/policy/org.freedesktop.hal.storage.policy に 収められている.このディレクトリ(/usr/share/PolicyKit/policy/)には,記憶装置以外にも, 電源管理やWOL等,さまざまな周辺機器に関する設定が収められている. 上記設定ファイルは標準的な設定があらかじめ行なわれており,特に独自の設定を追加する場合以外は 修正する必要は無く,通常の利用権限の設定は /etc/Policy/PolicyKit.conf ファイルで行なう. PolicyKit.conf ファイルもxml形式になっており,デフォルトでは <config version="0.1"> </config> だけで,この <config> から </config> の間に必要な設定を加えていくことになる. 設定は,条件に応じて result を返す形式で記述し. 例えばリムーバブルメディアのマウント権限をユーザ全てに与えたい場合は, <match action="org.freedesktop.hal.storage.mount-removable"> <return result="yes" /> </match> という設定を行う. <match action="org.freedesktop.hal.storage.mount-removable"> <return result="yes"/> </match> <match action="org.freedesktop.hal.storage.eject-removable"> <return result="yes"/> </match> <match action="org.freedesktop.hal.storage.mount-fixed"> <return result="yes"/> </match> <match action="hal-storage-mount-fixed-extra-options"> <return result="yes"/> </match> <match action="hal-storage-mount-removable-extra-options"> <return result="yes"/> </match> これくらい設定しておけば,記憶装置に関しては十分なはず. 上記は周辺機器ごとの設定だが,ユーザごとに設定することも可能で,例えば <match user="kojima"> <return result="yes"/> </match> としておけば,kojima ユーザーは PolicyKit が設定している全ての権限を利用できる. これらを組み合わせて, <match action="org.freedesktop.hal.storage.mount-removable"> <match user="kojima"> <return result="no"/> </match> </match> のように,ユーザごとに操作の可否を設定することも可能なはず(要調査) - ConsoleKit MacOSやWindos XPに実装されているfast user switch機能を実現するための仕組み. fast user switchとは,GUI環境で,ログインしているユーザがログアウトせず, 別のユーザに一時的に画面やキーボードを譲って,一時作業が終ればまた元のユーザに戻って, 元の作業の続きができるような機能.元々Unixはマルチユーザで設計されており, 複数の独立したユーザ空間を用意する機能は備わっているものの, それらの切り替えは端末単位になっていて,GUI画面を一時的に切り替えるには新しい仕組みが必要になる. 従来のUnixでは,それぞれのプロセスはログイン時に認証されたユーザ単位で管理されているが, fast user switchを実現するためには,それらをより細かく管理するために, 認証されたプロセスが生み出す子プロセスに共通のcookie(XDG_SESSION_COOKIE)を持たせ, それらを同じシート(Seat)に収まったプロセス群(セッション)として管理するようになっているらしい. 概念的にはPolicyKitとは独立だが,センション単位で周辺機器の利用権限等を適用するために HALがConsoleKitに依存し,その結果Polkitとも関わってくることになる模様. さらに,このあたりの必要な情報をやりとりするためにD-Busを使うので, D-Busが正しく動いている(接続を受けつける)必要もある. gdmやkdmといったGNOME/KDEのディスプレイマネージャはネィティブにConsoleKitに対応している (gdmのconfigureオプションには--with-console-kitが存在)ので, run level 4のGUIログインモードの場合は気にする必要はないが, 従来の run level 3のマルチユーザモードで使おうとすると,ログイン時にConsoleKitの承認を受ける (XDG_SESSION_COOKIEをもらう)必要がある. Plamoを含めた最近のLinuxでは,ユーザ認証はPAMで一括管理されているので, ConsoleKitの承認はPAMのログイン認証時に受けるようにすればいい. 具体的には,ConsoleKitが提供している pam_ck_connctor.so(/lib/security/pam_ck_connector.so) モジュールをログイン認証の設定ファイル(/etc/pam.d/login)で読み込むようにすればよく, Plamoの場合,/etc/pam.d/login では session include plamo-default として,セッション認証は plamo-default ファイルを利用しているので,plamo-default の最後にでも pam_ck_connctor.so を読み込む設定をするのが簡単な気配. # added for console kit session required /lib/security/pam_ck_connector.so この設定をした上で,Xの起動時にWMをD-Busに登録してやればいい.具体的には, 従来は exec gnome-session と起動していたWMを exec /usr/bin/dbus-launch --exit-with-session gnome-session のようにする.ConsoleKitが提供している ck-launch-session というコマンドも同じような機能を果しそうだが,このコマンドの詳細は調べていない. このあたりは,昨今のようにPCが普及してユーティリティ化している中では必要になる機能だとは思うものの, 伝統的なUnixの設計哲学には存在しなかった概念だから,ちょっと屋上に屋を架してるような印象はあるところ. まぁ,このあたりの概念を含めた形でカーネルを設計し直すよりは, ユーザ領域のツールとして実現する方が便利なんだろうけど,このヘンを見ていると micro kernelの魅力というのも改めて考えないといけない気がしてくるところ. MacOSにしろWindows XPにしろ,元々はmicro kernel由来のOSだから, このあたりの新機能の実現は得意な分野なんだろうなぁ. -あとsessionにはactiveとinactiveがありますよね(これがconsolekit由来ですね)。これでもaccessが制限されています(/usr/share/PolicyKit)。どのsessionがactiveかはck-list-sessionコマンドで見る事が可能です。 -- [[honda]] &new{2009-07-14 (火) 13:48:33}; #comment
タイムスタンプを変更しない
[[diary/Kojima]] ・PolicyKit + ConsoleKit ここしばらく GNOME-2.26.2 上で,CD-ROM がうまく自動マウントできないので調べてみたメモ - PolicyKit 周辺機器に対する権限を,従来の「スーパーユーザー(root)/一般ユーザー」 モデルよりも細かく管理するための仕組み.policy と呼ばれる xml 形式の設定ファイルで, 周辺機器ごとに利用権限を設定できる. policy ファイルでは,周辺機器は伝統的なUnixにおけるデバイスファイル単位ではなく, HALで定義されるIDにより区別される.例えば,リムーバブルメディアをマウントする権限は, org.freedesktop.hal.storage.mount-removable,エジェクトする権限は org.freedesktop.hal.storage.eject というIDで設定できる.これらの設定は /usr/share/PolicyKit/policy/org.freedesktop.hal.storage.policy に 収められている.このディレクトリ(/usr/share/PolicyKit/policy/)には,記憶装置以外にも, 電源管理やWOL等,さまざまな周辺機器に関する設定が収められている. 上記設定ファイルは標準的な設定があらかじめ行なわれており,特に独自の設定を追加する場合以外は 修正する必要は無く,通常の利用権限の設定は /etc/Policy/PolicyKit.conf ファイルで行なう. PolicyKit.conf ファイルもxml形式になっており,デフォルトでは <config version="0.1"> </config> だけで,この <config> から </config> の間に必要な設定を加えていくことになる. 設定は,条件に応じて result を返す形式で記述し. 例えばリムーバブルメディアのマウント権限をユーザ全てに与えたい場合は, <match action="org.freedesktop.hal.storage.mount-removable"> <return result="yes" /> </match> という設定を行う. <match action="org.freedesktop.hal.storage.mount-removable"> <return result="yes"/> </match> <match action="org.freedesktop.hal.storage.eject-removable"> <return result="yes"/> </match> <match action="org.freedesktop.hal.storage.mount-fixed"> <return result="yes"/> </match> <match action="hal-storage-mount-fixed-extra-options"> <return result="yes"/> </match> <match action="hal-storage-mount-removable-extra-options"> <return result="yes"/> </match> これくらい設定しておけば,記憶装置に関しては十分なはず. 上記は周辺機器ごとの設定だが,ユーザごとに設定することも可能で,例えば <match user="kojima"> <return result="yes"/> </match> としておけば,kojima ユーザーは PolicyKit が設定している全ての権限を利用できる. これらを組み合わせて, <match action="org.freedesktop.hal.storage.mount-removable"> <match user="kojima"> <return result="no"/> </match> </match> のように,ユーザごとに操作の可否を設定することも可能なはず(要調査) - ConsoleKit MacOSやWindos XPに実装されているfast user switch機能を実現するための仕組み. fast user switchとは,GUI環境で,ログインしているユーザがログアウトせず, 別のユーザに一時的に画面やキーボードを譲って,一時作業が終ればまた元のユーザに戻って, 元の作業の続きができるような機能.元々Unixはマルチユーザで設計されており, 複数の独立したユーザ空間を用意する機能は備わっているものの, それらの切り替えは端末単位になっていて,GUI画面を一時的に切り替えるには新しい仕組みが必要になる. 従来のUnixでは,それぞれのプロセスはログイン時に認証されたユーザ単位で管理されているが, fast user switchを実現するためには,それらをより細かく管理するために, 認証されたプロセスが生み出す子プロセスに共通のcookie(XDG_SESSION_COOKIE)を持たせ, それらを同じシート(Seat)に収まったプロセス群(セッション)として管理するようになっているらしい. 概念的にはPolicyKitとは独立だが,センション単位で周辺機器の利用権限等を適用するために HALがConsoleKitに依存し,その結果Polkitとも関わってくることになる模様. さらに,このあたりの必要な情報をやりとりするためにD-Busを使うので, D-Busが正しく動いている(接続を受けつける)必要もある. gdmやkdmといったGNOME/KDEのディスプレイマネージャはネィティブにConsoleKitに対応している (gdmのconfigureオプションには--with-console-kitが存在)ので, run level 4のGUIログインモードの場合は気にする必要はないが, 従来の run level 3のマルチユーザモードで使おうとすると,ログイン時にConsoleKitの承認を受ける (XDG_SESSION_COOKIEをもらう)必要がある. Plamoを含めた最近のLinuxでは,ユーザ認証はPAMで一括管理されているので, ConsoleKitの承認はPAMのログイン認証時に受けるようにすればいい. 具体的には,ConsoleKitが提供している pam_ck_connctor.so(/lib/security/pam_ck_connector.so) モジュールをログイン認証の設定ファイル(/etc/pam.d/login)で読み込むようにすればよく, Plamoの場合,/etc/pam.d/login では session include plamo-default として,セッション認証は plamo-default ファイルを利用しているので,plamo-default の最後にでも pam_ck_connctor.so を読み込む設定をするのが簡単な気配. # added for console kit session required /lib/security/pam_ck_connector.so この設定をした上で,Xの起動時にWMをD-Busに登録してやればいい.具体的には, 従来は exec gnome-session と起動していたWMを exec /usr/bin/dbus-launch --exit-with-session gnome-session のようにする.ConsoleKitが提供している ck-launch-session というコマンドも同じような機能を果しそうだが,このコマンドの詳細は調べていない. このあたりは,昨今のようにPCが普及してユーティリティ化している中では必要になる機能だとは思うものの, 伝統的なUnixの設計哲学には存在しなかった概念だから,ちょっと屋上に屋を架してるような印象はあるところ. まぁ,このあたりの概念を含めた形でカーネルを設計し直すよりは, ユーザ領域のツールとして実現する方が便利なんだろうけど,このヘンを見ていると micro kernelの魅力というのも改めて考えないといけない気がしてくるところ. MacOSにしろWindows XPにしろ,元々はmicro kernel由来のOSだから, このあたりの新機能の実現は得意な分野なんだろうなぁ. -あとsessionにはactiveとinactiveがありますよね(これがconsolekit由来ですね)。これでもaccessが制限されています(/usr/share/PolicyKit)。どのsessionがactiveかはck-list-sessionコマンドで見る事が可能です。 -- [[honda]] &new{2009-07-14 (火) 13:48:33}; #comment
テキスト整形のルールを表示する