
我需要在 python 腳本中清空 Linux 緩衝區緩存,該腳本在 Debian wheezy VM 上運行。
我以 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 設為 on
tee
,這應該可以工作,但用戶可以繼續阿佩什*t和tee
- 我可以在腳本上 setuid 並刪除用戶寫入腳本的寫入權限,這樣他就無法更改它(但話又說回來,這很糟糕,因為用戶可能與程式碼互動)
- 或者我可以寫一個小 bash 腳本,只包含清空linux緩衝區緩存處理,然後刪除寫入/讀取權限,setuid並為使用者新增執行權限
解決這個問題最明智的方法是什麼?
答案1
從您的清單中,只有第四種可能性(在安全目錄中編寫一個小的 setuid 腳本,例如/usr/local/bin
使用者無法更改)可能有效且可能是安全的,但現在經常出現被發行版禁用。
更簡單更好的選擇是將以下行添加到 /etc/sudoers (visudo
為此使用例如)
YOURUSERNAME ALL = NOPASSWD: /sbin/sysctl vm.drop_caches=3
然後包括行
sudo /sbin/sysctl vm.drop_caches=3
在你的腳本中。