目指せLinuxマスター(壱) ~CUI/GUIからの強制終了/再起動権限~

  • 0
    いいね
  • 0
    コメント

     ここでは,CUIおよびGUIからの強制終了と再起動(halt, reboot, poweroff)の権限を特定のグループに限定する方法を記します.一般ユーザーが誤ってシステムを落とすと困る,といった場合には,この設定が必須となります.

    環境

    • Cent OS 6.8
    • GNOME 2.28.2
    • PAM(/libpam.so) 0.82.2
    • Polkit(pkaction) 0.96

     より細かい環境については,ブログを参考にしてください.

     また,今回の内容はブログの第9,10,11回により詳しく掲載しておりますので参考にしてください.

    【第9回】目指せLinuxマスター(1) ~sudoersの管理~

    【第10回】目指せLinuxマスター(2) ~権限の制限~

    【第11回】目指せLinuxマスター(3) ~polkitの設定~

    グループの定義

     まず,ユーザーとグループを設定していきます.「users」というグループにシャットダウンや再起動を行える権限を与え,物理コンソールからのログインではユーザー権限で,それ以外でもsudoでroot権限を与えて実行できるようにします.また,GUIでもシャットダウン/再起動はusersのみに認め,それ以外はボタンの表示をなくします.

     用意するユーザー,グループは以下の通りです.

    番号 名前 フルネーム 所属グループ
    1 enryu Lost Enryu enryu, wheel, users
    2 bob Bob Beck bob, users
    3 alice Alice Atanasoff alice, guest-users

     CUIで設定していきます.下の操作でわからないことがあればこちらも参考にしてください.

    Qiita:Linuxコマンド入門(3) ~ユーザー・グループの管理~

    $ su -
    # useradd bob -c "Bob Watson"
    # useradd alice -c "Alice Walker"
    # passwd bob
    # passwd alice
    # groupadd guest-users
    # usermod enryu -aG wheel,users
    # usermod bob -aG users
    # usermod alice -aG guest-users
    # groups enryu bob alice
    

    CUIでの権限 ー visudoの編集

    usersメンバーにシャットダウン関連コマンドを許可

     sudoに関する設定は,/etc/sudoersというファイルに記述されます.編集するときはvisudoコマンドを使います.shutdownを行えるユーザやホストに制限を設けましょう.viが起動したら/shutdownとして「shutdown」を検索します.

     viの操作が分からないときはこちらを参考にしてください.

    Qiita:覚えておきたいviコマンド

    /etc/sudoers
    (省略)
    
    ## Allows members of the users group to shutdown this system
    # %users        localhost=/sbin/shutdown -h now
        ↑この行を編集します↓
    %users        localhost=SHUTDOWN
    (省略)
    

    シャットダウン関連コマンドの定義

     SHUTDOWNというコマンドエイリアスを作りました.上の行に戻ってエイリアスの設定をしましょう.コマンドモードで?Cmnd_Aliasと打って次の位置まで戻ります.

    /etc/sudoers
    (省略)
    
    ## Drivers
    # Cmnd_Alias    DRIVERS    /sbin/modprobe
    
    # Defaults specification
    
    (省略)
    

     Driversの下にShutdownを追加します.

    /etc/sudoers
    (省略)
    
    ## Drivers
    # Cmnd_Alias    DRIVERS    /sbin/modprobe
    
    ## Shutdown
    Cmnd_Alias    SHUTDOWN   /sbin/shutdown, /sbin/init, /sbin/halt, /sbin/reboot, /sbin/poweroff
    
    # Defaults specification
    
    (省略)
    

     sudoersの設定は以上です.コマンドモードに戻り,:wqを入力しましょう.エラーメッセージなしで終了できればOKです.visudoのエラーが出たら,eで編集に戻ってどこか間違えていないか確かめましょう.

    再起動して設定のチェック

     sudoersの設定が終わったら,再起動して設定を反映させましょう.suコマンドでログインしなおしても反映できます.bobでログインし,次のコマンドを打ってみてください.

    $ sudo -l
    (省略)
    User bob may run the following commands on this host:
        (root) /sbin/shutdown, /sbin/init, /sbin/halt, /sbin/reboot, /sbin/poweroff
    

     末尾に表示されたのがこのアカウントのsudo権限で動かせるコマンドになります.無事bobはsudoコマンドでシャットダウン関連のコマンドをroot権限で実行できるようになりました.

    CUI(物理コンソール)での権限 ー consolehelperの実行権限

    一般ユーザに権限を与えるconsolehelper

     一般ユーザでもシステム管理コマンドであるhalt, reboot, poweroffを使うことができます.その仕組みは,

    • /usr/binにコマンドを実行するバイナリファイルがある
    • シンボリックリンクによりconsolehelperを呼び出している.
    • consolehelperが呼び出すPAM認証の中でpam_console.soの認証が行われる.
    • /etc/security/console.appsにコマンド名のファイルがある.

    となっています.

     console.appsからファイルを削除する,PAMの設定ファイルにroot権限を要する一文を加える,などでも一般ユーザの権限を制限できますが,
     consolehelperは物理コンソールでのログインに限りroot権限が必要なコマンドをユーザ権限で実行できるようにするものであり,非常に便利な機能です.usersメンバーに限定してこの機能を継続して使っていけるように,ここではusersのみconsolehelperを使えるようにします.

    consolehelperの実行ファイルの権限の変更

     ファイルの実行権限については以前お話ししました.ls -lで調べることができるパーミッション,ファイルの所有者,所有グループによって,そのファイルへのアクセス権限が決まっており,実行権限はその「x」が表しています.(第6回)

     では,consolehelperの実行権限を変えてみましょう.chmodコマンドを使います.

    $ sudo chmod -v o-x /usr/bin/consolehelper
    

     これで,一般ユーザにはconsolehelperが使えなくなりました.

    ファイルの所有者・所有グループの変更

     次は,ファイルの所有グループを変えます.chownコマンドかchgrpコマンドを使います.ここではchownを使いましょう.chown USERNAME:GROUPNAME FILENAMEという書式で使います.

    $ sudo chown -v :users /usr/bin/consolehelper
    

     これで,usersグループはconsolehelperを使うことができます.

     試しに,suコマンドでusersグループではないaliceにログインしてhalt, rebootのフルパスを表示してみましょう.

    $ su alice
    $ which halt reboot
    /sbin/halt
    /sbin/reboot
    

     次に,usersグループのbobにログインして,同様に調べてみましょう.

    $ exit
    $ su bob        # ここでroot権限でsuを使わない.bobのパスワードを入力する.
    $ which halt reboot
    /usr/bin/halt
    /usr/bin/reboot
    

     実行ファイルへのアクセスが,思い通りに制限されましたね.ちなみに,root権限でsuしてしまうと,/sbinの方が表示されるようになってしまいます.

     これでCUIからの強制終了/再起動の権限はusersメンバーに限定されました.

    GUIでの権限 ー Polkitの設定

    localauthorityへの追加

     最後にPolkitの設定ファイルを追加していきましょう./etc/polkit-1/localauthority以下に設定ファイルを追加します.侵入権限がないらしいので,途中まで入ったらsudoで設定ファイルを作りましょう.なお,cdはコマンドではないため,sudo cdとすることはできません.

    $ cd /etc/polkit-1
    $ sudo vi localauthority/50-local.d/myConsoleKitSystem.pkla
    

     ここではusersだけに許可を与えてみましょう.

    myConsoleKitSystem.pkla
    [ConsoleKit]
    Identity=unix-group:users
    Action=org.freedesktop.consolekit.system.*
    ResultAny=no
    ResultInactive=no
    ResultActive=auth_self_keep
    

     念のために各自のパスワードを入力させるようにしました.

    ポリシーのデフォルトの変更

     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
    

    polkit_default_1.PNG

     シャットダウン関係のポリシーはorg.freedesktop.consolekit.policyになります.root権限でlessコマンドで見てみましょう.

    $ su
    # less org.freedesktop.consolekit.policy
    

    polkit_default_2.PNG

     上の方はxmlファイルのおまじないです.<policyconfig>以下のタグがActionの設定です.これを見ると,allow_inactive,allow_activeなどのタグがありますね.これがResultActiveなどで設定した値のデフォルト値です.これを変えていくわけですね.

     vを押すことで編集モードに移ります.

     /allow_activeとして検索を行い,そのタグに囲まれた「yes」や「auth_admin_keep」などの値をすべて「no」に書き換えてしまいましょう.このファイル中には全部で4か所あります.

     できたら:wqでviを終え,lessに戻り,qでlessも終わりましょう.これで設定完了です.

     aliceやbobなど,ユーザーを切り替えてGUIからシャットダウンしようとしてみてください.いかがでしょうか.うまく設定できたでしょうか.

    ---- 以上

    参考資料

    こちらもよろしくお願いいたします.

    エンリュの迷い森|トップページ