`sudo`はどのユーザーのパスワードを要求しますか?

`sudo`はどのユーザーのパスワードを要求しますか?
$ 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のパスワードが必要です。

  1. どのユーザーのパスワードを要求していますかsudo?プロセスの実際のユーザーIDで表示されるユーザーですか?

    それでは、すべてのユーザーがsudo自分のパスワードを実行して提供してスーパーユーザー権限を取得できますか? Linuxで特定のユーザーを制限できますか?

  2. sudo入力に必要なパスワードは正しいですか?後ろに execve()実行を開始しますmain()か?/usr/bin/sudo

    これでプロセスのeuidがrootに変更されたので(/ usr / bin / sudoのset-user-idビットが設定されているので)、後でsudoにパスワードを尋ねるのはなぜですか?

ありがとうございます。

私が読んでhttps://unix.stackexchange.com/a/80350/674しかし、上記の質問に対する答えではありません。

答え1

  1. 最も一般的な構成では、sudoユーザーにパスワードを入力するように求められます。走る sudo(あなたが言うように、プロセスの実際のユーザーIDに対応するユーザーです。)重要な点は、ユーザーが自分の認証以外の追加認証を提供することなく、特定のユーザーに追加の権限(の構成sudoによって決定されます)を付与することです。sudoersしかし、sudo する実行中のユーザーがsudo実際に自分が主張している人であることを確認してください。パスワード(または通常はPAMを使用してユーザーに設定された認証メカニズムsudo- 指紋や2段階認証などを含めることができます)を要求してこれを行います。

    sudo必ずしもルート権限を付与するわけではなく、さまざまな権限を付与できます。ルートが許可されているすべてのユーザーは、自分sudoersの認証のみを使用してこれを実行できます。ユーザーは許可されていません(少なくとも許可されていませんsudo)。これはLinux自体では適用されませんが、sudoLinux(および対応する認証設定)では適用されます。

  2. sudo実行を開始した後、パスワードを求めます。そうでなければできません(つまりそれは何もできません。今後実行を開始します)。sudoパスワードを要求する目的(rootユーザーでも)は、実行中のユーザー(通常の構成で)のIDを認証することです。

答え2

sudoただし、通常、これを実行しているユーザーのパスワードを尋ねます。これは設定できます。:

su(1)認証が必要な場合とは異なり、ターゲットsudoersユーザー(またはrootユーザー)の資格情報ではなく、呼び出し元ユーザーの資格情報を確認します。これは後で説明するrootpwtargetpwおよびフラグを介して変更できます。runaspw

設定rootpw常にsudoroot のパスワードを尋ね、最終的にプログラムを実行するユーザーのパスワードを尋ね、targetpwに設定したユーザーのパスワードを尋ねます。sudorunaspwrunas_default

このように設定されたバイナリは、sudo実際にはroot権限を持つすべてのユーザーが起動できます。sudo認証コードに問題がないと仮定すると、それ自体は重要ではありません。

同様に、すべてのプロセスはシステムコール(たとえば)を呼び出してカーネルモードでコードを実行できますopen()。 (これはルートのユーザー空間コードとは異なります。)しかし、カーネルにバグがない限り、任意のコードを実行することはできません。

答え3

最初の行から始めますman sudo

説明
sudoを使用すると、許可されたユーザーはスーパーユーザーまたはセキュリティポリシーで指定されている他のユーザーとしてコマンドを実行できます。呼び出し側ユーザーの実際の(無効な)ユーザーIDは、セキュリティポリシーを照会するために使用されるユーザー名を決定するために使用されます。

だから:

  1. 呼び出したユーザーの実際の(無効な)ユーザーIDを使用して...
  2. はい、何か(許可された)ユーザーはsudoを実行した後に次のことを提供することでこれを行うことができます。設定) 認証が必要です。許可されているものと設定されているものはsudoersファイルに設定されています。

  3. Linuxで特定のユーザーを制限できますか?
    はい、可能です。しかし、そうではありません。 Linuxは、sudoバイナリがsudoプログラムとファイル内の一連のルール(セキュリティポリシー)に基づいて決定を下すように設定されています/etc/sudoers。多くの場合、他のファイルを使用することもできます。

からman setresuid

説明
setresuid()は、呼び出しプロセスの実際のユーザーID、有効なユーザーID、および保存されたset-user-IDを設定します。

  1. カーネルが付与したスーパーユーザー権限を取得する唯一の方法は、suidプログラムを実行することです。そうではありません。これがLinuxがスーパーユーザー権限を付与する方法です。

  2. 後ろにカーネルは、他のユーザーが変更できない実行可能ファイルをロードします。 (ファイルとディレクトリはrootが所有し、rootのみを書き込むことができます。)実行可能ファイル自体(sudo)はパスワード(または他の設定済みエントリ)を要求してユーザーを認証します。 IDは、付与するかどうか、および付与する権限を決定します。

答え4

他の良い答えに加えてsudo

su効果的に他のユーザーになることができます。私のコンピュータは、日常的な使用のために管理者として実行しません。つまり、を(直接)使用できないという意味ですsudo。本当に欲しいなら管理者になることsudoができます。suこの役割に使用されるユーザーですsudo。この場合、管理者アカウントのパスワードを2回(ランタイムに1回su、ランタイムに1回)入力しますsudo

関連情報