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 时,不能获得更多信息