sudoで相対実行パスがどのように機能するか

sudoで相対実行パスがどのように機能するか

いくつかの一般的な質問を提起する具体的な質問があります。

特定の問題:

特定の制限が適用される一連のユーザーに適用されるsudoersルールがあります。問題のルールは%pusers ALL=(ALL) NOPASSWD: /bin/vi /etc/httpd/conf/*ユーザーが望むものcd /etc/httpd/confです。現在、sudoersはこれを許可していませんが、絶対パスに対してvi:実行を許可します。 sudoが許可されていることを確認する前に、相対パスがフルパスに変換されないと仮定していますが、この問題を解決する理由と方法を正確にはわかりません。sudo vi httpd.confsudo vi ./httpd.confsudo vi /etc/httpd/conf/httpd.conf

私はRHEL7を排他的に使用しており、他の* nixシステムではこれをテストしていませんが、同様の動作が見られると予想しています。

一般的な質問:

  1. sudoが渡された相対パスを処理する方法実装する上記の例のように横に? (相対コマンドパスではなく、コマンド実行への相対パスです。)
  2. sudoerルールと比較してコマンドを確認するときに、sudoがコマンドの相対実行パスを認識/変換するにはどうすればよいですか?

答え1

一般ユーザーに、sudoまたは同じ編集者へのアクセス権を付与することは危険です。vivim詳しくはこの質問をご覧ください。

最新バージョンsudoでは、以下を指定できますsudoers

%pusers ALL=(ALL) sudoedit /etc/httpd/conf/*

その後、ユーザーは通常どおりに VISUAL または EDITOR 環境変数を使用して選択したエディタを指定し、次を使用できます。

$ sudoedit /etc/httpd/conf/httpd.conf

または

$ cd /etc/httpd/conf
$ sudoedit httpd.conf

代わりに使用することもできますsudoeditsudo -e

最新のsudoはこれをsudoedit組み込みコマンドとして認識sudoし、使用時に引数sudoが編集するファイルのパス名でなければならないことを理解し、相対パス名を処理できます。

一般的な場合(=キーワードを使用しない場合sudoedit)、コマンドパラメータに関する情報には既知のものがないと想定されるため、ファイルに特定のパラメータを含むコマンドをsudo指定した場合にのみ、「sudoers愚かな」文字列一致を実行できます。

sudo厳密に言えば、実際にはApache設定ファイルへのアクセスを許可する必要さえありません。 Apacheは、設定ファイルを読み取ることができる限り、設定ファイルの権限が何であるかを特に気にしません。これでグループができたので、次のようにすることができます。

 chgrp -R pusers /etc/httpd/conf
 chmod g+rws /etc/httpd/conf
 chmod g+rw /etc/httpd/conf/* 

RHEL7はデフォルトで「ユーザーグループ」システムも使用するため、ユーザー値はumaskすでに002または007でなければなりません。これが真であれば、これらの単純なワンタイム設定だけでユーザーにApache設定ファイルへの書き込みアクセスを許可するために必要なすべてです。ユーザーは構成ディレクトリに新しいファイルを作成することもでき、自動的に正しいグループの所有権と権限を取得します。

実際、このシナリオでは、構成ファイルの権限を誤って台無しにする可能性が最も高い方法は、新しいファイルをルートとして追加することです。 rootユーザーは通常、グループ書き込みビット(従来は022またはより厳しい077)を持たないumaskを持ちます。 、root権限がディレクトリsetgid権限よりも優先されます。

いくつかの新しい習慣を学ぶ必要があるかもしれませんが、この場合、「Apacheを設定するにはルートでなければなりません」という事実を忘れてしまうのは本当に良いことかもしれません。 (sudoより多くの監査証跡を提供すると思われる場合は、構成ファイルをGitまたは他のバージョン管理システムに配置することを検討してください。)

関連情報