sudoで特定のディレクトリでのみファイル削除

表題の通り。ユーザやディレクトリの設計をちゃんとしていれば良いのであるが、閲覧だけさせているユーザに他のアプリケーションで作成されるとあるファイルだけを消す権限だけを渡したい。`sudo`で頑張ってみる。

■ 環境

  • Linux

■ sudo

とあるコマンドのみを`sudo`で実行可能とさせるには下記のようにしている。

worker ALL=(ALL) NOPASSWD:/path/to/command

これで`worker`ユーザに`/path/to/command`コマンドが実行できるようになる。

同じように下記のように指定できるのかと思ってみたが”Syntax error“となった。”/path/to/directory“配下のファイルのみ削除する権限を与えたかった。

worker ALL=(ALL) NOPASSWD:/path/to/command,rm /path/to/directory/*

`rm`コマンドに指定するところを絶対パスにするといけるようである。

worker ALL=(ALL) NOPASSWD:/path/to/command,/bin/rm /path/to/directory/*

としたら思い通りの動作をするようになった。

しかし問題点がまだ1つ。削除するファイルを絶対パスで指定すると思い通りの動作をしてくれるのであるが、ファイルのあるディレクトリに移動して削除をすることができない。

$ cd /path/to/directory
$ ls
file1     file2    file3
$
$ sudo rm file1
[sudo] password for worker:
Sorry, try again.
  :
$

権限が無い為にパスワードを問われてしまう。同じディレクトリにいても下記のように実行すれば可能である。

$ cd /path/to/directory
$ ls
file1     file2    file3
$
$ sudo rm /path/to/directory/file1
$
$ ls
file2    file3
$

さて何かうまい方法はないであろうか。

以上。