ユーザーにrmコマンドを使用する権限を特定のディレクトリにのみ付与するにはどうすればよいですか?これを/etc/sudoersファイルに追加してみました。
myuser ALL = NOPASSWD : /bin/rm ???? /usr/java/jboss/standalone/vfs/*
しかし、そのユーザーとしてログインしてコマンドを実行すると、
/bin/find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec sudo rm -rf {} \;
システムがパスワードを入力するように求められます。
[sudo] password for myuser:
機能させるには、何を変更する必要がありますか?
答え1
sudoers には "stalone" があり、 find コマンドには "standalone" があります。これが問題かもしれません。
答え2
このsudoコマンドaを使用することも/bin/rm -rf /usr/java/jboss/standalone/vfs/file /something_other_might_be_whole_filesystem
許可されています(roaimaがコメントで述べたものと似ています)。
これを行う必要がある場合はワイルドカードがないため、findコマンド全体をsudoersの下に置くことをお勧めします。
おそらくより良い解決策は、ディレクトリの所有権または配置を変更することです。私のユーザー上記のディレクトリに対する書き込み権限を持つグループ。
答え3
他の人がすでに指摘したように、コマンドを使用すると、ユーザーはシステムからディレクトリツリーを削除できます。ユーザーに特定のディレクトリのファイルを削除する権限を付与するには、ラッパースクリプトを作成する必要があります。 sudoersファイルから:
myuser ALL = NOPASSWD: /usr/local/sbin/rm_jboss_vfs
存在する/usr/local/sbin/rm_jboss_vfs
:
#!/bin/sh
for x do
case "$x" in
*/../*|*/..) echo >&2 "$0: .. forbidden"; exit 3;;
/usr/java/jboss/standalone/vfs/[!.]*) rm -rf -- "$x";;
*) echo >&2 "$0: only absolute paths under /usr/java/jboss/standalone/vfs are permitted"; exit 3;;
done
/usr/java/jboss/standalone/vfs
シンボリックリンクが存在する場合、ユーザーはまだエスケープできます。より安全な方法は、ディレクトリにルートを移動することです。rm
次の組み込みコマンドを含むシェルを使用してください。ウエストバンド。
#!/bin/sash
set -e
-chroot /usr/java/jboss/standalone/vfs
for x do
case "$x" in
/usr/java/jboss/standalone/vfs/[!.]*) -rm -rf -- "$x";;
*) echo >&2 "$0: only absolute paths under /usr/java/jboss/standalone/vfs are permitted"; exit 3;;
done
パスワードプロンプトの問題は、ユーザーがパスワードプロンプトでこのコマンドを実行できるようにするファイルに他のエントリがあるために発生する可能性があります。 2つの項目が一致する場合、sudoは最後の項目を使用するため、すべてのNOPASSWD:
項目が最後に配置されます。バラよりパスワードを要求せずにルートで特定のプログラムをどのように実行できますか?
権限エスカレーションを使用する代わりに、ユーザーに必要な操作を実行する権限を付与します。 Unixの権限はあまりにもおおよそです。ユーザーにディレクトリ内のファイルを削除する権限を付与するには、そのディレクトリに対する書き込み権限(特にファイルを作成する権限)を付与する必要があります。少なくとも、削除スクリプトを root として実行するのではなく、グループとして実行し、グループに関連ディレクトリへjboss_vfs_deleters
の書き込み権限を付与します。ディレクトリ権限を設定します。
setfacl -d -R -m group:jboss_vfs_deleters:rwX /usr/java/jboss/standalone/vfs
setfacl -R -m group:jboss_vfs_deleters:rwX /usr/java/jboss/standalone/vfs
sudoers
ファイルから:
myuser ALL = (jboss_vfs_deleters) NOPASSWD: /usr/local/sbin/rm_jboss_vfs
実行sudo -g jboss_vfs_deleters /usr/local/sbin/rm_jboss_vfs …
(権限のないラッパースクリプトからこれを非表示にすることができます)
グループを使用することの欠点は、使用できなくなり、chroot
あまり強力な命名ベースのフィルタリング方法を使用する必要があることです。
/usr
以下のファイルは通常の動作中は修正しないでください。これらのファイルが何であるかはわかりませんが、一般的な作業で修正する場合はおそらく/var
。