ここでは,suコマンドの権限を限定する方法を記します.suコマンドはroot権限に昇格したり,他のユーザーとしてログインできる強力なコマンドです.一般ユーザーが簡単に使用できないように設定する必要があります.
※【2016.11.4 追記】 PAMの設定を変更しました.→追記
環境
- Cent OS 6.8
- GNOME 2.28.2
- PAM(/libpam.so) 0.82.2
より細かい環境については,ブログを参考にしてください.
また,今回の内容はブログの第9,12回により詳しく掲載しておりますので参考にしてください.
【第9回】目指せLinuxマスター(1) ~sudoersの管理~
【第12回】目指せLinuxマスター(4) ~suの権限~
管理者ユーザーをwheelグループに入れる
今回suコマンドを使えるようにするのはwheelというグループのメンバーです.それ以外はsuできないようにします.ですから,管理者権限を与えてもよいユーザーをあらかじめwheelグループに入れておく必要があります.
なお,wheelというのはRedHat, CentOS, Fedoraなどで用いられる管理者グループの名前で,UbuntuなどのDebian系ではそのかわりにsudoグループを用います.認証の際にこれらの管理者グループに属しているかを判別するライブラリが用意されているので,慣例に倣ってこちらを利用するのが簡単でしょう.もちろん,管理者グループが容易に特定できるのは嫌だという場合は,独自のグループを作ってもいいかもしれません.その場合は設定方法がより複雑になるかと思います.
ここでは,enryuというユーザーをwheelメンバーにします.
$ su -
# gpasswd -a enryu wheel
ログイン処理の設定
※最近のCentOSではlogin.defsにSU_WHEEL_ONLYを設定する必要はなくなったそうです(CentOS6.8にて確認)
今度はlogin.defsをいじっていきます.root権限で開きましょう.
# vi /etc/login.defs
この一番末尾に次の行を追加します.
# Only wheel group can su root
SU_WHEEL_ONLY yes
PAMの設定
最後にPAMの設定を行います.今回は/etc/pam.d/su
を開きます.
2つコメントアウトされている行の下側のコメントを外します.
# Uncomment the following line to require a user to be in the "wheel" group.
# auth required pam_wheel.so use_uid
↑
ここのコメントを外す.dwで1単語削除.
これで,suコマンドでrootに昇格できるのはwheelメンバーに限定されました.もちろん他のユーザーに切り替えることもできません.
※[2016.11.4 追記]
次に,root_onlyオプションをつけます.
# root_onlyオプションをつけることで,rootへの昇格のみを制限します
auth required pam_wheel.so use_uid root_only
あとは再起動すれば設定がすべて反映されます.
# exit
$ sudo shutdown -r now
他のユーザーでsuしようとしても,パスワード入力の前にauth認証で弾かれていますから,何を入力しても「パスワードが違います」と表示されます.
おまけ:wheelグループにsudoを許可
今回はwheelグループだけがsuコマンドでroot権限に昇格できるようにしましたが,そもそもsuでrootになるのはrootパスワードを入力する必要があるため,パスワードを盗聴される可能性が出てきますし,すべての操作をroot権限で行ってしまうので操作を誤ってしまったときに大惨事になる危険性があります.そこで,root権限での実行を必要な時だけ許可するsudoコマンドの使用が推奨されています.
wheelの設定ついでに,sudoをwheelメンバーに許可しましょう.
wheelをsudoersに追加
sudoの設定はsudoersファイルに記述していきます.visudoコマンドで設定を開きます.
$ su -
# visudo
操作はviと同じです.編集するポイントまで移動しましょう.コマンドモードで/wheel
とタイプすると編集ポイントを検索できます.
コマンドモードでEnterキーを押すと下の行の先頭に移動します.そこでdw
とし,コメントアウトを外しましょう.
これで,wheelグループに所属するユーザがsudoを行えるようになりました.
---- 以上