私はある製品のサポートメンバーと仕事をしているのですが、彼は一連のパッチをインストールするには私が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
これは、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/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
で実行されたプログラムの違いを識別する方法があります – getuid
とgeteuid
を使って – しかし、これは巧妙なトリックです。なぜパッチシステムがそんなことをするのでしょうか?
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