_$ 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のパスワードが必要なことです。
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 を読みましたが、上記の質問には答えていません。
最も一般的な構成では、Sudo
はユーザーのパスワードを要求しますrunningSudo
(あなたが言うように、プロセスの実際のユーザーIDに対応するユーザー)。 Sudo
のポイントは、特定のユーザーに追加の特権を付与することです(sudoers
の構成によって決定されます)。これらのユーザーは、自分以外の認証を提供する必要はありません。ただし、Sudo
doesSudo
を実行しているユーザーが本当の自分であることを確認し、パスワード(または認証メカニズムが何であれ)通常はPAMを使用してSudo
を設定します。これには、指紋や2要素認証などが含まれる可能性があります)。
Sudo
は、rootになる権利を必ずしも付与するのではなく、さまざまな特権を付与できます。 sudoers
によってrootになることが許可されているユーザーは、自分の認証のみを使用してrootになることができます。ただし、許可されていないユーザーは許可されません(少なくとも、Sudo
を使用することはできません)。これはLinux自体ではなく、Sudo
(およびその認証設定)によって強制されます。
Sudo
は、実行開始後に実際にパスワードを要求します。それ以外の場合はできません(つまり何もできませんbefore実行を開始します)。ルートであってもSudo
がパスワードを要求するポイントは、(通常の構成で)実行中のユーザーのIDを確認することです。
Sudo
は通常、それを実行しているユーザーのパスワードを要求します これは設定できます :
su(1)
とは異なり、sudoers
で認証が必要な場合は、ターゲットユーザー(またはルート)の資格情報ではなく、呼び出し元のユーザーの資格情報を検証します。これは、後で説明するrootpw
、targetpw
、runaspw
フラグを使用して変更できます。
rootpw
を設定するとSudo
は常にrootのパスワードを要求し、targetpw
はユーザーのパスワードを要求しますSudo
は最終的にプログラムを実行し、runaspw
は、_runas_default
_で設定されたユーザーのパスワードを要求します。
このように設定されたSudo
バイナリは、実際に任意のユーザーがroot権限で起動できます。 Sudo
の認証コードにバグがないと仮定すると、それ自体はそれほど重要ではありません。
やや同様に、任意のプロセスは、任意のシステムコール、たとえばopen()
を呼び出すことにより、カーネルモードでコードを実行することもできます。 (これはrootのユーザー空間コードと同じではありません。)カーネルにバグがない限り、任意のコードを実行することはできません。
man Sudo
の最初の行から:
説明
Sudoを使用すると、許可されたユーザーが、セキュリティポリシーで指定されているスーパーユーザーまたは別のユーザーとしてコマンドを実行できます。呼び出し元ユーザーの実際の(有効ではない)ユーザーIDを使用して、セキュリティポリシーを照会するユーザー名を決定します。
そう:
はい、(許可)ユーザーは、Sudoを実行して必要な(configured)認証を提供することにより、スーパーユーザー(またはその他の)追加の特権を取得できます。許可と構成の両方がsudoersファイルで設定されています。
Linuxは一部のユーザーに対してそれを制限できますか?
はい、できますが、できません。 Linuxは、SudoバイナリがSudoプログラム内およびファイル/etc/sudoers
内の一連のルール(セキュリティポリシー)に基づいて決定できるように設定されています。通常、他のファイルも(または代わりに)使用できます。
man setresuid
から:
説明
setresuid()は、呼び出し元プロセスの実際のユーザーID、実効ユーザーID、および保存されたset-user-IDを設定します。
カーネルからスーパーユーザーのアクセス権を取得する唯一の方法は、プログラムsuidを実行することです。それ以外の場合はできません。これは、Linuxがスーパーユーザー権限を付与するために選択した方法です。
変更後カーネルは、他のユーザーが変更できない実行可能ファイル(ルートが所有し、ルートのみが書き込み可能なファイルとディレクトリ)をロードしました。実行可能ファイル自体(Sudo)は、パスワードを要求してユーザーを認証します(または構成された他の何か)を付与するかどうか、および付与する権限を決定します。