基本SELINUX安全性概念
(1)SELinux概念
SELINUX(安全增强型Linux)是可保护系统安全性的额外机制。在某种程度上,它可以被看作是与标准权限系统并行的权限系统。
在常规模式中,以用户身份运行进程,并且系统上的文件和其他资源都设置了权限(控制哪些用户对哪些文件具有哪些访问权 SELINUX的另一个不同之处在于,若要访问文件,你必须具有普通访问权限和SELINUX访问权限。因此,即使以超级用户身份root运行进程,根据进程以及文件或资源的SELINUX安全性上下文可能拒绝访问文件或资源限)标签。
作用:
(1)针对文件,会对系统中每个文件添加安全上下文(context)
(2)针对进程,会对系统中的每个进程添加全上下文(context)
(3)会在系统服务上设定sebool开关
(4)当进程安全上下文和文件的安全上下文不匹配时,那么进程无法访问此文件
(5)sebool会限制服务的不安全功能,如果需要用此功能,必须调整sebool值
示例:
在无selinux保护时,恶意人员可以尝试利用web服务器中的安全漏洞强行进入系统。如果成功,将会控制以用户apache身份运行的进程,这时再由一个本地安全漏洞就可能使攻击者获得超级用户的访问权限。
(2)SELINUX安全上下文访问规则:
WEB服务器的HTTPD进程设置了SELINUX上下文system_u:system_r:httpd_t标签。该上下文的重要部分是第三个用冒号分隔的字段SELINUX类型:httpd_t
系统上的文件和资源也设置了SELINUX上下文标签,并且重要的部分是SELINUX类型。例如,/var/www/html中的文件具有类型httpd_sys_content_t。/tmp和/var/tmp中的文件通常具有类型tmp_t
SELINUX策略具有允许以httpd_t身份运行的进程访问标记为httpd_sys_content_t的文件的规则。没有规则允许这些进程访问标记有tmp_t的文件,因此将拒绝这些访问,即使常规权限指出应该允许这些访问。
(3)SELInux服务有三种配置模式:
- enforcing:强制启用安全策略模式,将拦截服务的不合法请求
- premissive:遇到服务越权访问时,只发出警告而不强制拦截
- disabled:对于越权的行为不拦截也不警告
从许可/强制模式切换为关闭状态,或反之,必须修改配置文件/etc/sysconfig/selinux 然后重启
许可模式和强制模式可以用setenforce 进行切换不用关机
SELinux域对服务程序的功能进行限制(确保服务程序做不了出格的事)
SELinux安全上下文对文件资源限制(确保文件资源只能被其所属的服务程序进行访问)
selinux会给与系统中的每个文件一个安全上下文(CONTEXT),同时给予每个程序一个CONTEXT,若此程序的安全上下文与文件的安全上下文不匹配,则文件不能被系统访问,若匹配,则可以访问,而文件的安全上下文,与此文件所在的目录有关。
显示文件和服务的安全上下文
以ftp服务为例:
pa auxZ | grep ftp 显示ftp的安全上下文
ls -Z /var/ftp/ 显示ftp默认发布目录的安全上下文,ftpd_t只能访问标签为public_content_t的文件
SELinux安全上下文访问规则
(1)关闭模式
(2)许可模式
该模式下不会拦截文件访问与权限,但在日志中会有警告信息
(3)强制模式
a.对文件的影响
b.对服务的影响
修改文件的selinux安全上下文
1.临时修改上下文
1.1 目录的安全上下文已与服务匹配
chcon -t public_content_t file|dir 更改文件或目录的安全上下文为public_content_t
chcon -t public_content_t file|dir -R 若是目录,-R表示递归更改,包括目录本身 /var/ftp的默认上下文为public_content_t,当修改完下属的子文件的上下文与该目录上下文一致,则为永久修改
1.2当目录的安全上下文与服务不匹配时
2.永久更改文件的安全上下文
semanage是永久在内核中修改目录的上下文 必须需要刷新
semanage fcontext -l | grep /var/ftp 查看/var/ftp的永久上下文设定
semanage fcontext -l | grep /ftppdir
semanage fcontext -a -t public_context_t '/ftpdir(/.*)?' 添加永久上下文,-a:add, -t:类型, (/.*)?表示ftpdir目录下的所有内容
restorecon -RvvF /ftpdir/ 必须刷新才会生效,把该目录下的文件永久刷新成与该目录一致的上下文
管理服务的bool值
如何在enforce 的情况下开启某种服务?
当为强制模式时,服务的某些功能被关闭。必须当普通服务和SELINUX的权限同时都打开时,该服务才可用。
我们以开启ftp中匿名用户上传的功能为例说明:
vim /etc/vsftpd/vsftpd.conf 在主配置文件中开启匿名用户上传的功能
chgrp ftp /var/ftp/pub
chmod 775 /var/ftp/pub
chcon -t public_content_rw_t /var/ftp/pub 将该目录的权限改为可读可写
getsebool -a | grep ftp 显示ftp功能的布尔值
setsebool -P ftpd_anon_write 1 修改匿名用户写的功能的布尔值为1
SELiunx的日志分析
/var/log/audit/audit.log 该文件存放seliunx的日志信息,存在selinux的报错,但不会有解决方案
/var/log/messages 存在selinux的日志以及解决方案
setroubleshoot 采集/var/log/audit/audit.log中的日志并进行分析提出解决方案,存入/var/log/messages中,若是不安装 此 软件,/var/log/messages就没有selinux的解决方案与日志存在
(1)有问题解决软件时
(2)删除问题解决软件后