4.4. SELinux 状态和模式中的永久性更改
如 第 1.4 节 “SELinux 状态和模式” 所述,SELinux 可以启用或禁用。启用后,SELinux 有两个模式: enforcing 和 permissive。
使用 getenforce 或 sestatus 命令检查 SELinux 的运行模式。getenforce 命令返回
Enforcing
、Permissive
或 Disabled
。
sestatus 命令返回 SELinux 状态以及正在使用的 SELinux 策略:
~]$
sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 30
注意
当系统以 permissive 模式运行 SELinux 时,用户可以错误地标记文件。在禁用 SELinux 时创建的文件根本不标记。这个行为会在更改为 enforcing 模式时导致问题,因为文件被错误地标记或者根本不标记文件。为了防止不正确标记和未标记的文件造成问题,当从 disabled 状态改为 permissive 或 enforcing 模式时会自动重新标记文件系统。
4.4.1. 启用 SELinux
启用后,SELinux 可使用两种模式之一运行: enforcing 或 permissive。以下小节介绍了如何永久更改这些模式。
在之前禁用的系统中启用 SELinux 时,为了避免问题(如系统无法引导或进程失败),红帽建议按照以下步骤执行:
- 以 permissive 模式启用 SELinux。如需更多信息,请参阅 第 4.4.1.1 节 “Permissive 模式”。
- 重启您的系统。
- 检查 SELinux 拒绝信息。如需更多信息,请参阅 第 11.3.5 节 “搜索和查看地址”。
- 如果没有拒绝的操作,切换到 enforcing 模式。如需更多信息,请参阅 第 4.4.1.2 节 “强制模式”。
要在 enforcing 模式下使用 SELinux 运行自定义应用程序,请选择以下之一:
- 在
unconfined_service_t
域中运行您的应用程序。如需更多信息,请参阅 第 3.2 节 “未限制的进程”。 - 为应用程序编写新策略。如需更多信息,请参阅编写自定义 SELinux 策略知识库文章。
4.4.1.1. Permissive 模式
当 SELinux 是以 permissive 模式运行时,不会强制 SELinux 策略。系统可保持正常操作,SELinux 不会拒绝任何操作,而只是记录 AVC 信息,它们可用于故障排除、调试和 SELinux 策略改进。每个 AVC 在这个示例中仅记录一次。
要将模式永久改为 permissive,请按照以下步骤操作:
过程 4.2. 进入许可模式
- 编辑
/etc/selinux/config
文件,如下所示:# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
- 重启系统:
~]# reboot
4.4.1.2. 强制模式
当 SELinux 处于 enforcing 模式时,它会强制 SELinux 策略并根据 SELinux 策略规则拒绝访问。在 Red Hat Enterprise Linux 中,当系统最初使用 SELinux 安装时,默认启用 enforcing 模式。
如果禁用了 SELinux,请按照以下步骤将模式再次改为 enforcing:
过程 4.3. 进入强制模式
这个过程假设安装了 selinux-policy-targeted、selinux-policy、libselinux、libselinux-python、libselinux-utils、policycoreutils 和 policycoreutils-python 软件包。要验证软件包是否已安装,请使用以下命令:
rpm -q package_name
- 编辑
/etc/selinux/config
文件,如下所示:# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
- 重启系统:
~]# reboot
在下一次引导中,SELinux 会重新标记系统中的所有文件和目录,并为禁用 SELinux 时创建的文件和目录添加 SELinux 上下文。
注意
切换到 enforcing 模式后,SELinux 可能会因为不正确或缺少 SELinux 策略规则而拒绝某些操作。要查看 SELinux 拒绝的操作,以 root 用户身份输入以下命令:
~]# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
另外,安装 setroubleshoot-server 软件包后,以 root 用户身份输入以下命令:
~]# grep "SELinux is preventing" /var/log/messages
如果 SELinux 拒绝某些操作,请参阅 第 11 章 故障排除 以获得有关故障排除的信息。
第 1.4 节 “SELinux 状态和模式” 涵盖了对模式的临时更改。
4.4.2. 禁用 SELinux
禁用 SELinux 时,SELinux 策略不被加载 ; 它不会被强制执行,也不会记录 AVC 信息。因此,运行 第 1.1 节 “运行 SELinux 的好处” 中列出的 SELinux 的所有益处都丢失。
重要
红帽强烈建议您使用 permissive 模式,而不是永久禁用 SELinux。有关 permissive 模式的更多信息,请参阅 第 4.4.1.1 节 “Permissive 模式”。
要永久禁用 SELinux,请按照以下步骤执行:
过程 4.4. 禁用 SELinux
- 在
/etc/selinux/config
文件中配置SELINUX=disabled
:# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
- 重启您的系统。重新引导后,确认 getenforce 命令返回
Disabled
:~]$
getenforce Disabled