以编程方式将Linux缓存作为非root用户删除

时间:2013-02-13 19:54:08

标签: c++ linux permissions embedded-linux procfs

出于测试目的,我可以通过在procfs下写入Linux中的drop_caches文件来删除缓存内存。我只能以root身份执行此操作。这是在嵌入式Linux上,因此没有sudo。

sync; echo 3 > /proc/sys/vm/drop_caches

我可以通过在帖子中执行某些操作来以c ++编程方式写入文件 - > How to programmatically clear the filesystem memory cache in C++ on a Linux system?

sync();
std::ofstream ofs("/proc/sys/vm/drop_caches");
ofs << "3" << std::endl;

挑战是希望以非root用户身份运行应用程序时执行此操作。在重新启动时,权限如下所示:

# cd /proc/sys/vm/
# ls -lrt drop_caches 
-rw-r--r--    1 root     root             0 Feb 13 19:50 drop_caches

你似乎无法改变这些权限 - 即使是root:

# chmod 777 drop_caches 
chmod: drop_caches: Operation not permitted
# chown user:user drop_caches 
chown: drop_caches: Operation not permitted

如何在Linux上完成此操作?是否可以更改procfs文件的权限?如有必要,我可以完全自定义我的内核。谢谢 -

1 个答案:

答案 0 :(得分:3)

您可以创建一个辅助可执行文件(非常小心,它很危险),任何用户都可以使用root权限运行它。

这称为setuid

出于安全原因,您不能setuid一个shell脚本。

从wiki中提取如何使用它:

  

setuid和setgid位通常使用命令chmod by设置   将高阶八进制数设置为4(对于setuid)或2(对于   setgid的)。 “chmod 6711 file”将同时设置setuid和setgid位   (2 + 4 = 6)

更新

正如@rici所说,您仍然需要具有执行权限来执行此过程,因此您可以从others删除执行权限,并仅将其保留在group上。因此,只有谁是该组的成员才能执行它。