Red Hat Training

A Red Hat training course is available for RHEL 8

第12章 sudo アクセスの管理

システム管理者は、sudo アクセスを許可して、通常 root ユーザー用に予約されている管理コマンドを非 root ユーザーが実行できるようにすることができます。その結果、root 以外のユーザーは、root ユーザーアカウントにログインせずにそのようなコマンドを実行できます。

12.1. sudoers のユーザー認可

/etc/sudoers ファイルは、どのユーザーが sudo コマンドを使用して他のコマンドを実行できるかを指定します。ルールは、個別のユーザーおよびユーザーグループに適用できます。エイリアスを使用すると、ホスト、コマンド、さらにはユーザーのグループに対するルールをより簡単に定義することもできます。デフォルトのエイリアスは、/etc/sudoers ファイルの最初の部分で定義されます。

ユーザーが権限を持たない sudo を 使用してコマンドを入力すると、システムは文字列 <username> : user NOT in sudoers を含むメッセージをジャーナルログに記録します。

デフォルトの /etc/sudoers ファイルは、認可の情報と例を提供します。対応する行のコメントを解除すると、特定のルール例をアクティブにできます。ユーザー権限に関するセクションには、次のような導入部分が付いています。

## Next comes the main part: which users can run what software on
## which machines  (the sudoers file can be shared between multiple
## systems).

次の形式を使用して、新しい sudoers 権限を作成したり、既存の権限を変更したりできます。

<username> <hostname.example.com>=(<run_as_user>:<run_as_group>) <path/to/command>

詳細は以下のようになります。

  • <username> は、コマンドを入力するユーザーです (例: user1)。値が % で始まる場合は、%group1 などのグループを定義します。
  • <hostname.example.com> は、 ルールが適用されるホストの名前です。
  • セクション (<run_as_user> : <run_as_group>) は、コマンドを実行するユーザーまたはグループを定義します。このセクションを省略すると、<username> は root としてコマンドを実行できます。
  • <path/to/command> は、 コマンドへの完全な絶対パスです。また、コマンドパスの後にオプションを追加することにより、特定のオプションおよび引数を指定したコマンドのみを実行するようにユーザーを制限することもできます。オプションを指定しないと、すべてのオプションが有効な状態でコマンドを使用できます。

これらの変数のいずれかを ALL に置き換えることで、ルールをすべてのユーザー、ホスト、またはコマンドに適用できます。

警告

ALL ALL=(ALL) ALL などの過度に寛容なルールを使用すると、すべてのユーザーがすべてのホストですべてのコマンドをすべてのユーザーとして実行できます。これは重大なセキュリティーリスクをもたらします。

! を使用して引数を否定的に指定できます。Operator。たとえば、!root は root を除くすべてのユーザーを指定します。特定のユーザー、グループ、およびコマンドを許可する方が、特定のユーザー、グループ、およびコマンドを禁止するよりも安全であることに注意してください。これは、許可ルールにより、新しい未承認のユーザーまたはグループもブロックされるためです。

警告

ユーザーは、alias コマンドを使用してコマンドの名前を変更することで、そのようなルールを克服できるため、コマンドに否定的なルールを使用することは避けてください。

システムは、/etc/sudoers ファイルを最初から最後まで読み取ります。したがって、ファイルにユーザーの複数のエントリーが含まれている場合、エントリーは順番に適用されます。値が競合する場合は、最も具体的な一致ではない場合でも、システムは最後の一致を使用します。

システム更新中にルールを保持し、エラーを簡単に修正するには、ルールを/etc/sudoers ファイルに直接入力するのではなく、/etc/sudoers.d/ ディレクトリーに新しいファイルを作成して新しいルールを入力します。システムは、/etc/sudoers ファイル内で以下の行に到達する際に、/etc/sudoers.d ディレクトリー内のファイルを読み取ります。

#includedir /etc/sudoers.d

この行の先頭にある番号記号 (#) は構文の一部であり、その行がコメントであることを意味するものではないことに注意してください。そのディレクトリー内のファイル名にはピリオドを含めることはできず、チルダ (~) で終わることもできません。

関連情報

  • sudo(8) および sudoers(5) の man ページ