centos 不可不知的 SElinux 安全增强型策略

发布于 更新于

技术文章

SELinux 其实是 Security-Enhanced Linux 安全增强型 Linux 的英文缩写,是由美国国家安全局开发的一个内核模块,它主要流行在红帽 Red Hat Linux 及其衍生版本中,如 CentOS。而 Ubunt...

SELinux 其实是 Security-Enhanced Linux 安全增强型 Linux 的英文缩写,是由美国国家安全局开发的一个内核模块,它主要流行在红帽 Red Hat Linux 及其衍生版本中,如 CentOS。而 Ubuntu、SUSE 及其衍生版本使用的是 AppArmor。

传统的 Linux 是自主访问控制 Discretionary Access Control(DAC),在这种形式下,一个进程以 UserID(UID)或 SetOwnerUserID(SUID)身份运行,并且拥有该用户的问、套接字等权限,这样,恶意代码就能很容易的运行在特定权限模式下。

MAC(Mandatory Access Control)强制访问控制,是基于保密性和完整性强制隔离以限制破坏。决定一个资源能否被访问,除用户身份外,还会判断每一个进程是否拥有对某一类资源的访问权限。这样,即便进程使用 root 身份运行的,也需要判断这个进程的类型及允许访问的资源类型,才能决定是否允许访问某个资源,进程的活动空间被压缩到最小。SELinux 使用的就是 MAC.

直白的理解就是,SELinux 是最大限度的减小系统中服务进程可访问的资源,所以,在默认开启时,安全级别非常高,很多常规操作受限制。

在 SELinux 中,当一个主体(Subject),如一个程序,要访问某一个目标(Object),如一个文件,服务器内核策略数据库(PolicyDatabase),就会去获取系统当前的运行模式(Mode),根据模式选择是否授予权限访问该目标。如果拒绝,则会在 /var/log/messages 中记录一条拒绝信息。

  • SELinux 运行模式(Mode),有三种:

    • Enforcing,强制执行 SELinux 策略

    • Permissive,不强制执行 SELinux 策略,不会拒绝访问,但是会记录拒绝信息到日志

    • Disabled,禁用 SELinux 策略

# 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 three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

默认情况下,现在的 CentOS 系统,SELinux 为 Enforcing 强制执行策略。可以通过 getenforce 命令,查看当前的模式。

  • 修改策略(不建议修改为 Disable)

    • 修改 /etc/selinux/config 文件,修改文件中 SELINUX 的值

    • 超管执行命令 setenforce 0 设置为 Permissive(不强制执行安全策略); 超管执行命令 setenforce 1 设置为 Enforcing

    • 方法一:

    • 方法二:

  • 策略类型 SELINUXTYPE

    • targeted 有目标的,对大部分网络服务相关进程(dhcpd、httpd、named、nscd、ntpd、portmap、snmpd、squid、syslogd)进行管制

    • minimum 最低限度的,仅选定的进程受保护

    • mls 多级安全保护,是最严格的政策

当系统 SELinux 策略为 enforcing 或 permissive 时,可以通过 sestatus -v 查看策略信息。 disabled 时,不能获得更多信息





继续阅读