Linuxでchmod -R 777 /した時なぜsudoとかできなくなるのか?
まえがき
- Linuxでroot directoryから『chmod -R 777 /』実行してしまい障害になったケースはよく聞く。
- 最近自分の周りでもこうした障害が発生したのだが、当時sudoコマンドとかが使えなくなったという。
- なぜ使えなくなったのかを調べてみる。
問題のコマンド
rootユーザで以下コマンドを本番環境で実行すると少しハイな気持ちになれます。
# chmod -R 777 /
まずsudoのそもそものパーミッションをCentOS7で確認してみるとsuidがついている。
# ls -l /usr/bin/sudo ---s--x--x. 1 root root 147336 4月 1 2020 /usr/bin/sudo
実際は4511なので777だとパーミッションが足りないことがわかる。
いや777なら行けそうじゃんと思うが、sudoの実行時にsuidのチェックが実行されるのでNGとなる。
sudoのソースコードを見てみたけど多分この部分でチェックが入っている。
https://github.com/sudo-project/sudo/blob/72df19088b57b32a20a92d97fa4b1181439d49b0/src/sudo.c#L192
suidは一般ユーザが実行時にroot権限で実行できる仕組み。
詳しくはredhat者がちゃんと書いてくれているので以下を見ておくといいかも。
https://www.redhat.com/sysadmin/suid-sgid-sticky-bit
同じくsuidの他にsgidもあるがこれらも同じくそういう制御が入っているはずなので、777にすると動かない 以下でfindするとそこそこある passwdとか確かにsuidの動きだわーと思った。
# find / \( -perm -4000 -or -perm -2000 \) -type f -exec ls -la {} \; -r-xr-sr-x. 1 root tty 15344 6月 10 2014 /usr/bin/wall -rws--x--x. 1 root root 23968 4月 1 2020 /usr/bin/chfn -rws--x--x. 1 root root 23880 4月 1 2020 /usr/bin/chsh -rwsr-xr-x. 1 root root 32128 4月 1 2020 /usr/bin/su -rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd -rwsr-xr-x. 1 root root 32096 10月 31 2018 /usr/bin/fusermount -rwsr-xr-x. 1 root root 73888 8月 9 2019 /usr/bin/chage -rwsr-xr-x. 1 root root 78408 8月 9 2019 /usr/bin/gpasswd -rwsr-xr-x. 1 root root 41936 8月 9 2019 /usr/bin/newgrp -rwsr-xr-x. 1 root root 44264 4月 1 2020 /usr/bin/mount -rwsr-xr-x. 1 root root 23576 4月 1 2020 /usr/bin/pkexec -rwsr-xr-x. 1 root root 31984 4月 1 2020 /usr/bin/umount -rwsr-xr-x. 1 root root 57656 8月 9 2019 /usr/bin/crontab ・・・・
ちなみに/etc/ssh/sshd_configは600じゃないとだめって決まってるがその理由は多分これで、同じくパーミッションのチェックが入ってる。
https://github.com/openssh/openssh-portable/blob/2f2ffa4fbe4b671bbffa0611f15ba44cff64d58e/auth.c#L509
sticky bit系のファイルも777にすると誰でも消せるようになるのであんまし良くない。
drwxrwxrwt. 6 root root 4096 11月 10 20:06 2020 tmp