【第11回】目指せLinuxマスター(3) ~polkitの設定~
皆さん,こんにちは.迷子のエンリュです.
今日はpolkitの設定をやっていきます.Polkitは,GNOMEなどのデスクトップ操作の権限を設定するセキュリティツールで,ポリシーという形でユーザーごとに操作の権限を定義することができます.
前回はPAMというセキュリティツールを覗きながら,実行ファイルのアクセス権限を変えることでユーザーのコマンド実行の権限を調節しました.これによって非ユーザーCUIからシャットダウンするのを完全に禁止できましたね.しかしGUIを使えばシャットダウンできてしまいます.それはなぜかというと,GUIの場合はまた違ったモジュールがセキュリティの管理を行っているからなんですね.面倒くさい限りです.
GUIベースで共用マシンを動かすケースを考慮して,その管理方法の基本となるPolkitを使いこなせるようになりましょう.
それではよろしくお願いいたします.
どうしてPolkitなのか
ログを見てみる
さて,そもそもどうやってPolkitなるものにたどり着いたらいいのか.そこから話したいと思います.Linuxは大体の場合,なにか操作を実行したらログが残ります.「プログラムは正常に終了しましたよ」とか「認証をクリアしましたよ」とかですね.
例えば,Aliceという非usersユーザーでログインし,GUIから再起動してみましょう.System > Shut Down... > Restart
ですね.
今度はwheelユーザーのenryuでログインし,ターミナルを立ち上げます.主なログは/var/log
というディレクトリに入っています.ここでは/var/log/secure
という,認証に関するログの最後の方を見てみましょう.
$ sudo tail -n 20 /var/log/secure | less
...え?これ読むの? ちょっと頭痛くなってきますね.でも見るところが分かってこれば,大して苦ではないんですよ.例えば一番下,enryuがsudoを行ったログがあります.最初は日付,次はホスト名です.まずこれを見て関係なさそうなのは排除できます.ホストの次に書かれているのがサービス名です.正直これだけ見てれば大体の流れは追えます.
Shift+g
でファイルの末尾に移動したら,k
で上に戻りながらaliceという文字を探しましょう.すると,pam: gdm-password: pam_unix(gdm-password:session): session closed for user alice
という行があるでしょう.これがaliceによるシャットダウンの行ですね.gdmというのは"GNOME Display Manager"の略で,GUIのログイン処理などを行っています.
その次の行には,polkitdというサービスが書かれています.gdmはpolkitdを使って認証を行っているのです.下の方には/org/freedesktop/ConsoleKit/Session1や/org/gnome/PolicyKit1/AuthenticationAgentなどの文字も見えますね.
manで調べる
関係者が割り出せたところで,manで調べてみましょう.polkitについて見てみると,
とあります.PolicyKitは認証APIを提供するとありますから,今日の標的はこいつのようですね.もう少し下まで見てみると,
このような文があります.ローカル権限を設定したいいならpklocalauthorityというやつを調べろとのお達しですね.早速見てみましょう.q
でmanを閉じたら,すかさずman 8 pklocalauthority
と入力します.
これを読んでいくと,設定ファイルは/etc/polkit-1/localauthority/
以下に.pkla
拡張子をつけて書いてくれとあります.さらに,設定ファイルの書き方についても記述があります.
いやあ,親切ですね.ResultAnyというのがデフォルトの挙動,ResultInactiveがアクティブでないローカルセッションに対する挙動,ResultActiveがアクティブなローカルセッションに対する挙動...ということですが,よく分かりませんね.アクティブってなんなんでしょう.ここではResultActiveで許可が出せるんだと思っておけば良さそうです.
Actionを調べる
では今度はシステムのシャットダウン・再起動に関わるアクションを調べてみましょう.pkactionコマンドを使います.
$ pkaction | grep restart $ pkaction | grep consolekit $ pkaction -v -a org.freedesktop.consolekit.system.restart
ありましたね.どうやらorg.freedesktop.consolekit.system
以下の4つのアクションについて設定してやれば良さそうです.
設定を記述
localauthorityへの追加
やることが分かってきたところで,早速設定ファイルを追加していきましょう./etc/polkit-1/localauthority
への侵入権限がないらしいので,途中まで入ったらsudoで設定ファイルを作りましょう.なお,cdはコマンドではないため,sudo cd
とすることはできません.
$ cd /etc/polkit-1 $ sudo vi localauthority/50-local.d/myConsoleKitSystem.pkla
例えばこんな感じで書いて保存してみます.
[ConsoleKit] Identity=unix-user:* Action=org.freedesktop.consolekit.system.* ResultAny=no ResultInactive=no ResultActive=no
ではGUIのシャットダウンウィンドウを表示してみましょう.
なんと,Shut DownとRestartが見事に消えてしまいました! どうやら,この方針で間違いないようです.
では,今度はusersだけに許可を与えてみましょう.
[ConsoleKit] Identity=unix-group:users Action=org.freedesktop.consolekit.system.* ResultAny=no ResultInactive=no ResultActive=auth_self_keep
念のために各自のパスワードを入力させるようにしました.それでは再起動をしてみましょう.
パスワードの入力が求められました.
今度はaliceでログインしてみましょう.今はaliceには何も規制がかかっていませんね.おそらく従来通りに再起動できる状態でしょう.
ポリシーのデフォルトの変更
aliceをはじめとした非usersの規制をするには,先ほどのmyConsoleKitSystem.pklaの最初に,全ユーザー向けの設定を記述すればいい気がしますが,どうもそれだとうまく機能してくれません(似たようなことをしようといている投稿も見られましたが(polkit: disable all users except those in group wheel?),users以外の全ユーザーを書く方法しかうまくいかなさそうなので,ここではデフォルトの設定を変えてしまいます.これはあまり推奨されない方法です.アップデートの際に書き換えられてしまうので... Polkitの更新の際は注意しましょう.
デフォルト設定は/usr/share/polkit-1/action
以下で定義されています.pkactionで見られるような設定が書かれています.
$ cd /usr/share/polkit-1/action $ ls
シャットダウン関係のポリシーはorg.freedesktop.consolekit.policy
になります.root権限でlessコマンドで見てみましょう.
$ su # less org.freedesktop.consolekit.policy
上の方はxmlファイルのおまじないです.<policyconfig>
以下のタグがActionの設定です.これを見ると,allow_inactive,allow_activeなどのタグがありますね.これがResultActiveなどで設定した値のデフォルト値です.これを変えていくわけですね.
lessは,vを押すことで編集モードに移ることができます.デフォルトはviが起動しますが,設定を変えれば好きなエディタを起動することができます.早速v
でviエディタを起動しましょう.
/allow_active
として検索を行い,そのタグに囲まれた「yes」や「auth_admin_keep」などの値をすべて「no」に書き換えてしまいましょう.このファイル中には全部で4か所あります.
できたら:wq
でviを終え,lessに戻り,q
でlessも終わりましょう.これで設定完了です.
aliceやbobなど,ユーザーを切り替えてGUIからシャットダウンしようとしてみてください.いかがでしょうか.設定がうまくできていることが確認できるかと思います.
まとめ:CUI,GUIでのユーザーのシャットダウン権限
第9回から3回にかけて,シャットダウンに関する権限の設定を行ってきました.ちょっと何をやったか分かんなくなってきましたね.ここらで少しまとめてみましょう.
CUIのシャットダウン権限
- 基本的にシャットダウンコマンドにはroot権限が必要
- sudoersの設定を変更してsudoコマンドによるシャットダウンを特定ユーザーに許可
- 物理コンソールログインに限り,consolehelperによって一般ユーザーにシャットダウン権限を委譲
- consolehelperの所有グループを変更して物理コンソールログインでシャットダウン権限を委譲されるユーザーを,特定ユーザーに限定
- 他にもPAMを用いて認証や権限の制御が行われている
GUIのシャットダウン権限
- GUIでのシャットダウン権限はPolkitで定義されるポリシーに従っている
- /etc/polkit-1/localauthority以下でローカルのポリシーを設定できる
- /usr/share/polkit-1/Action以下でデフォルトのポリシーを設定できる
こうしてまとめてしまうと,随分簡単なことのように思えますね.これらの操作は,root権限があれば簡単にできてしまうものばかりです.つまり,せっかく一般ユーザーの操作を限定しても,suコマンドでroot権限に昇格してしまえば,システムに関わる変更もできてしまうのです.
次回
次回は,suコマンドによるroot権限への昇格について制限していきます.これで,基本的な権限の設定は完了となります.usersメンバーでないユーザーにはシステムの設定などを一切変更できなくなります.最後の大詰め,張り切ってまいりましょう.
次回もよろしくお願いいたします.
参考ページ
openSUSE 13.1: 第9章 PolKit を利用した権限認可
gnomeメニューからシャットダウンを消去
Polkit - ArchWiki
polkit: disable all users except those in group wheel?
シャットダウンの権限についてこちらでまとめています
Qiita:目指せLinuxマスター(壱) ~CUI/GUIからの強制終了/再起動権限~
Previous | Top | Next
Prev: 【第10回】目指せLinuxマスター(2) ~権限の制御~
Next: 【第12回】目指せLinuxマスター(4) ~suの権限~