web-dev-qa-db-ja.com

「Sudo」はどのユーザーのパスワードを要求しますか?

_$ ls -l /usr/bin/Sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/Sudo
_

したがって、Sudoはすべてのユーザーが実行可能であり、Sudoを実行するすべてのユーザーは、_/usr/bin/Sudo_のset-user-idビットがセットする。

から 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 を読みましたが、上記の質問には答えていません。

10
Tim
  1. 最も一般的な構成では、Sudoはユーザーのパスワードを要求しますrunningSudo(あなたが言うように、プロセスの実際のユーザーIDに対応するユーザー)。 Sudoのポイントは、特定のユーザーに追加の特権を付与することです(sudoersの構成によって決定されます)。これらのユーザーは、自分以外の認証を提供する必要はありません。ただし、SudodoesSudoを実行しているユーザーが本当の自分であることを確認し、パスワード(または認証メカニズムが何であれ)通常はPAMを使用してSudoを設定します。これには、指紋や2要素認証などが含まれる可能性があります)。

    Sudoは、rootになる権利を必ずしも付与するのではなく、さまざまな特権を付与できます。 sudoersによってrootになることが許可されているユーザーは、自分の認証のみを使用してrootになることができます。ただし、許可されていないユーザーは許可されません(少なくとも、Sudoを使用することはできません)。これはLinux自体ではなく、Sudo(およびその認証設定)によって強制されます。

  2. Sudoは、実行開始後に実際にパスワードを要求します。それ以外の場合はできません(つまり何もできませんbefore実行を開始します)。ルートであってもSudoがパスワードを要求するポイントは、(通常の構成で)実行中のユーザーのIDを確認することです。

22
Stephen Kitt

Sudoは通常、それを実行しているユーザーのパスワードを要求します これは設定できます

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

rootpwを設定するとSudoは常にrootのパスワードを要求し、targetpwはユーザーのパスワードを要求しますSudoは最終的にプログラムを実行し、runaspwは、_runas_default_で設定されたユーザーのパスワードを要求します。

このように設定されたSudoバイナリは、実際に任意のユーザーがroot権限で起動できます。 Sudoの認証コードにバグがないと仮定すると、それ自体はそれほど重要ではありません。

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

12
ilkkachu

man Sudoの最初の行から:

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

そう:

  1. 呼び出しユーザーの実際の(有効ではない)ユーザーIDが使用されます...
  2. はい、(許可)ユーザーは、Sudoを実行して必要な(configured)認証を提供することにより、スーパーユーザー(またはその他の)追加の特権を取得できます。許可と構成の両方がsudoersファイルで設定されています。

  3. Linuxは一部のユーザーに対してそれを制限できますか?
    はい、できますが、できません。 Linuxは、SudoバイナリがSudoプログラム内およびファイル/etc/sudoers内の一連のルール(セキュリティポリシー)に基づいて決定できるように設定されています。通常、他のファイルも(または代わりに)使用できます。

man setresuidから:

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

  1. カーネルからスーパーユーザーのアクセス権を取得する唯一の方法は、プログラムsuidを実行することです。それ以外の場合はできません。これは、Linuxがスーパーユーザー権限を付与するために選択した方法です。

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

8
Isaac