如何让非 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

在你的脚本中。

相关内容