web-dev-qa-db-ja.com

Sudo対root;実際の違いは?

私は製品のサポートメンバーと協力しており、一連のパッチをインストールするにはrootになる必要があるとSudoは機能しないと彼は主張しています。彼は理由を提供していませんが、彼の信念には非常に固いようです。スーパーユーザーの閲覧私がこれを実行したとき、これが事実である可能性のある理由を確認できません。確認すると、次のようになります。

Sudo -l

私は得ます:

...
User [MY USERNAME] may run the following commands on this Host:
    (ALL) ALL

Linux /サーバーチームから実際にrootになるためのアクセス権を取得することは、私が理解しているようにすぐにできるプロセスではないため、自分でインストールすることをお勧めします。

サーバーにソフトウェアをインストールするためにSudoがrootとは異なる動作をする理由は何ですか?

45
Ranger

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でリセットされ、2、3、4で$ USERから取得されます。

したがって、スクリプト、または異なるオプションで起動されるプログラムは、異なる$PATH$HOMEを参照でき、シェルは異なる.bashrc.profileおよび環境変数を読み取ることができます。 $HOMEに関連するファイルを読み取ります。各ユーザーは異なる方法で環境を変更できます(変数、$PATH 、. bashrc、.profile、.bash_profile、エイリアス...)。特に、ユーザーは自分の$PATHでディレクトリの順序を変えることができ、その結果、スクリプトはコマンドを実行できます。代わりに、/home/$USER/binの代わりに、ルートから予期されるパスの1つを使用します。

Sudo -iを使用してrootとしてログを記録したので、プログラムをsu -で実行できますが、Sudo MyCommandまたはsu -c MyCommandを使用して実行すると、動作が異なる場合があります。


man suから:

説明部分では:
現在の環境は新しいシェルに渡されます$ PATH is resetの値は、通常のユーザーの場合は/ bin:/ usr/binに、スーパーユーザーの場合は/ sbin:/ bin:/ usr/sbin:/ usr/binに
...
オプション部分:
-、-l、-login
に似た環境ユーザーがユーザーに期待するであろう直接ログインを提供します。

男からSudo

-i、-login
ターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、.profileや.loginなどのログイン固有のリソースファイルがシェルによって読み取られることを意味します。コマンドが指定されている場合、そのコマンドはシェルの-cオプションを介して実行するためにシェルに渡されます。コマンドを指定しない場合、対話型シェルが実行されます。 Sudoは、シェルを実行する前に、そのユーザーのホームディレクトリへの変更を試みます。 コマンドは、ユーザーがログイン時に受け取る環境と同様の環境で実行されます。 sudoers(5)マニュアルの「コマンド環境」セクションには、sudoersポリシーが使用されているときにコマンドが実行される環境に-iオプションがどのように影響するかが記載されています。

35
Hastur

完全な Sudo アクセス権がある場合、Sudo su -を使用してrootになることができるため、セキュリティポイントは問題になります。

実際、rootとして実行されたプログラムとSudoの下で実行されたプログラムの違いを識別する方法があります- getuid vs-を使用します- geteuid -しかし、これは人為的なトリックです。なぜパッチシステムはそれをするのですか?

23
sds

@Hasturが指摘したように、ルートシェルを取得する場合はいくつかの違いがあります。

ルートシェルを取得していない場合は、さらに違いがあります。サポートメンバーは、Sudo patch -p0 < /root/patch.fileここで、patchはrootとして実行されますが、<(ファイルからのパイピング)ではありません。

7
Jayen

Sudoアクセスを使用すると、ログファイルが作成されると思いますが、ルートアクセスを介して直接実行すると、ログファイルは作成されません。

1

ルートアクセスをどの程度細かくしたいかによって異なります。システムで異なるタスクを実行する複数のユーザーがいる場合、Sudoがより理想的です。私が頻繁に使用する1つの例は、アプリケーションまたはデータベースを再起動する必要があることです。セキュリティは常に最低限の特権で実行するのが最善です。私はグループを使用し、それらのグループのみが明示的なアクションを実行できるようにします。このプロセスを説明した優れた本は、「Sudo Mastery:Real Access for Control for Real People」です。実はスドウ全般についての良い本です...

0
meredithkm