
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
あなたのスクリプトで。