sudo
またはでプログラムを呼び出す方法に大きく依存しますsu
。
例えば、私がこの瞬間にいるシステムについて:
.bashrc
COMMAND $HOME $USER Env. $PATH
1. sudo -i (root) root root [1]
2. sudo -s (USER) root USER /home/${USER}/bin:[1]
3. sudo /bin/bash (USER) root USER /home/${USER}/bin:[1]
4. sudo su (root) root USER [1]:/usr/games:/usr/local/games
5. sudo su - (root) root root [1]
[1] = / usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin
Env =環境変数は1および5でリセットされ、$ USERから取得されます2,3,4。
スクリプト、または別のオプションで起動されるプログラムは、異なる見ることができますので$PATH
、$HOME
そのシェルは異なる読み取ることができ.bashrc
、.profile
かつ環境変数。に関連するファイルを読み取ります$HOME
。各ユーザーは、さまざまな方法で環境を変更できます(変数$PATH
、.bashrc、.profile、.bash_profile、エイリアス...)。特に、ユーザーは自分のディレクトリの順序を変えることができ$PATH
、その結果、スクリプトはコマンドを実行できます。たとえば、/home/$USER/bin
ルートから期待されるパスのコマンドの代わりに。
sudo -i
rootとしてログインしたときにプログラムを実行できますがsu -
、sudo MyCommand
またはで実行すると異なる動作をすることができますsu -c MyCommand
。
からman su
:
説明部分:
現在の環境が新しいシェルに渡されます。$ PATHの値は、通常のユーザーの場合は/ bin:/ usr / binにリセットされ、スーパーユーザーの場合は/ sbin:/ bin:/ usr / sbin:/ usr / binにリセットされます
...
オプション部分:
-、- l 、--login ユーザーが直接ログインした場合にユーザーが期待するものと同様
の環境を提供します。
男から sudo
-i、--
loginターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、.profileや.loginなどのログイン固有のリソースファイルがシェルによって読み取られることを意味します。コマンドが指定されている場合、シェルの-cオプションを介して実行するためにコマンドがシェルに渡されます。コマンドが指定されていない場合、対話型シェルが実行されます。 sudo
シェルを実行する前に、そのユーザーのホームディレクトリに変更しようとします。 コマンドは、ユーザーがログイン時に受け取る環境と同様の環境で実行されます。sudoers(5)マニュアルの「コマンド環境」セクションには、-iオプションがsudoersポリシーの使用中にコマンドが実行される環境にどのように影響するかが記載されています。