上記の問題の正確な原因を見つけようとしています。私の理解は次のとおりです
sudo
/etc/sudoers
ルートとしてのみ読み取ることができるファイルを読み取る必要があるため、-UIDルートを設定する必要があります。su
別の実際の有効なUIDを使用して新しいシェルが作成され、パスワードを確認する必要があります。パスワードを確認するには読み取りが必要な/etc/shadow
ので、-UIDルートを設定する必要があります。パスワードを確認した後、setuid()
UIDパラメータを使用して分岐プロセスを呼び出す必要があり、その親プロセスは有効なUIDでルートを持つ必要があるため、別の理由が発生します。
上記の理由は正しいですか?
ベストアンサー1
su
あなたの理由はほとんど正確ですが、どちらの場合もsudo
rootとして実行する必要がある主な理由は、現在のプロセスのさまざまなユーザーとグループの識別子を変更できる必要があることです。これには次の呼び出しが含まれます。setreuid
、呼び出しプロセスがrootとして実行されている場合にのみ、任意のユーザーとグループに対して機能します。
どちらも異なる機能をsu
持ちsudo
、rootとして実行する必要がありますが、上記と比較すると実際にはマイナーな詳細です。言及したようにsudo
読む必要があり/etc/sudoers
ますが、後者はルートでのみ読むことができるという事実は難しい要件ではありません。どちらのプログラムにもPAMを使用して認証を実行できますが、通常は/etc/shadow
rootでのみ読み取り可能な読み取り可能でなければならない代替機能も含まれています。リストは続きます。ただし、ユーザーおよび/またはグループを変更する機能は、ルートにのみ付与されることを避けられないという事実のために重要ではありません。これがsu
setuidsudo
ルートである理由です。
sudoは内部的にどのように機能しますか?関連する質問は追加の背景情報を提供します。