$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo
soはすべてのユーザーが実行でき、set-user-idビットが設定されているため、sudo
これを実行しているすべてのユーザーはプロセスの有効なユーザーIDとしてルートを持ちます。sudo
/usr/bin/sudo
~からhttps://unix.stackexchange.com/a/11287/674
sudoとsuの最も明白な違いは次のとおりです。sudoにはユーザーパスワードが必要ですsuにはrootのパスワードが必要です。
どのユーザーのパスワードを要求していますか
sudo
?プロセスの実際のユーザーIDで表示されるユーザーですか?それでは、すべてのユーザーが
sudo
自分のパスワードを実行して提供してスーパーユーザー権限を取得できますか? Linuxで特定のユーザーを制限できますか?sudo
入力に必要なパスワードは正しいですか?後ろにexecve()
実行を開始しますmain()
か?/usr/bin/sudo
これでプロセスのeuidがrootに変更されたので(/ usr / bin / sudoのset-user-idビットが設定されているので)、後でsudoにパスワードを尋ねるのはなぜですか?
ありがとうございます。
私が読んでhttps://unix.stackexchange.com/a/80350/674しかし、上記の質問に対する答えではありません。
答え1
最も一般的な構成では、
sudo
ユーザーにパスワードを入力するように求められます。走るsudo
(あなたが言うように、プロセスの実際のユーザーIDに対応するユーザーです。)重要な点は、ユーザーが自分の認証以外の追加認証を提供することなく、特定のユーザーに追加の権限(の構成sudo
によって決定されます)を付与することです。sudoers
しかし、sudo
する実行中のユーザーがsudo
実際に自分が主張している人であることを確認してください。パスワード(または通常はPAMを使用してユーザーに設定された認証メカニズムsudo
- 指紋や2段階認証などを含めることができます)を要求してこれを行います。sudo
必ずしもルート権限を付与するわけではなく、さまざまな権限を付与できます。ルートが許可されているすべてのユーザーは、自分sudoers
の認証のみを使用してこれを実行できます。ユーザーは許可されていません(少なくとも許可されていませんsudo
)。これはLinux自体では適用されませんが、sudo
Linux(および対応する認証設定)では適用されます。sudo
実行を開始した後、パスワードを求めます。そうでなければできません(つまりそれは何もできません。今後実行を開始します)。sudo
パスワードを要求する目的(rootユーザーでも)は、実行中のユーザー(通常の構成で)のIDを認証することです。
答え2
sudo
ただし、通常、これを実行しているユーザーのパスワードを尋ねます。これは設定できます。:
su(1)
認証が必要な場合とは異なり、ターゲットsudoers
ユーザー(またはrootユーザー)の資格情報ではなく、呼び出し元ユーザーの資格情報を確認します。これは後で説明するrootpw
、targetpw
およびフラグを介して変更できます。runaspw
設定rootpw
常にsudo
root のパスワードを尋ね、最終的にプログラムを実行するユーザーのパスワードを尋ね、targetpw
に設定したユーザーのパスワードを尋ねます。sudo
runaspw
runas_default
このように設定されたバイナリは、sudo
実際にはroot権限を持つすべてのユーザーが起動できます。sudo
認証コードに問題がないと仮定すると、それ自体は重要ではありません。
同様に、すべてのプロセスはシステムコール(たとえば)を呼び出してカーネルモードでコードを実行できますopen()
。 (これはルートのユーザー空間コードとは異なります。)しかし、カーネルにバグがない限り、任意のコードを実行することはできません。
答え3
最初の行から始めますman sudo
。
説明
sudoを使用すると、許可されたユーザーはスーパーユーザーまたはセキュリティポリシーで指定されている他のユーザーとしてコマンドを実行できます。呼び出し側ユーザーの実際の(無効な)ユーザーIDは、セキュリティポリシーを照会するために使用されるユーザー名を決定するために使用されます。
だから:
- 呼び出したユーザーの実際の(無効な)ユーザーIDを使用して...
はい、何か(許可された)ユーザーはsudoを実行した後に次のことを提供することでこれを行うことができます。設定) 認証が必要です。許可されているものと設定されているものはsudoersファイルに設定されています。
Linuxで特定のユーザーを制限できますか?
はい、可能です。しかし、そうではありません。 Linuxは、sudoバイナリがsudoプログラムとファイル内の一連のルール(セキュリティポリシー)に基づいて決定を下すように設定されています/etc/sudoers
。多くの場合、他のファイルを使用することもできます。
からman setresuid
:
説明
setresuid()は、呼び出しプロセスの実際のユーザーID、有効なユーザーID、および保存されたset-user-IDを設定します。
カーネルが付与したスーパーユーザー権限を取得する唯一の方法は、suidプログラムを実行することです。そうではありません。これがLinuxがスーパーユーザー権限を付与する方法です。
後ろにカーネルは、他のユーザーが変更できない実行可能ファイルをロードします。 (ファイルとディレクトリはrootが所有し、rootのみを書き込むことができます。)実行可能ファイル自体(sudo)はパスワード(または他の設定済みエントリ)を要求してユーザーを認証します。 IDは、付与するかどうか、および付与する権限を決定します。
答え4
他の良い答えに加えてsudo
:
su
効果的に他のユーザーになることができます。私のコンピュータは、日常的な使用のために管理者として実行しません。つまり、を(直接)使用できないという意味ですsudo
。本当に欲しいなら管理者になることsudo
ができます。su
この役割に使用されるユーザーですsudo
。この場合、管理者アカウントのパスワードを2回(ランタイムに1回su
、ランタイムに1回)入力しますsudo
。