linux-system-roles.selinux
SELinux
预期功能
基本上提供管理本地自定义的机制:
- 设置强制/enforcing或宽容/permissive
- 恢复文件系统树中的部分
- 设置/获取布尔值
- 设置/获取文件上下文
- 管理登录
- 管理端口
注意: 如果您想在 disabled
模式下管理 SELinux 自定义,您需要安装 SELinux targeted
策略。
要求
请见下方
集合要求
该角色需要外部集合。使用以下命令安装它们:
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
本库提供的模块
selinux_modules_facts
收集 SELinux 模块的状态
角色变量
清除本地修改
默认情况下,在现有修改上应用 selinux_booleans
、selinux_fcontexts
、selinux_ports
和 selinux_logins
中指定的修改。要在设置新的修改之前清除本地修改,请将以下变量设置为 true
:
selinux_booleans_purge
- SELinux 布尔值selinux_fcontexts_purge
- SELinux 文件上下文selinux_ports_purge
- SELinux 端口selinux_logins_purge
- SELinux 用户映射
您可以使用 selinux_all_purge: true
清除所有修改:
selinux_all_purge: true
selinux_policy, selinux_state
管理 SELinux 策略类型和模式。
selinux_policy: targeted
selinux_state: enforcing
selinux_state
的允许值为 disabled
、enforcing
和 permissive
。
如果未设置 selinux_state
,则不会更改 SELinux 状态。
如果未设置 selinux_policy
且 SELinux 需要启用,则默认为 targeted
。如果 SELinux 已启用,则不会更改策略。
这使用 selinux 模块管理 SELinux 模式和策略。
selinux_booleans
管理 SELinux 布尔值的状态。这是一个 list
的 dict
,其中每个 dict
的格式与
seboolean
模块使用的格式相同。
selinux_booleans:
- name: samba_enable_home_dirs
state: true
- name: ssh_sysadm_login
state: true
persistent: true
selinux_fcontexts
管理 SELinux 文件上下文映射定义的状态。这是一个 list
的 dict
,其中每个 dict
的格式与
sefcontext
模块使用的格式相同。
selinux_fcontexts:
- target: '/tmp/test_dir(/.*)?'
setype: 'user_home_dir_t'
ftype: d
state: present
用户还可以传递以下可选参数:
seuser
:设置 SELinux 用户selevel
:设置 MLS/MCS 安全范围(仅限 MLS/MCS 系统)。SELinux 登录映射的 SELinux 范围默认为 SELinux 用户记录范围。
通过将 state
设置为 absent
,可以删除单个修改。
selinux_ports
管理 SELinux 端口策略的状态。这是一个 list
的 dict
,其中每个 dict
的格式与
seport
模块使用的格式相同。
selinux_ports:
- ports: 22100
proto: tcp
setype: ssh_port_t
state: present
local: true
selinux_restore_dirs
这是一个字符串的 list
,每个字符串都是您希望运行 restorecon
的文件系统树:
selinux_restore_dirs:
- /tmp/test_dir
selinux_logins
管理 Linux 用户到 SELinux 用户的映射。这是一个 list
的 dict
,其中每个 dict
的格式与
selogin
模块使用的格式相同。
selinux_logins:
- login: plautrba
seuser: staff_u
state: absent
- login: default
seuser: staff_u
serange: s0-s0:c0.c1023
state: present
selinux_modules
可以使用 selinux_modules
变量管理 SELinux 模块,该变量将包含一个 list
的 dict
,例如:
selinux_modules:
- path: localmodule.pp
state: enabled
- path: localmodule.cil
priority: 350
state: enabled
- name: unconfineduser
state: disabled
- name: localmodule
priority: 350
state: absent
path
:要安装到节点上的本地模块文件(.cil 或 .pp),用于安装新模块name
:模块名称,用于启用禁用的模块、禁用已启用的模块和移除模块priority
:SELinux 模块优先级,默认为 "400"。"100" 用于从 selinux-policy 包安装的模块,*"200"* 用于其他从第三方 rpm 安装的模块,*"300"* 用于 SETroubleshootstate
:以下值之一enabled
:安装或启用模块disabled
:禁用模块absent
:移除模块
注意: 在节点上从源代码构建模块不受支持。 但是在许多情况下,如果所有系统支持模块中使用的类型、类和权限,则可以在不同系统上使用二进制 pp 或 cil 模块。在 pp 模块的情况下,它还需要在目标系统上使用最低支持的 policydb 模块版本进行构建,即在最旧的系统上。
注意: 在 Red Hat Enterprise Linux 6 中忽略模块优先级。
注意: 仅在 Fedora 和 EL 8.6 及更高版本上管理模块是幂等的。 您可以在较旧的版本上管理模块,但它将不具备幂等性。
selinux_transactional_update_reboot_ok
此变量用于处理事务更新所需的重启。如果事务更新需要重启,则如果 selinux_transactional_update_reboot_ok
设置为 true,角色将继续重启。如果设置为 false,角色将通知用户需要重启,以便进行自定义处理。如果未设置此变量,角色将失败,以确保不会忽视重启要求。
selinux_transactional_update_reboot_ok: true
Ansible 事实
selinux_reboot_required
当将 SELinux 从 disabled
切换到 enabled
或反之时,如果需要系统重启,则将此自定义事实设置为 true
。否则,事实设置为 false
。如果需要系统重启,角色将通过返回失败进行指示,这需要使用 block:
...rescue:
结构进行处理。重启需要在 playbook 中执行,角色本身不会重启被管理的主机。重启后需要重新应用角色以完成更改。
selinux_installed_modules
此自定义事实表示 SELinux 模块存储结构
"selinux_installed_modules": {
<module name>: {
<module priority>: ("enabled"|"disabled"),
...
},
...
}
例如:
"ansible_facts": {
"selinux_installed_modules": {
"abrt": {
"100": "enabled",
"400": "disabled"
},
"accountsd": {
"100": "enabled"
},
"acct": {
"100": "enabled"
}
}
}
注意: 当不支持优先级时,模块优先级设置为 "0",例如在 Red Hat Enterprise Linux 6 中。
示例
一般使用示例在 selinux-playbook.yml playbook 中演示。
rpm-ostree
请见 README-ostree.md