linux – Sudo vs root; 実際の違いは?

command-line linux root sudo

私はある製品のサポートメンバーと仕事をしているのですが、彼は一連のパッチをインストールするには私がrootになる必要があり、sudoは動作しないと主張しています; 彼は理由を提供していませんが、彼の信念は非常に固いようです。Superuserを閲覧していても、これがそうであるために考えられる理由がわからず、確認のために実行してみましたが、これは何か理由があるのでしょうか?

sudo -l

I get:

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

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

sudo がサーバにソフトウェアをインストールする際に root とは異なる振る舞いをする実際的な理由は何かあるのでしょうか?

  45  Ranger  2014-06-20


ベストアンサー

これは、sudosuでプログラムをどのように呼び出すかに大きく依存します。 例えば、私が今いるシステムの場合

                  .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/bin:/sbin:/bin Env=環境変数は、2,3,4の$USERから取得した1と5でリセットされます

そのため、異なるオプションで起動されたスクリプトやプログラムは、異なる $PATH, $HOME を見ることができ、シェルは異なる .bashrc, .profile と環境変数を読み取ることができます。また、$HOMEに関連するファイルを読み込みます。各ユーザは異なる方法で環境を変更することができます (変数、$PATH、.bashrc、.profile、.bash_profile、エイリアス…)。特に、ユーザは $PATH のディレクトリの順序を変えることができ、結果として、スクリプトは例えば /home/$USER/bin でコマンドを実行しても、ルートからのパスではなく /home/$USER/bin で実行することができます

sudo -iではsu -でrootとしてログインしていたので実行できますが、sudo MyCommandで実行した場合とsu -c MyCommandで実行した場合では挙動が異なります


man suから

記述部分では 現在の環境を新しいシェルに渡します。PATHの値は、通常のユーザの場合は/bin:/usr/binに、スーパーユーザの場合は/sbin:/bin:/usr/binにリセットされます … オプションの部分で オプションの部分では以下のようになります。 -, -l, –login ユーザーが直接ログインした場合と同様の環境を提供します

sudoから

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

35  Hastur  2014-06-20


sudoのフルアクセスがあれば、sudo su -を使ってrootになることができるので、セキュリティの点では意味がありません

確かに、rootで実行されたプログラムとsudoで実行されたプログラムの違いを識別する方法があります – getuidgeteuidを使って – しかし、これは巧妙なトリックです。なぜパッチシステムがそんなことをするのでしょうか?

23  sds  2014-06-20


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

rootシェルを取得していないのであれば、もっと違いがあります。サポートメンバーは、sudo patch -p0 < /root/patch.fileではpatchがrootとして実行されているのに<(ファイルからのパイピング)が実行されていない、というようなことを試した経験があるのではないでしょうか

7  Jayen  2014-06-21


sudoアクセスではログファイルが作成されると思いますが、rootアクセスで直接実行するとログファイルが作成されません

1  Ashley Redman BSc  2014-06-21


ルートアクセスをどの程度の粒度にしたいかによります。システム上で異なるタスクを実行する複数のユーザがいる場合は、sudo がより理想的でしょう。私がよく使う例としては、アプリケーションやデータベースを再起動する必要がある場合です。セキュリティは常に最小の権限で行うのがベストです。私はグループを使用し、明示的なアクションを実行するのはそのグループにのみ許可します。このプロセスを説明している良い本は、「Sudo Mastery.実際の人のためのユーザアクセス制御」です。実際には、一般的にはsudoについての良い本です

0  meredithkm  2014-06-21


タイトルとURLをコピーしました