SeLinux 的avc log解读

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 种:

  1. - root:表示安全上下文的身份是 root。
  2. - system_u:表示系统用户身份,其中“_u”代表 user。
  3. - 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 类型

参考文档链接:

SELinux安全上下文查看方法(超详细) 第18章

SELinux使用及审计日志解释_安科网

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要从日志中查看SELinux权限导致的网络无法使用问题,可以按照以下步骤进行操作: 1. 打开终端,以root用户身份登录系统。 2. 使用以下命令查看SELinux日志: ``` grep AVC /var/log/audit/audit.log ``` 这个命令将会输出所有包含 "AVC" 的日志记录,这些记录表示SELinux原子策略的决策。 3. 在输出中查找与网络相关的日志记录。例如,你可以搜索 "network"、"port"、"socket"、"httpd" 或 "ftp" 等关键词,以查找与网络相关的日志记录。 4. 了解SELinux的决策。在日志记录中,你会看到一些以 "AVC" 开头的记录,其中包含了SELinux的决策信息。例如: ``` type=AVC msg=audit(1436929977.620:289): avc: denied { name_connect } for pid=3211 comm="httpd" dest=80 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket ``` 这条记录表示,一个进程(httpd)尝试连接到端口80,但是由于SELinux的策略,这个连接被拒绝了。在这个例子中,原因是 httpd 进程的安全上下文(scontext)是 "unconfined_u:system_r:httpd_t:s0",而目标端口的安全上下文(tcontext)是 "system_u:object_r:http_port_t:s0"。由于这两个安全上下文不匹配,SELinux拒绝了这个连接。 5. 修改SELinux的策略。如果你在日志中发现了与网络相关的SELinux拒绝记录,那么你需要针对这些记录来修改SELinux的策略。例如,在上面的例子中,你需要将 httpd 进程的安全上下文与目标端口的安全上下文进行匹配。你可以使用 `chcon` 命令来修改文件或目录的安全上下文,使用 `semanage` 命令来修改SELinux策略。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值