首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式以非root用户的身份删除Linux缓存

以编程方式以非root用户的身份删除Linux缓存
EN

Stack Overflow用户
提问于 2013-02-14 03:54:08
回答 1查看 2.3K关注 0票数 5

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

代码语言:javascript
复制
sync; echo 3 > /proc/sys/vm/drop_caches

通过在post --> How to programmatically clear the filesystem memory cache in C++ on a Linux system?中执行一些操作,我可以在c++中以编程方式向该文件写入数据

代码语言:javascript
复制
sync();
std::ofstream ofs("/proc/sys/vm/drop_caches");
ofs << "3" << std::endl;

挑战是希望在以非root用户身份运行应用程序的同时做到这一点。重新启动时,权限如下所示:

代码语言:javascript
复制
# cd /proc/sys/vm/
# ls -lrt drop_caches 
-rw-r--r--    1 root     root             0 Feb 13 19:50 drop_caches

而且您似乎无法更改这些权限-即使是以root用户的身份:

代码语言:javascript
复制
# chmod 777 drop_caches 
chmod: drop_caches: Operation not permitted
# chown user:user drop_caches 
chown: drop_caches: Operation not permitted

我如何在Linux上实现这一点?是否可以更改procfs文件的权限?如果需要的话,我可以完全定制我的内核。谢谢-

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-14 04:03:26

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

这称为setuid

出于安全原因,您不能setuid外壳脚本。

从wiki中提取如何使用它:

通过将高位八进制数字设置为4(对于

)或2(对于setgid),通常使用命令chmod来设置setuid和setgid位。“chmod6711file”将同时设置setuid和setgid位(2+4=6)

更新

正如@rici指出的那样,您仍然需要拥有执行权限才能执行此进程,因此您可以从others中删除执行权限,并将其仅保留在group上。因此,只有组中的成员才能执行它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14861880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档