Phi*_*Bot 5 c++ linux permissions embedded-linux procfs
出于测试目的,我可以通过在procfs下写入Linux中的drop_caches文件来删除缓存内存.我只能以root身份执行此操作.这是在嵌入式Linux上,因此没有sudo.
sync; echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式在c ++中以编程方式写入文件 - > 如何在Linux系统上以编程方式清除C++中的文件系统内存缓存?
sync();
std::ofstream ofs("/proc/sys/vm/drop_caches");
ofs << "3" << std::endl;
Run Code Online (Sandbox Code Playgroud)
挑战是希望以非root用户身份运行应用程序时执行此操作.在重新启动时,权限如下所示:
# cd /proc/sys/vm/
# ls -lrt drop_caches
-rw-r--r-- 1 root root 0 Feb 13 19:50 drop_caches
Run Code Online (Sandbox Code Playgroud)
你似乎无法改变这些权限 - 即使是root:
# chmod 777 drop_caches
chmod: drop_caches: Operation not permitted
# chown user:user drop_caches
chown: drop_caches: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Linux上实现这一目标?是否可以更改procfs文件的权限?如有必要,我可以完全自定义我的内核.谢谢 -
您可以创建一个辅助可执行文件(要非常小心,这很危险),任何用户都可以使用 root 权限运行它。
这称为setuid。
出于安全原因,您不能使用setuidshell 脚本。
从 wiki 中提取如何使用它:
setuid 和 setgid 位通常使用命令 chmod 通过将高位八进制数字设置为 4(对于 setuid)或 2(对于 setgid)来设置。“chmod 6711 file”将设置 setuid 和 setgid 位 (2+4=6)
正如 @rici 所指出的,您仍然需要具有执行权限才能执行此过程,因此您可以从 中删除执行权限others并仅将其保留在 上group。因此,只有该组的成员才能执行它。
| 归档时间: |
|
| 查看次数: |
2023 次 |
| 最近记录: |