su user_name program
以其他 uid 启动一些程序;chroot path program
与其他程序一起启动某个程序/
;( ulimit -v 80000; program)
限制程序内存...
如何限制程序功能(7)?
我只看到设置上限(8)设置文件功能的工具;如何做这样的事情:
root# start_program_with_capabilities_dropped_except_of CAP_NET_RAW,CAP_NET_ADMIN program
如何在不使用文件功能的情况下使用我的功能集启动程序?
例如我是root并且想要启动ping
:
- 作为非 root
- 使用 PR_SET_NO_NEW_PRIVS 标志(因此所有 setuid 位和文件功能都会消失)
- 仅 CAP_NET_RAW 处于活动状态,其他所有操作均被拒绝
- 意识到
ping
它处于非特权模式(ping: cannot flood; minimal interval, allowed for user, is 200ms
)
答案1
系统权限和 MAC(强制访问控制)子层就是为了这些目的而存在的。要限制链接定义的功能,请使用具有您所需权限的用户帐户。结合 SU 和文件权限,确保您的应用程序仅为该用户运行。
对于 MAC,常见示例包括 Selinux (NSA/Redhat) 和 AppArmor(Novell)。它们限制应用程序可以访问的资源。请记住,在 Linux 中,一切都是文件,因此通过锁定所需的文件,您可以限制应用程序的功能。MAC 系统使用白名单允许应用程序仅访问指定的资源,因此默认情况下所有访问都被拒绝。例如,我使用 Firefox 的应用程序保护,将其限制在我的 $HOME 中的应用程序/缓存区域以及我的下载文件夹等内容。
答案2
Linux 的主要方式似乎是使用setpriv
:
USER=someuser HOME=/home/someuser setpriv --no-new-privs --reuid someuser --regid someuser --init-groups --inh-caps +NET_BIND_SERVICE --ambient-caps +NET_BIND_SERVICE bash -l
另一个工具卡什似乎是为此设计的。
此外,我已经在我的潜水程序。
我仍然不知道如何明确指定上限尽管文件系统功能环境
能力(如上面的 setpriv 示例所示)似乎对于在不改变文件系统权限的情况下测试单个能力很有用。