我创建了一个角色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_t
在default_type
文件和default_contexts
forsystem_r:local_login_t
和system_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