目录
前言
一、SELinux 的作用及权限管理机制
1.SELinux 的作用
1.1DAC
1.2MAC
1.3DAC 和 MAC 的对比
2.SELinux 基本概念
2.1主体(Subject)
2.2对象(Object)
2.3政策和规则(Policy & Rule)
2.4安全上下文(Security Context)
2.4.1安全上下文的结构及含义
2.5SELinux 的工作模式
3.SELinux 基本操作
3.1查询文件或目录的安全上下文
3.2 查询进程的安全上下文
3.3手动修改文件或目录的安全上下文
3.4把文件或目录的安全上下文恢复到默认值
3.5查询系统中的布尔型规则及其状态
3.6开关一个布尔型规则
3.7添加目录的默认安全上下文
3.8添加某类进程允许访问的端口
4.SElinux权限管理
前言
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。
SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。
禁用Administrator与Guest用户
sudo usermod -L /sbin/nologin Administrator(root)
sudo usermod -L /sbin/nologin guest
passwd -l Administrator(root)
passwd -l guest
设置密码最小长度为8位,密码必须符包含大小写字符与数字的策略
vim /etc/pam.d/system-auth
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 enforce_for_root
参数说明
负数:代表最少出现次数,正数:代表最多出现次数
minlen = 8,密码长度至少8位;
lcredit=-1,至少包含一个小写字母;
ucredit=-1,至少包含一个大写字母;
dcredit=-1,至少包含要给数字;
ocredit=-1,至少包含一个特殊字符;
difok=5,新密码最多与旧密码重复5个字符;
enforce_for_root,对root强制执行密码复杂度策略。
输入三次无效用户锁定,锁定时间为10分钟
yum install pam pam_tally2
/etc/pam.d/system-auth文件并找到以下行:
auth required pam_env.so
在行的下方添加以下内容:
auth required pam_tally2.so deny=3 onerr=fail unlock_time=600 even_deny_root root_unlock_time=600
pam_tally2.so:指定使用pam_tally2模块。
deny=3:定义了密码错误达到3次后用户被拒绝登录。
onerr=fail:如果模块遇到错误,将导致认证失败。
unlock_time=300:定义用户被锁定的时间(以秒为单位)
###需要重启 对图形界面无效
一、SELinux 的作用及权限管理机制
1.SELinux 的作用
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
1.1DAC
在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。只要访问这个资源的进程符合以上的条件就可以被访问。而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。
1.2MAC
在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。
这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。
即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。
这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。
而 MAC 又细分为了两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式。
1.3DAC 和 MAC 的对比
在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。
2.SELinux 基本概念
2.1主体(Subject)
可以完全等同于进程。
2.2对象(Object)
被主体访问的资源。可以是文件、目录、端口、设备等。
2.3政策和规则(Policy & Rule)
系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。而哪些进程需要管制、要怎么管制是由政策决定的。一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。
规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。
在 CentOS 7 系统中,有三套政策,分别是:
- targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。
- minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。
- mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。
政策可以在 /etc/selinux/config 中设定。
2.4安全上下文(Security Context)
安全上下文是 SELinux 的核心。安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。一个「进程安全上下文」一般对应多个「文件安全上下文」。只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。
文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。
2.4.1安全上下文的结构及含义
安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。
2.5SELinux 的工作模式
- enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
- permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
- disabled:关闭 SELinux。
SELinux 工作模式可以在 /etc/selinux/config 中设定。
如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。
enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。
3.SELinux 基本操作
3.1查询文件或目录的安全上下文
ls -Z /etc/hosts
#查询 /etc/hosts 的安全上下文
-rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts
3.2 查询进程的安全上下文
ps auxZ | grep -v grep | grep nginx
查询 Nginx 相关进程的安全上下文
system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx
system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: worker process
3.3手动修改文件或目录的安全上下文
chcon [...]
选项 | 含义 |
---|---|
-u | 修改安全上下文的用户字段 |
修改安全上下文的用户字段 | 修改安全上下文的角色字段 |
-t | 修改安全上下文的类型字段 |
-l | 修改安全上下文的级别字段 |
--reference | 修改与指定文件或目录相一致的安全上下文 |
-R | -R |
-h | 修改软链接的安全上下文(不加此选项则修改软链接对应文件) |
chcon -u aaa_u -r bbb_r -t ccc_t test
#修改 test 的安全上下文为 aaa_u:bbb_r:ccc_t:s0
3.4把文件或目录的安全上下文恢复到默认值
restorecon [选项] [...]
restorecon -R /usr/share/nginx/html/
#添加一些网页文件到 Nginx 服务器的目录之后,为这些新文件设置正确的安全上下文
3.5查询系统中的布尔型规则及其状态
getsebool -a
由于该命令要么查询所有规则,要么只查询一个规则,所以一般都是先查询所有规则然后用 grep 筛选。
getsebool -a | grep httpd
#查询与 httpd 有关的布尔型规则
httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
3.6开关一个布尔型规则
setsebool [选项] -P重启依然生效
setsebool -P httpd_anon_write on
#开启 httpd_anon_write 规则
3.7添加目录的默认安全上下文
semanage fcontext -a -t "(/.*)?"
注:目录或文件的默认安全上下文可以通过 semanage fcontext -l 命令配合 grep过滤查看
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
#为 Nginx 新增一个网站目录 /usr/share/nginx/html2 之后,需要为其设置与原目录相同的默认安全上下文
3.8添加某类进程允许访问的端口
semanage port -a -t -p
注:各种服务类型所允许的端口号可以通过 semanage port -l 命令配合 grep 过滤查看
semanage port -a -t http_port_t -p tcp 10080
#为 Nginx 需要使用 10080 的端口用于 HTTP 服务
4.SElinux权限管理
SELinux的状态:
-
enforcing:强制,每个受限的进程都必然受限
-
permissive:允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志
-
disabled:禁用
相关命令:
-
getenforce: 获取selinux当前状态
-
sestatus :查看selinux状态
-
setenforce 0|1
-
0: 设置为permissive 宽容
-
1: 设置为enforcing 强制
[root@localhost html]#getenforce
Enforcing
如果没有开启可以使用以下命令开启
[root@localhost html]#setenforce 1
永久开启需要修改 此处文件 /etc/selinux/config
vim /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
[root@localhost ~]#yum provides seinfo
#查询seinfo来源于哪个安装包
[root@localhost ~]#yum install setools-console.x86_64 -y
如果修改文件系统类型
如果开启SElinux setenforce 为1的话就无法访问index.html;如果关闭SElinux setenforce为0的话就可以访问index.html
[root@localhost html]#seinfo -t
#可以看到所有的安全上下文类型
[root@localhost html]# chcon -t var_t /var/www/html/index2.html
#把 index2文件类型修改 为 var_t
[root@localhost html]#ls -Z
-rw-r--r--. root root unconfined_u:object_r:var_t:s0 index2.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_rw_content_t:s0 index.html
需要打开软件端口绑定,如果端口不让绑定,一定是防护有问题;输入该命令后就可以重启httpd服务了
SElinux配置文件