h3pei.tech
お仕事のご依頼
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's icon

h3pei

フリーランスのソフトウェアエンジニア。Ruby / Rails アプリケーションの開発が得意領域。設計・実装・運用まで含めてプロダクト開発が好きです。

Questalという目標達成コミュニティサービスを開発しました。仲間と一緒に目標達成に取り組みたい方はぜひご利用ください。

お仕事のご依頼
GitHubnoteX

関連記事