一、什么是SELinux
安全增强型火墙SELinux(Security-Enhanced Linux)是Linux的一个内核模块,也是Linux的一个安全子系统
二、SELinux的作用
SELinux的主要作用就是最大限度地减小系统中服务进程可以访问的资源:
在没有使用SELinux的操作系统中,决定一个资源是否能被访问的因素是这个资源是否拥有对应用户的读、写、执行的权限;而在使用了SELinux的操作系统中,决定一个资源是否能被访问的因素除了上述之外,还需要判断每一类进程是否拥有对某一类资源的访问权限
这样一来,即时进程是以超级用户root身份进行的,系统也会判断这个进程的类型以及被访问资源的类型才能决定是否能被访问某个资源,进程的活动空间也可以被压缩到最小
SELinux对文件的影响:
当selinux开启时,内核会对每个文件及每个开启的程序加载标签,此标签记录的是程序和文件的安全上下文(context)
SELinux对程序的影响:
当selinux开启时,内核会对程序的功能加载开关(sebool),并设定此开关的状态为关闭;当使用此功能时需要手动开启功能开关
SELinux状态对文件和程序的影响效果
当selinux未开启时
当selinux开启时
selinux开启时,内核对Vsftpd服务程序的功能加载了开关,如上图匿名用户的写入功能开关为关闭状态,所以导致即使Vsftpd的配置文件中允许了匿名用户上传,但因为匿名用户写入的功能未开启,导致匿名用户无法上传文件
三、SELinux的状态及管理
selinux有三种状态(工作模式):
enforcing ##强制模式===违反SELinux规则的行为将被阻止并记录到日志中
permissive ##警告模式===违反SELinux规则的行为会被允许且会收到警告,也会记录到日志中
disabled ##SELinux关闭
日志位置:/var/log/audit/audit.log
日志服务:auditd.service
操作者可以在selinux的配置文件 /etc/selinux/config 中更改其状态
在此文件中更改selinux状态时需重启系统才能生效
selinux状态查看命令:getenforce
selinux开启后强制模式和警告模式的切换:
setenforce 0 ==== permissive
setenforce 1 ==== enforcing
四、SELinux的安全上下文
1、安全上下文的查看
ls -Z ##查看文件的安全上下文
ls -Zd ##查看目录的安全上下文
ps auxZ ##查看进程的安全上下文
2、安全上下文的修改
临时修改
chcon -t 标签 文件/目录 ##更改文件或目录的安全上下文
chcon -Rt 标签 目录 ##更改目录及目录中内容的安全上下文
此方式修改的安全上下文在系统(selinux)重启后后自动还原;这是因为更改的文件的安全上下文在内核安全上下文列表中无记载
永久更改
如果需要永久修改文件或目录的安全上下文,需要将修改的文件的安全上下文同步到内核安全上下文列表中
semanage fcontext -l ##查看内核安全上下文列表
semanage fcontext -a -t public_content_t '/linux(/.*)?' ##添加内核级安全上下文列表'(/.*)?' 为固定搭配可目录使此及目录下的文件的安全上下文保持一致
restorecon -RvvF /linux ##恢复SELinux文件属性即恢复文件的安全上下文(-R=递归;-F=指定文件;-v=显示过程)
五、Sebool
SELinux开启时内核会对程序的功能加载开关,此开关就叫做sebool值
getsebool -a ##查看程序功能的开关状态
setsebool -P ‘功能’ on/off ##更改程序功能的开关状态
六、Seport
selinux开启时,内核会限制程序、服务使用的端口
semanage port -l ##查看程序使用的端口
可以通过以下方式修改端口:
服务文件修改端口
将httpd服务的端口在其配置文件中修改为12,重启服务失败;这是因为selinux限制了httpd服务使用的端口范围,在将selinux更改为警告模式后,httpd服务可以重启成功
内核安全上下文列表添加端口
semanage port -a -t http_port_t -p tcp 12 ##在内核安全上下文列表中添加服务端口
semanage port -d -t http_port_t -p tcp 12 ##在内核安全上下文列表中删除服务端口
如上图,在内核安全上下文中添加http服务使用的端口号之后,在selinux=enforcing状态下也可以成功重启服务
七、setroubleshoot
setoubleshoot是SELinux的排错软件工具;其可以采集selinux的日志/var/log/audit/audit.log 中的警告信息并分析得到解决方案存放至 /var/log/messages 中