web-dev-qa-db-ja.com

/etc/sudoers.d/のファイルが認識されない

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/のファイルを取得するにはどうすればよいですか?

7
Cybran

IanCの回答によると、この問題は、ファイルの許可(Sudoroot:root 0644が所有するファイルを喜んで受け入れますが、もちろん確認できますが、もちろんroot:root 0440でなければなりません。セキュリティ上の理由で!)が、ファイルの最後に改行があり、その前にWindowsスタイルの行末(\r\n)が付いています。

Sudoは、行末として\nのみを受け入れます。

3
Cybran

どうやら、/etc/sudoersファイルに含まれるファイルには、セキュリティ上の理由から0440のアクセス許可が必要です。この方法では、rootのみがファイルを編集でき、所有者と所有者グループのメンバーのみがそれを読み取ることができるため、特権をエスカレートする試みとしてファイルが使用される可能性が低くなります。

/etc/sudoers.d/READMEでインクルードファイルの要件を確認できますが、他の2つの要件は、ファイル名が.(隠しファイル)で始まってはならず、~(慣習で終わってはいけません)バックアップファイル用)。

理論を確認し、/etc/sudoers.d/READMEファイルを見つけた@steeldriverの功績!

7
IanC

CentOS 7では、名前にドットが含まれていると、システムはファイルを認識しません。例えば:

/etc/sudoers.d/user.perms                  # This file doesn't work
/etc/sudoers.d/userperms                   # This file does
0