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なのであった。
<< 前の記事【Linux】ハードリンクとシンボリックリンク
次の記事 >>ビルドとかコンパイルとかリンクとか