24.2. 使用 selinux RHEL 系统角色管理 SELinux 网络端口标签
如果要在非标准端口上运行服务,您必须在此端口上设置相应的 SELinux 类型标签。这可防止在服务希望侦听非标准端口时,SELinux 拒绝对服务的访问权限。通过使用 selinux
RHEL 系统角色,您可以自动化此任务,并在端口上远程分配一个类型标签。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: Managing SELinux hosts: managed-node-01.example.com tasks: - name: Set http_port_t label on network port ansible.builtin.include_role: name: redhat.rhel_system_roles.selinux vars: selinux_ports: - ports: <port_number> proto: tcp setype: http_port_t state: present
示例 playbook 中指定的设置包括如下:
ports: <port_number>
- 定义您要为其分配 SELinux 标签的端口号。使用逗号分隔多个值。
setype: <type_label>
- 定义 SELinux 类型标签。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.selinux/README.md
文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
显示分配了
http_port_t
标签的端口号:# ansible managed-node-01.example.com -m shell -a 'semanage port --list | grep http_port_t' http_port_t tcp 80, 81, 443, <port_number>, 488, 8008, 8009, 8443, 9000
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.selinux/README.md
文件 -
/usr/share/doc/rhel-system-roles/selinux/
目录