システムに /etc/sudoers.d があるのはなぜですか? どのように編集すればよいですか?

システムに /etc/sudoers.d があるのはなぜですか? どのように編集すればよいですか?

前回、私はこれらのリスクについて質問しました(/etc/sudoers)。

user_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
%group_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

この問題について考えていたとき、私は/etc/sudoers.dディレクトリ。ディレクトリ内のファイルは と同様の機能を持つはずです/etc/sudoers(つまり、上記のスクリプトは であっても問題があります/etc/sudoers.d)。ただし、ある記事では、 ではその中のファイルを編集できないため、ディレクトリを使用すべきではないと述べられています。つまり、ディレクトリ内で間違いを犯した場合、visudo使用権を失うことになります。sudo

もしそれが本当なら、なぜ私たちは/etc/sudoers.d? それとも、ファイルを編集する良い方法がありますか?/etc/sudoers.d?

答え1

システムをアップグレードしても、ファイルに加えられた変更は/etc/sudoers.dそのまま残ります。これにより、システムのアップグレード時にユーザーがロックアウトされるのを防ぐことができます。Ubuntu ではこの動作が好まれる傾向があります。他のディストリビューションでもこのレイアウトが使用されています。

私の経験では、このディレクトリ内のファイルに関するルールは の場合よりも緩やかです/etc/sudoers。これには次のものが含まれます。

  • ファイルの間違いが原因sudoで失敗することはありません。ただし、ファイルは無視されました。
  • 権限ルールはそれほど厳密ではないようです。 該当するグループまたは他のユーザーがファイルを読み取ることができます。 ではそれが可能だったとは思えません/etc/sudoers。 セキュリティを維持するために、書き込み権限を に制限する必要がありますroot。 の現在の Ubuntu バージョンでは、グループまたは他のユーザーの読み取り権限が許可されています。 (この機能により、ルート アクセスを必要とせずに sudo アクセスを監査できます。)

コマンドvisudoのデフォルトは のみです/etc/sudoers。 オプションで指定したファイルを編集して検証します。 として、または に-f自動的にインストールされるファイルを編集するために、この機能を使用します。 ただし、他のファイルの定義が見つからない場合があります。 ファイルを独立させるのが最善です。/etc/sudoers/etc/sudoders.d

スタンドアロン ファイルを持つ機能により、アプリケーションはsudoインストール時に機能を有効にし、アンインストール時にそれらの機能を削除することが簡単になります。自動構成ツールでもこの​​機能を使用できます。

この機能を使用して、特定のシステム上の特定のユーザー グループにアクセス権を付与するために必要な変更を分離しました。

答え2

はい、それらのファイルを編集するために を使用できますvisudo。オプションで編集するファイルの名前を指定するだけです-f。例:

visudo -f /etc/sudoers.d/somefilename

または、必要な場合:

sudo visudo -f /etc/sudoers.d/somefilename

ドキュメンテーション

からman visudo

-f sudoers
sudoers ファイルの場所を指定して変更します。このオプションを使用すると、visudo はデフォルトの /etc/sudoers ではなく、選択した sudoers ファイルを編集 (またはチェック) します。使用されるロック ファイルは、指定された sudoers ファイルに「.tmp」が追加されたものです。チェックのみのモードでのみ、-f の引数は「-」にすることができます。これは、sudoers が標準入力から読み取られることを示します。

要約すれば:

  1. 構文:両方visudoともvisudo -f 同じ構文チェックを実行する

  2. 権限/所有権: 追加された機能として大規模システムの管理を支援するでは、編集されたファイルvisudo -fの所有権や権限はチェックされません。これにより、オフラインで、またはリビジョン コントロール システムの一部としてファイルの構文チェックが可能になります。

なぜ使うのか/etc/sudoers.d/

通常、/etc/sudoersディストリビューションのパッケージ マネージャーによって制御されます。そのファイルに変更を加え、パッケージ マネージャーがそれをアップグレードする場合、変更を手動で検査し、新しいバージョンにマージする方法を承認する必要があります。ローカルの変更をディレクトリ内のファイルに配置すると/etc/sudoers.d/、この手動の手順が回避され、アップグレードが自動的に続行されます。

sudoでファイルを無視するのはいつですか/etc/sudoers?

ファイルに次の行が含まれている場合/etc/sudoers:

#includedir /etc/sudoers.d

sudoディレクトリ内のファイルを読み取ります/etc/sudoers.d

例外は次のとおりです:

  1. 名前が~
  2. 名前に文字が含まれる.ファイル

これは、(a) パッケージ マネージャーの利便性のため、および (b) エディターからのバックアップ ファイルが無視されるようにするために行われます。

重要: 上記の例外 2 は非常に一般的なものであり、mysudo.confや などの一見妥当なファイル名は、名前に が含まれているmysudo.txtため無視されることに注意してください。.

答え3

/etc/sudoers.d が存在するのはなぜですか?

自動化ツール (Chef や Puppet など) にとっては、/etc/sudoers脆弱な可能性がある に変更を加えるよりも、個々のファイルをこのディレクトリにドロップする方が簡単だからです。

内のファイルは(事実上) 連結されています。 には、やなど、/etc/sudoers.dこのパターンの他のインスタンスもいくつかあります。/etc/etc/cron.d/etc/logrotate.d

答え4

一般的な回答に対するちょっとした補足ですが、他の回答では、順序が重要であるという私の問題は解決されませんでした。

行が sudoers では機能するが sudoers.d では機能しない場合は、#include を移動するか、sudoers.d ファイルの順序を変更してみてください (先頭に数字を付ける)。最も具体的な内容がファイルの先頭にある必要があるようです。

次のようなものがありました:

somebody ALL=(ALL): somecommand
somebody ALL=(someoneelse) NOPASSWD: somecommand

そして、最初のものがすでに一致しているため、2 番目は効果がありません。NOPASSWD は条件ではなく、アクションを変更する方法です。

また、sudoers.d ディレクトリのせいで、単一のファイルではなかったため、明らかではありませんでした。

関連情報