如何讓非 root 使用者清空 Linux 緩衝區緩存

如何讓非 root 使用者清空 Linux 緩衝區緩存

我需要在 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,這應該可以工作,但用戶可以繼續阿佩什*ttee
  • 我可以在腳本上 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

在你的腳本中。

相關內容