Ubuntuサーバー16.04.1の新規インストールを実行して、特定のコマンドに対して1人のユーザーにroot権限を付与するために、/etc/sudoers.d/
にファイルを追加しようとしました。
ファイル/etc/sudoers.d/servicetest
に次のコンテンツを追加しました:
servicetest ALL = (root) NOPASSWD: /bin/systemctl status *
ファイル/etc/sudoers
は変更されません。最後の行として#includedir /etc/sudoers.d
が含まれています。残念ながら、ユーザーservicetest
としてSudoを使用して適切なコマンドを実行すると、このセットアップは機能しませんが、パスワードの入力を求められます。ただし、ファイルの内容を/etc/sudoers.d/servicetest
の最後に/etc/sudoers
の最後に移動すると、すべてが期待どおりに機能します。
この問題の原因は何ですか? /etc/sudoers.d/
のファイルを取得するにはどうすればよいですか?
IanCの回答によると、この問題は、ファイルの許可(Sudo
がroot:root 0644
が所有するファイルを喜んで受け入れますが、もちろん確認できますが、もちろんroot:root 0440
でなければなりません。セキュリティ上の理由で!)が、ファイルの最後に改行があり、その前にWindowsスタイルの行末(\r\n
)が付いています。
Sudo
は、行末として\n
のみを受け入れます。
どうやら、/etc/sudoers
ファイルに含まれるファイルには、セキュリティ上の理由から0440のアクセス許可が必要です。この方法では、rootのみがファイルを編集でき、所有者と所有者グループのメンバーのみがそれを読み取ることができるため、特権をエスカレートする試みとしてファイルが使用される可能性が低くなります。
/etc/sudoers.d/README
でインクルードファイルの要件を確認できますが、他の2つの要件は、ファイル名が.
(隠しファイル)で始まってはならず、~
(慣習で終わってはいけません)バックアップファイル用)。
理論を確認し、/etc/sudoers.d/README
ファイルを見つけた@steeldriverの功績!
CentOS 7では、名前にドットが含まれていると、システムはファイルを認識しません。例えば:
/etc/sudoers.d/user.perms # This file doesn't work
/etc/sudoers.d/userperms # This file does