【发布时间】:2015-10-01 02:49:03
【问题描述】:
是否可以使用一组 C 库或系统调用来放弃 POSIX 或至少在 Linux 上的所有用户权限?请注意,我不是在问如何删除 root 权限,这是所有其他 StackOverflow 搜索结果似乎都在询问和回答的问题。
我想要与切换到用户nobody 相同的效果,但如果可能的话,效果会更强。也就是说,我希望我的 C 应用程序执行以下操作:
- 以普通用户身份运行,不是
root,并且没有 setuid 文件权限位 - 保留访问特定文件和打开传出网络连接的能力
- 自愿永久失去在指定(或所有)目录中读写文件的能力,尤其是
$HOME - 如果可能,放弃或沙箱化所有其他不必要的能力,例如使用
accept打开一个监听套接字
到目前为止我考虑过的不符合要求的事情:
- 用
setuid/setgid切换到用户nobody- 禁止普通用户切换到其他用户(如
nobody),应用程序不应要求root只是切换到nobody。
- 禁止普通用户切换到其他用户(如
-
Linux/POSIX.1e Capabilities
- 功能只增加
root-like权限,不带走普通用户权限
- 功能只增加
- 传统seccomp
- 我的应用程序需要的不仅仅是
exit、sigreturn、read和write
- 我的应用程序需要的不仅仅是
看起来很有趣但我找不到文档、似乎未维护或似乎不可移植的东西:
那么,有没有一种记录良好、最好是可移植的方式来放弃不必要的用户权限并将进程沙箱化,而不必先成为root?
【问题讨论】:
-
你考虑过类似 cgroups/namespaces 的东西吗?
-
请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅“如何提问”页面以获得澄清此问题的帮助。
-
@self 强烈反对。这是一个经过充分研究的问题,具有很好的描述和一系列接近但并不真正适合解决方案的事物。这实际上是我长期以来在 SO 上看到的最好的书面问题之一。
-
问题是这个问题很容易被讨论。
-
对于遇到这个问题的未来开发人员,OpenBSD 最近提出了一个
tamesystem call 的建议,这正是我所寻找的。希望它被合并,最终出现一个跨平台的 API。
标签: c linux security sandbox privileges