如何启动一个程序并明确指定它的功能?

如何启动一个程序并明确指定它的功能?
  • 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 示例所示)似乎对于在不改变文件系统权限的情况下测试单个能力很有用。

相关内容