我需要在 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
在你的脚本中。