如何为 SELinux 自定义角色添加功能?

如何为 SELinux 自定义角色添加功能?

我创建了一个角色foo_r,我希望具有此角色的用户可以使用此CAP_NET_BIND_SERVICE功能打开保留端口(<1024)。为此,我添加了一个安全上下文:

policy_module(foo, 1.0)

role foo_r;

userdom_unpriv_user_template(foo)
allow foo_t self:capability net_bind_service;

foo_r:foo_tdefault_type文件和default_contextsforsystem_r:local_login_tsystem_r:xdm_t行中添加了以下内容这里解释

我的用户可以使用此角色进行连接,但是当我想使用 python 脚本打开保留端口时,出现“权限被拒绝”的情况。

我该如何修复它?

答案1

如何用 SELinux 管理 Linux 功能?Red Hat 的一位前工程师告诉我:

如果这是非 root 用户,那么问题在于您没有 Linux 功能NET_BIND_SERVICE。SELinux 不会改变传统的 Linux 功能,它只是增加了进一步的限制。因此,如果您foo_t以 root 身份运行,您将能够绑定到此端口。如果您随后删除允许规则,foo_t则 root 将不被允许。

一位 SELinux 维护人员告诉我:

添加功能还不够,您还需要类似以下 corenet_tcp_bind_all_reserved_ports(foo_t)权限:还有绑定和接受套接字以及发送流量的权限。SELinux 将在此过程中检查所有这些权限

因此,为了解决我的问题:首先我需要以 root 用户身份运行,并且第二我必须修改我的文件:

policy_module(foo, 1.0)

role foo_r;

userdom_unpriv_user_template(foo)
corenet_tcp_bind_all_reserved_ports(foo_t); # Line modified

相关内容