avc log分析:
SeLinux的AVC log的详细分析 eg:
type=AVC msg=audit(1395177286.929:1638): avc: denied { read } for pid=6591 comm="httpd" name="webpages" dev="0:37" ino=2112 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
整体翻译:SELinux拒绝PID为6591且httpd_t类型的httpd进程从nfs_t类型的目录读取数据。
type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
整体翻译:SELinux禁止PID为2465的httpd进程访问samba_share_t类型的/var/www/html/file1文件,除非配置为其他类型,否则httpd_t域中的进程不能访问该文件。
各个参数详解
type=AVC
日志类型,该日志仅仅在audit.log文件中现实,它告诉用户该审计日志的具体类型。本例中类型为AVC。
msg=audit(1363289005.532:184)
时间戳,起始于1970年1月1日的记秒数。当然,我们可以通过date命令将其转换为墙钟时间。
avc:
日志类型,这里有些重复了。SELinux 执行并记录在访问向量缓存 (AVC) 中的操作
denied
SELinux采取的动作,可以是denied或者granted。如果系统配置的是permissive模式,那么虽然SELinx会放行,但在审计日志中仍然是denied。
{ read }
被拒绝的动作。有getattr, read,write.等。本例中是一个读请求。有时请求的类型可能不止一个,比如{ 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支持的类型很多,比如文件、套接字或者信号量等等。
scontext="unconfined_u:system_r:httpd_t:s0" - 尝试拒绝操作的进程(源)的 SELinux 上下文。 在这种情况下,它是使用 httpd_t 类型运行的 Apache HTTP 服务器的 SELinux 上下文。
tcontext="unconfined_u:object_r:samba_share_t:s0" - 进程试图访问的对象(目标)的 SELinux 上下文。 在这种情况下,它是 file1 的 SELinux 上下文。
安全上下文详细内容:
MLS SELinux策略使用16个灵敏度级别。S0-S15:S0是最不敏感的,S15最敏感。
这意味着用户可以在他们自己的敏感级别或更低级别读取文件,但只能在他们自己的级别上写入。
MLS 环境中非特权用户的安全上下文是,例如:
user_u:user_r:user_t:s1
其中: user_u 是 SELinux 用户。
user_r 是 SELinux 角色。
user_t 是 SELinux 类型。
s1 是 MLS 灵敏度级别。
身份字段(user)用于标识该数据被哪个身份所拥有,相当于权限中的用户身份。这个字段并没有特别的作用,知道就好。常见的身份类型有以下 3 种:
- - root:表示安全上下文的身份是 root。
- - system_u:表示系统用户身份,其中“_u”代表 user。
- - user_u:表示与一般用户账号相关的身份,其中“_u”代表 user。
2) 角色(role)主要用来表示此数据是进程还是文件或目录。这个字段在实际使用中也不需要修改,所以了解就好。常见的角色有以下两种:
- - object_r:代表该数据是文件或目录,这里的“_r”代表 role。
- - system_r:代表该数据是进程,这里的“_r”代表 role。
3) 类型(type)类型字段是安全上下文中最重要的字段,进程是否可以访问文件,主要就是看进程的安全上下文类型字段是否和文件的安全上下文类型字段相匹配,如果匹配则可以访问。注意,类型字段在文件或目录的安全上下文中被称作类型(type),但是在进程的安全上下文中被称作域(domain)。也就是说,在主体(Subject)的安全上下文中,这个字段被称为域;在目标(Object)的安全上下文中,这个字段被称为类型。域和类型需要匹配(进程的类型要和文件的类型相匹配),才能正确访问。
httpd_t - 进程的 SELinux 类型
nfs_t - 受进程操作影响的对象的 SELinux 类型
参考文档链接: