前回、私はこれらのリスクについて尋ねました(/ 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にあるファイルを編集する良い方法はありますか?
システムをアップグレードしても、/etc/sudoers.d
内のファイルに加えられた変更はそのまま残ります。これにより、システムのアップグレード時にユーザーのロックアウトを防ぐことができます。 Ubuntuはこの振る舞いを好む傾向があります。他のディストリビューションもこのレイアウトを使用しています。
私の経験では、このディレクトリ内のファイルに関する規則は/etc/sudoers
よりも緩いものです。これは含まれています:
Sudo
が失敗することはありませんでした。しかし、ファイルは無視されました。/etc/sudoers
で可能だったとは思わない。セキュリティを維持するためには、書き込み権限をroot
に制限する必要があります。 Sudoの現在のUbuntuバージョンはグループまたはその他のための読み取り権限を許可します。 (この機能により、rootアクセスを必要とせずにSudoアクセスを監査することができます。)visudo
コマンドのデフォルトは/etc/sudoers
だけです。 -f
オプションで指定したファイルを編集して検証します。この機能を使用して、/etc/sudoers
または/etc/sudoders.d
に自動的にインストールされるファイルを編集します。ただし、他のファイルからの定義が見つからない可能性があります。ファイルを独立させるのが最善です。
スタンドアロンファイルを持つことができるため、アプリケーションはインストール時にSudo
機能を有効にし、アンインストール時にそれらを削除することが簡単になります。自動設定ツールもこの機能を使用できます。
この機能を使用して、特定のシステム上の特定のユーザーグループにアクセス権を付与するために必要な変更を特定しました。
はい、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が標準入力から読み込まれることを示します。
要約すれば:
構文:visudo
とvisudo -f
は同じ構文検査を実行します。
権限/所有権:大規模システムの管理を補助する機能 として追加された 、visudo -f
の下で編集されたファイル所有権やパーミッションのチェックは行われません。これにより、ファイルの構文チェックをオフラインで、またはリビジョン管理システムの一部として行うことができます。
/etc/sudoers.d/
を使うのか通常/etc/sudoers
はあなたのディストリビューションのパッケージマネージャの管理下にあります。そのファイルに変更を加え、パッケージマネージャがそれをアップグレードしたい場合は、手動で変更を調べて、それらが新しいバージョンにどのようにマージされるかを承認する必要があります。ローカルの変更を/etc/sudoers.d/
ディレクトリのファイルに保存することで、この手動の手順を回避してアップグレードを自動的に進めることができます。
Sudo
が/etc/sudoers
内のファイルを無視するのはいつですか?/etc/sudoers
ファイルに次の行が含まれているとします。
#includedir /etc/sudoers.d
Sudo
はディレクトリ/etc/sudoers.d
内のファイルを読み込みます。
例外は以下のとおりです。
~
で終わるファイル.
文字が含まれているファイルこれは(a)パッケージマネージャの利便性のために行われ、(b)エディタからのバックアップファイルは無視されるようにします。
/etc/sudoers.dがあるのはなぜですか?
脆弱な可能性がある/etc/sudoers
に変更を加えるよりも、自動化ツール(ChefやPuppetなど)が個々のファイルをこのディレクトリにドロップする方が簡単なためです。
/etc/sudoers.d
内のファイルは(事実上)連結されています。 /etc
や/etc/cron.d
など、/etc/logrotate.d
にこのパターンの他のインスタンスがいくつかあります。
いくつかの回答で言及されているようにvisudo -f
を使用することのもう一つの利点はあなたがsudoers.dファイルまたはあなたがsudoers.dに入れたいと思うかもしれない他のファイルに無効な情報がないことを検証する対応するオプション-c
または--check
があることですあなたが実行することができるようにこれは自動化されたツールで言及された場合に本当に便利です。
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と同じ構文に従う必要があります。カバーの下に、同じエントリが複数ある場合、システムは単にすべてのファイルを最後のファイルと連結するためです。特異な設定.
/etc/sudoers.d/内のファイルに対するパーミッションが非常に不正確(全世界書き込み可能)である場合、それらは無視される可能性があります。そうしないと、無効なsudoersを持つことによってSudo
コマンドを深刻に破ることができます。正しい権限を持つ.dファイル。
あなたが誤って他のユーザとしてSudoに必要な 'other'書き込み許可を許可したり、root端末からこのコマンドを実行したりした場合、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ユーザーとして表示するためにSudo -l
を実行したときに、ファイルの権限に関する警告も表示されました。これは、私がo+w
権限をファイルに適用したときに 'vagrant'ユーザーがSudoを失ったことを確認するために使用したのと同じコマンドです。
一般的な回答を少し追加するだけで、他の回答のどれも私の問題を解決しませんでした。
あなたの行がsudoers.dで動くがsudoers.dで動かないならば、#includeを動かすか、あなたのsudoers.dファイルの順序を変えることを試してください(数字を頭に付けることによって)。最も具体的なものがファイルの最初にあるはずです。
私はこんな感じでした:
somebody ALL=(ALL): somecommand
somebody ALL=(someoneelse) NOPASSWD: somecommand
そして2番目のものは最初のものがすでにマッチしているので効果がありませんでした。 NOPASSWDは条件ではありませんが、アクションを変更するための何らかの方法です。
Sudoers.dディレクトリのおかげで、1つのファイルに含まれていなかったので、それは明白ではありませんでした。