今更、rootコマンドでLinuxを触る人はいないと思うが、RHEL系のOSだと未だ、rootのパスワードが設定できて、SSHでrootでのログインもできてしまう。ある程度設定したら、rootのパスワードなんて、他人に適当に入力してもらって、パスワード自体、忘れてしまってもいいと思う。どうせ、sshログイン自体も証明書ログインだろうから、自分のパスワードも忘れてしまっても。。。(言い過ぎかw)
また、rootで操作をさせないという環境があるが、それなら素直にコンテナを使うべきで、物理サーバとか仮想マシンでやる必要もない。rootの管理を変にこだわっているところは、実はセキュリティリスクが大きく存在するような気がしてならない。結構大企業のシステムもズタボロではないかと。。。攻撃者からしてみたら、日本は楽園かもしれない。お金はかけているわりに、ガンガン攻撃できる。ある意味、脆弱性のエコシステムがバッチリ出来上がっている。
閑話休題
Ubuntuなどは、rootのパスワードというのも設定されず、rootでのログインもデフォルトオフで、sudoを使って、root操作を行う。(「rootにならせない」ということはシステム管理上無理で、それができていると豪語しているところは、実はセキュリティはザルなのではないかと。)
root権限でsudoの設定は、/etc/sudoersというファイルに設定をするが、vi /etc/sudoersとはしてはならず、visudoというコマンドでを叩くと/etc/sudoersが編集できるようになる。
visudo
と入力するだけ。コマンドの先頭にviがついているので、viが起動すると思いきや他のエディタが起動してしまったら。。。
EDITOR=vi visudo
と実行するとお望みのviが立ち上がる。このvisudoコマンドの厄介じゃなくて、便利なところは、ちゃんと文法チェックをしていて、文法のエラーがあると保存をさせてくれない。
がしかし、visduoをいちいち起動させるのは面倒なので、
/etc/sudoers.dの下にsudoersの設定を書いておくとvisudoコマンドを使わなくても、sudoersの設定ができる。ただし、文法チェックなどはしてくれないので必ず
chmod 0440 /etc/sudoers.d/作成したファイル
visudo -c
として、OKと表示されることを確認すること。これを怠って、操作ができなくなるマシンが爆誕してもしらん。
sudoersに記載する内容としては、以下の例がある。ともに、user1というユーザは、sudoで、rootとしてコマンドの全てが実行できるという内容。
sudoをする時に自身のパスワードを入力する必要がある。
user1 ALL=(ALL) NOPASSWD:ALL
sudoをしても自身のパスワードを聞かれない。
user1 ALL=(ALL) ALL
もちろん、使えるコマンドを制限することもできる。
user1 ALL=(ALL) /bin/ls
さて、sudoで権限を渡してしまうと、こっそり何かされてしまうのではないか???ということが起きる。実際のログは、RHEL系なら/var/log/secure、Ubuntuであれば、/var/log/auth.logでバッチリキャプチャされている。
試しにuser1でsudo ping 192.168.10.4 と実行すると、以下のようなログが表示される。
Feb 3 06:50:04 ubuntu22043-pv-lvm sudo: pam_unix(sudo-i:session): session closed for user root
Feb 3 06:50:13 ubuntu22043-pv-lvm sudo: user1: TTY=tty1 ; PWD=/home/user1; USER=root ; COMMAND=/bin/ping 192.168.10.4
Feb 3 06:50:13 ubuntu22043-pv-lvm sudo: pam_unix(sudo:session): session opened for user root(uid=0) by user1 (uid=1002)
Feb 3 06:50:14 ubuntu22043-pv-lvm sudo: pam_unix(sudo:session): session closed for user root
このログを見れば、ユーザに対して、どのコマンドだけ許可すればいいのかがわかる。
sudoじゃなくて、suコマンドでいいのでは?
suコマンドは、su で他のユーザになる(たとえばpostgresユーザになったり)ことがあるが、rootユーザにもなれる。
- suコマンドは、rootユーザになるためには、自身のパスワードではなく、rootのパスワードが必要になる。(だから使われなくなった。)
- そのユーザはwheelグループに入っている必要がある。これは本当でもあり、嘘でもある。
正しくは、/etc/pam.d/suを確認して、以下の行を確認すべき。以下は、RHEL7の記載。
auth required pam_wheel.so use_uid group=sugroup
wheelグループではなく、sugroupにユーザを所属させる必要がある。もちろん、sugroupをwheelにして、wheelにすることも可能だが。
最後に注意点!
sudo -i
でrootのシェルに入ると、その後のコマンドは、一切ログに記録されないので注意!