Linux之强大的selinux
简单点说,SELinux就是用来加强系统安全性的。它给一些特定程序(这些程序也在不断增加)做了一个沙箱,它将文件打上了一个安全标签,这些标签属于不同的类,也只能执行特定的操作,也就是规定了某个应用程序设定了你可以访问那些文件或目录。
这里比较重要的知识点有:
- selinux的工作原理
- 工作模式和工作类型(selinux启用,布尔规则)
- 安全上下文(上下文修改,安全标签,端口标签)
- 日志管理
查看SELinux当前状态:
一、工作原理
二、工作模式(运行状态)
Enforcing、Permissive、Disabled
1、获取当前SELinux运行状态
getenforce
可能返回结果有三种:Enforcing、Permissive 和 Disabled。
Disabled 代表 SELinux 被禁用,Permissive 代表仅记录安全警告但不阻止可疑行为,Enforcing 代表记录警告且阻止可疑行为。
2、改变 SELinux 运行状态
setenforce [ 1 | 0 ]
切换disabled状态或者从disabled状态切换至别的状态都需要重启且只能修改配置文件。而enforceing(1)和Permissive(0)两种状态间切换不需要重启,重启时会为整个文件系统重新创建安全标签(touch /.autorelabel && reboot)。
/boot/grub/grub.conf下修改状态优先级比/etc/selinux/config高
若是想要永久变更系统 SELinux 运行环境,可以通过更改配置文件 /etc/sysconfig/selinux或/etc/selinux/config实现。
工作类型(或策略):
默认targeted类型,用来保护常见的网络服务,仅有限进程收到selinux控制,只监控容易被入侵的进程,centos5保护88个服务。
布尔规则:
SELinux根据不同的工作类型对这些规则打开或关闭(on|off<布尔值1|0>),然后通过规则的开启与关闭具体地限制不同进程对文件的读取。
getsebool -a 或者 sestatus -b # 查看当前工作类型下各个规则的开启与否
setsebool -P 规则名称 [0|1] # 修改当前工作类型下指定规则的开启关闭,-P表示同时修改文件使永久生效
三、安全上下文
安全上下文存在于进程与文件中,context随进程一起存入内存中,文件的context存放在其对应的inode中,因此进程在访问文件时,要先读取inode,再判断是否能够访问该文件。
ls -Z file # 显示文件的安全上下文
ps -eZ # 显示所有进程的安全上下文
semanage来自policycoreutils-python包,centos 6上默认没安装.
系统中的每个文件都会有context,使用ls -Z查询出来的context就是当前context,系统把每个文件的默认context记录下来并保存,这样系统记录下来的就是期望context。semanage命令可以管理每个文件的期望context,也叫期望标签。
安全上下文(当前context):
semanage fcontext -l # 查看所有的期望SELinux标签
semanage fcontext -l # 查看所有的期望SELinux标签
semanage fcontext -a -t type 目标目录 # 添加期望SELinux标签
semanage fcontext -m -t type 目标目录 # 修改期望SELinux标签
semanage fcontext -d -t type 目标目录 # 删除期望SELinux标签
修改规范:
semanage fcontext -a -t type 目录(/.*)?
安全标签(期望context):标签错误将导致启动异常,文件不可用等故障。
给文件重新打安全标签:
chcon [OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
-R:递归打标;
恢复目录或文件默认的安全上下文:
restorecon [-R] /path/to/somewhere
端口标签:
虽然听起来是修改端口号的,但是到底还是修改安全上下文的,我们用semanage工具,命令为semanage port
查询某个服务的context type字段
语法:semanage port -l |grep 服务名
添加某个端口为指定服务的访问端口
语法:semanage port -a -t type -p 协议 端口号(不要与常用端口重复)
例如添加ssh服务的端口号,默认为22
四、SELinux日志管理
yum install setroublesshoot*(重启生效)
将错误的信息写入/var/log/message
grep setroubleshoot/var/log/messages
sealert-l UUID
查看安全事件日志说明
sealert-a /var/log/audit/audit.log
扫描并分析日志