nit*_*gen 5 c linux security privileges sandbox
是否可以使用一组 C 库或系统调用来删除 POSIX 或至少在 Linux 上的所有用户权限?请注意,我不是在问如何删除root特权,这就是所有其他 StackOverflow 搜索结果似乎都在询问和回答的问题。
I want the same effect as switching to user nobody, but stronger if possible. That is, I want my C application to do the following:
root, and without the setuid file permission bit$HOMEacceptThings I have considered so far that don't fit the bill:
nobody with setuid/setgid
nobody), and the application should not require root just to switch to nobody.root-like privileges, not take away ordinary user privilegesexit, sigreturn, read, and writeThings that look interesting, but for which I couldn't find documentation, appear to be unmaintained, or appear to be non-portable:
So is there a well-documented, preferably portable way to drop nonessential user privileges and sandbox a process without having to become root first?
任何解决方案都不可能适用于所有 POSIX,因为 POSIX 没有定义您正在寻找的机制。
仅考虑要求和 Linux,满足这些要求的最简单方法可能是通过安全模块。apparmor、selinux、RBAC 中的任何一个都可以满足您的需求,但只能通过外部配置文件 - 而不是应用程序中内置的内容。问题可能是在所有这些情况下添加配置文件都需要 root 用户来执行此操作(但配置文件也适用于用户进程)。
稍微复杂一点、几乎可以满足要求的解决方案是seccomp。虽然它根本不理解路径(您只能看到指针),但有一些方法可以限制访问:可以为每个线程定义 seccomp 策略,因此您可以重新设计系统以具有“路径验证线程”,这不会除了读取路径和返回套接字(如果它们符合您的规范)之外,不执行任何操作。然后将该线程限制为仅recv(),open()和send()。执行其他工作的线程可以删除open()并使用其他服务。
或者,如果您可以在程序启动时配置路径,则可以将它们放入一个数组中,将该页面标记为只读,并设置 seccomp 策略,该策略仅接受open()该数组中的文件名(在这种情况下这只是一个指针比较) 。
在某种程度上,将应用程序拆分为职责非常有限的单独进程的方法可以在其他系统上复制,但没有与 Linux 上相同的保证。例如,qmail 是一种由非常小的进程组成的系统,充当数据管道(简化)。在 Linux 上,您仍然可以对它们应用 seccomp,在 Solaris 上,只需删除exec和其他功能,在其他系统上……我不知道,但也许您可以做一些事情。
| 归档时间: |
|
| 查看次数: |
762 次 |
| 最近记录: |