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


48

前回、これらのリスクについて(/ 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でも問題があることを意味します)が、1つの記事ではvisudo、それ。つまりsudo、ディレクトリを間違えた場合、使用する権利を失います。

もしそうなら、なぜ/etc/sudoers.dがあるのですか?または、/ etc / sudoers.dのファイルを編集する良い方法はありますか?

回答:


45

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

私の経験では、このディレクトリ内のファイルのルールはのルールよりも緩いものです/etc/sudoers。これには以下が含まれます:

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

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

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

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


1
あなたが述べたsudoers.dの2つの特徴は、本当に重要で役立つように思われます。ありがとうございました!
aob

それらが実際にsudoers.dの特性ではない理由についての私の答えと警告を参照してください。
dragon788

1
「ファイル内のミスがsudo失敗することはありませんでした」という声明に強く反対します。/etc/sudoers.dのファイルの構文が正しくないため、RHELでsudoを壊しました。これには修正に多大な労力が必要であり、visudo -fこれらのファイルの編集には常に使用することをお勧めします。
79E09796

@ 79E09796 /etc/sudoers.dのファイルが壊れていますが、他のファイルのルールに問題はありません。YMMV。システムに接続するsudo設定を破ると、問題が発生します。システムを再起動するためのアクセス権がある場合は、比較的簡単に復旧モードで再起動してファイルを修正できます。私はvisodoを使用して編集するか、少なくともsudo構成ファイルの変更を検証することがベストプラクティスであることに同意します。
BillThor

62

はい、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. 構文:両方visudovisudo -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)エディターからのバックアップファイルが無視されるように行われます。


感謝しますが、疑問があります。あるvisudo -f安全ですか?
aob

5
はい、visudo -f通常のように安全な方法で編集しvisudoます。我々が持っている理由ですvisudo、なぜそれが提供する-fオプションを選択します。
ジョン1024

-fこれを使用すると、アクセス許可がどのように無視されるかについて大きな注意が必要です。
dragon788 16

1
例外セクションをありがとう。私は自分のファイルに次のような名前を付けたので/etc/sudoers.d/mysudorules.sudo、答えを読む前に内部のルールが適用されなかった理由を理解することはできませんでした。
ザロス

1
例外について言及していただきありがとうございます。下のファイル/sudoers.d/mysite.co.ukが機能せず、名前を変更しmysiteた後に機能します!:)
J86

20

なぜ/etc/sudoers.dがあるのですか?

自動化されたツール(ChefやPuppetなど)は、に変更を加えるよりも個々のファイルをこのディレクトリにドロップする方が簡単です/etc/sudoers

のファイル/etc/sudoers.dは(実質的に)連結されます。あなたは、このパターンのいくつかの他のインスタンスがわかります/etcように、/etc/cron.d/etc/logrotate.d


他の同様のディレクトリがあることを知りませんでした。ありがとうございました。
aob

14

使用してのもう一つの利点visudo -fいくつかの回答で述べたように、対応するオプションもありです-c--checkあなたはsudoers.dファイルまたはあなたがsudoers.dに置きたいかもしれません、他のファイルに無効な情報を持っていないことを確認しが。これは、自動化ツールで言及されている場合に本当に便利です。たとえば、

sudo visudo -c -q -f /home/myuser/mysudoers && \
sudo chmod 600 /home/myuser/mysudoers && \
sudo cp /home/myuser/mysudoers /etc/sudoers.d/mysudoers

これはサイレントにファイルをチェックし(-qによる出力なし)、エラーが返されない場合のみ(出口1は無効なsudoersファイルを意味します)、ファイルをsudoers.dにコピーします。最初に正しくする必要なく作業します(使用sudo visudo -f /etc/sudoers.d/myfileしないと、修正しないとコンテンツが破棄されます)。

また、他の回答からのこれらのステートメントに関する注意の言葉

私の経験では、このディレクトリ内のファイルの規則は/ etc / sudoersよりも緩やかです。これには以下が含まれます:

ファイルの間違いが原因でsudoが失敗することはありませんでした。ただし、ファイルは無視されました。許可ルールはそれほど厳しくはありません。該当するグループにファイルの読み取りを許可します。/ etc / sudoでそれが可能だとは思わない。

/etc/sudoers.d内のファイルは、/ etc / sudoersと同じ構文に従う必要があります。なぜなら、同じエントリが複数ある場合、システムは単にすべてのファイルを「winning」の最後のファイルと連結するからです。特異な設定。

/etc/sudoers.d/内のファイルに対するアクセス許可がひどく間違っている(誰もが書き込み可能)場合、それらは無視されます。これが無効なファイルを見落とす原因となっている可能性がsudoあります。正しい許可を持つdファイル。

別のユーザーとして、またはルート端末からこのコマンドを実行するために必要な書き込み許可を誤って「その他」に許可した場合、sudoersファイルを誰でも読み取り可能にすることができます。これは、ファイルがroot:root以外の誰かによって所有されている場合にも破損する可能性があります。

sudo chmod 644 /etc/sudoers.d/mysudoers
sudo chown root:root /etc/sudoers.d/mysudoers

実行するchmod o+w /etc/sudoers.d/vagrantと、Vagrantユーザーとしてsudoが実行できなくなると、パスワードの入力を求められて失敗することを確認しました。

私が走ったときにsudo -l別の有効なsudoのユーザーとして応用命令権限を表示するために、私はまた、ファイルのアクセス権に関する警告を受けました。これは、o+wユーザーにsudo権限を付与するファイルに権限を適用したときに、「迷惑な」ユーザーがsudoを失ったことを確認するために使用したのと同じコマンドです。


3

一般的な答えへの短いアドオン...他の答えはどれも私の問題を解決しませんでした。

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.