24.3. 使用 selinux RHEL 系统角色部署 SELinux 模块
如果默认的 SELinux 策略不满足您的要求,您可以创建自定义模块来允许您的应用程序访问所需的资源。通过使用 selinux
RHEL 系统角色,您可以自动化此过程,并远程部署 SELinux 模块。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo
权限。 - 您要部署的 SELinux 模块存储在与 playbook 同样的目录中。
SELinux 模块以通用中间语言(CIL)或策略软件包(PP)格式提供。
如果使用 PP 模块,请确保受管节点上的
policydb
版本与用来构建 PP 模块的版本相同或更新。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
path: <module_file>
- 设置控制节点上模块文件的路径。
priority: <value>
-
设置 SELinux 模块优先级。
400
是默认值。 state: <value>
定义模块的状态:
-
enabled
:安装或启用模块。 -
disabled
:禁用模块。 -
absent
:删除模块。
-
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.selinux/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
远程显示您在 playbook 中使用的 SELinux 模块和过滤器的列表:
ansible managed-node-01.example.com -m shell -a 'semodule -l | grep <module>'
# ansible managed-node-01.example.com -m shell -a 'semodule -l | grep <module>'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果列出了模块,则其已安装且启用了。