2013-08-03
sudoについて勘違いしていたこと
root 権限を得てコマンドを実行するときの動作を通して、勘違いに気がついた。
sudo は 「指定したユーザでコマンドを実行する」 ものであり、 「指定したユーザの権限を得て、コマンド実行する」 ものでは無かった。
ここを混同していても問題ない場合もあるけれど、問題が生じる場合もあることもある。
例えば、foo ユーザでログインしている状態で、sudo で root 権限を得て何らかのファイルを削除する場合を考えてみたい。
$ whoami
foo
$ sudo rm test.txt #パスワードの入力は省略
test.txt が削除される。削除が目的の場合、どのユーザが削除したかは特に意識することは無いと思う。このようなケースでは問題無い。
しかし、例えばログインしているユーザの環境変更などの操作をした際に問題が起こる。ここではログインシェルを変更する操作を例にする。
$ whoami
foo
$ echo $SHELL
/bin/bash
$ sudo chsh -s /bin/sh # rootのログインシェルをbashからshに変更
上記の通りにコマンド実行すると、foo のログインシェルが変わるのではなく、root のログインシェルが変更される。
sudo を「指定してユーザの権限を得てコマンドを実行する」ものだと勘違いしていると、foo が一時的に root 権限を得て、自身のログインシェルを変更しているものだと思ってしまう。
だが実際には、「指定したユーザでコマンド実行する」ので、foo の代わりに root が chsh コマンドを実行することになり、結果としてログインシェルが変更されるのは root なのであった。
h3pei
関連記事
<< 前の記事【Linux】ハードリンクとシンボリックリンク
次の記事 >>ビルドとかコンパイルとかリンクとか