非ルートユーザーが Linux バッファ キャッシュを空にできるようにする方法

非ルートユーザーが Linux バッファ キャッシュを空にできるようにする方法

Debian wheezy VM 上で実行される Python スクリプトで Linux バッファ キャッシュを空にする必要があります。

私は root として実行しますsync; echo 3 | sudo tee /proc/sys/vm/drop_cachesが、スクリプトは root 権限のないユーザーによって実行されます。

私は以下の可能性を考えました:

  • ユーザーにファイルへの書き込み権限を与えます/proc/sys/vm/drop_caches (これは機能していないようで、実行しようとすると「操作が許可されていません」というメッセージが表示されますchmod 646 /proc/sys/vm/drop_caches)。
  • setuidをオンに設定すればtee動作するはずですが、その後ユーザーはクソ野郎tee
  • スクリプトにsetuidを設定し、ユーザーがスクリプトに書き込むための書き込み権限を削除して、ユーザーがスクリプトを変更できないようにすることができます(ただし、ユーザーがコードとやり取りする可能性があるため、これは良くありません)。
  • または、Linux バッファキャッシュを空にするプロセスを実行し、書き込み/読み取り権限を削除し、setuid してユーザーの実行権限を追加します。

これを解決する最も健全な方法は何でしょうか?

答え1

あなたのリストから、4番目の可能性(安全なディレクトリに小さなsetuidスクリプトを書く、例えば/usr/local/binユーザーが変更できない)だけが機能し、安全である可能性がありますが、今日ではディストリビューションによって無効になっています。

より簡単でより良い方法は、/etc/sudoersに次の行を追加することです(visudoこれにはegを使用します)

YOURUSERNAME     ALL = NOPASSWD: /sbin/sysctl vm.drop_caches=3

そして次の行を追加します

sudo /sbin/sysctl vm.drop_caches=3

あなたのスクリプトで。

関連情報