杨立峰 2019-11-22
虽然在测试环境我们经常将SELinux关闭,但在生产环境SELinux通常是必须要打开的。但是目前很多同学对SELinux知之甚少,因此本号解释一下关于SELinux的相关内容。
更多关于SELinux及Linux权限管理的内容请参考下面专栏。
如果想开启SELinux特性,只需要将配置文件/etc/selinux/config中的SELINUX的值改为enforcing即可。修改完成后重启计算机SELinux就生效了。
SELinux的管理与模式
可以通过/etc/selinux/config文件中的配置项实现对SELinux的管理,包括启动、停止和修改策略类型等。
如图所示,这里有2个配置项,也就是SELINUX和SELINUXTYPE。其中SELINUX表示SELinux的启用状态,可以有3种模式。
SELinux的类型
从上述配置文件还可以看出SELinux有2中类型,分别是targeted和mls。目前SELinux默认使用targeted类型。前文我们介绍过,对于SELinux最主要的是有一个策略数据库,而这里targeted就是一个具体的策略数据库。如果深入到该目录内部(/etc/selinux/targeted/modules/active/),就可以看到这里面有很多策略文件。
为了让大家有个感性的认识,我们将SELinux相关的目录树列在这里。这里面核心的地方有两个,一个是config配置文件,另外一个是目录targeted下面的所有内容。
在开启SELinux的情况下,如果某些组件对资源的访问没有权限,则会出现如下格式的日志。日志文件的路径为/var/log/auditor/auditor.log。
type=AVC msg=audit(1363289005.532:184): avc: denied { read } for pid=29199 comm="Trace" name="online" dev="sysfs" ino=30 scontext=staff_u:staff_r:googletalk_plugin_t tcontext=system_u:object_r:sysfs_t tclass=file
初次看到该日志时通常是一脸懵逼,不知道该日志想表达什么意思。
下面我们分别解释一下该日志中各个条目的含义。这样大家在日后遇到类似问题的时候就可以进行分析,并找到解决问题的方法。能够知其然,并且知其所以然。
type=AVC
日志类型,该日志仅仅在audit.log文件中现实,它告诉用户该审计日志的具体类型。本例中类型为AVC。
msg=audit(1363289005.532:184)
时间戳,起始于1970年1月1日的记秒数。当然,我们可以通过date命令将其转换为墙钟时间。具体放入如下:
date -d @1363292159.532
avc:
日志类型,这里有些重复了。
denied
SELinux采取的动作,可以是denied或者granted。如果系统配置的是permissive模式,那么虽然SELinx会放行,但在审计日志中仍然是denied。
{ read }
请求获得的许可。本例中是一个读请求。有时请求的类型可能不止一个,比如{ read write },但通常只有一个。
for pid=29199
期望获取许可的进程ID信息。
comm="Trace"
进程的名称。有些进程是非常住进程,这时后我们无法获得进程的ID,因此可以通过该参数获得具体是那个进程。
name="online"
目标的名称,本例中是一个文件名称。
dev="sysfs"
目标所位于的设备。本例中我们知道文件所在的位置应该是/sys目录
ino=30
目标文件的inode id。可以根据该id获得文件的具体路径。
scontext=staff_u:staff_r:googletalk_plugin_t
源上下文,进程(访问者)的安全上下文。这里其实就是关于SELinux访问者的标签信息,SELinux正是根据源和目的标签及策略来实现访问控制的。
tcontext=system_u:object_r:sysfs_t
目的上下文,目标资源(被访问者)的安全上下文。
tclass=file
目标的类型,本例是文件。SELinux支持的类型很多,比如文件、套接字或者信号量等等。
本文对SELinux的使用和审计日志做了简要的介绍,更多的内容还请关注如下专栏,里面会介绍的更加细致。