サービスユーザーがダイアログスクリプトを介してファイルを検索できるようにしたいのですが、正規表現を含む1つのコマンドのみを許可するようにsudoersを介してfindコマンドをロックしたいと思います。
この正確なコマンドはsudoersでのみ許可する必要があり、他のコマンドは許可されません(特にfindの-deleteおよび-exec機能が心配されます)。
operator ALL=NOPASSWD:/bin/find / -type f -regex ".*/core.[0-9]*$"
しかし、sudoers globは正規表現パターンのために混乱しているようです。正規表現パターンを脱出しようとしましたが、sudoは常にパスワードを要求します。
完全な「ロック」をスクリプトに移動し、sudoが書き込み権限でのみスクリプトを実行できるようにすることは、展開プロセスを複雑にするSVNルーチンを介してこのダイアログスクリプトを更新するため、rootユーザーにはオプションではありません。
答え1
正規表現をフラグ引数として使用しているため、正規表現がサポートされていなくても、シェルワイルドカードなどのワイルドカードのみがサポートされます(find
参照sudoers
マニュアルページ)だからあなたが試しているアプローチは概念的に妥当に見えます。
GNU bash 4.x 以上の場合、-regex 基本モードの構文は EMACS 正規表現構文です。微妙な違いがあるかもしれません(知るには調査する必要があります)。たとえば、ユーティリティ正規表現の構文など、より使いやすいアイテムがありますsed
。 RHELを使用している場合は、その文書をもう一度確認してください。状況が若干異なる場合があります...とにかく、次のようにいつでも指定できます。awk
grep
operator ALL=NOPASSWD: /usr/bin/find -type f -regextype grep -regex ".*core\.[0-9]*$"
...一般的なファイルを意味します。現在のディレクトリから下へ、1つ以上のランダムな文字で始まり、その後に文字列 "core."が続き、1つ以上の数字で終わります。
繰り返しますが、これはあなたが望むものですか?
そうでない場合、正規表現で目的の操作を一般英語で指定したり、キャプチャしたいことのいくつかの重要な例を提供したら、適切なGNUスタイルのgrepスタイルの正規表現に翻訳できます。
フレンドリーなヒント:
- さまざまなプラットフォームで同じルールを使用するには、上記のように適用する
sudoers
正規表現構文タイプを体系的に指定することをお勧めします。 - の文脈では、
sudoers
常に検索を実行するパスを指定します。-path
検索するサブツリーの最上位サブツリーへの絶対パスの後にこのフラグを使用します。
======================
全体的に読みやすさとセキュリティ上の理由でを処理するときは、通常、引数を許可しない権限751を使用してという名前の、所有しているようなcmdのsudoers
最小find
ラッパースクリプトを作成することをお勧めします(を使用して)。findcore.sh
root:root
""
operator ALL=NOPASSWD: /path/to/findcore.sh ""
その後、優先メカニズムを介して実行される更新のために、ファイルにsudo
2番目の規則を含めることで、SVNまたは他のパスワードのないメカニズムを介してスクリプトの内容を簡単に更新できます。sudoers
ファタイ