18.9 auditd日志系统的安装与启动
-
当查看特定安全上下文的策略规则时,SELinux 会使用被称为 AVC(Access Vector Cache,访问矢量缓存)的缓存,如果访问被拒绝(也被称为 AVC 拒绝),则会在一个日志文件中记录下拒绝消息。
-
这些被拒绝的消息可以帮助诊断和解决常规的 SELinux 策略违规行为,至于这些拒绝消息到底被记录在什么位置,则取决于 auditd 和 rsyslogd 守护进程的状态:
- 若 audit 守护进程正在运行,则拒绝消息将被记录与 /var/log/audit/audit.log 中。
- 若 audit 守护进程没有运行,但 rsyslog 守护进程正在运行,则拒绝消息会记录到 /var/log/messages 中。
注意,如果 audit 和 rsyslog 都在运行,那么拒绝消息将发送到 audit.log 和 messages 日志文件中。
- 所以当 SELinux 出现问题时,就可以求助 SELinux 的日志系统,该日志系统中详细地记录了 SELinux 中出现的问题,并提供了解决建议。我们当前可以使用的日志系统只有 auditd,当然这个服务是需要安装的,在我们的系统中 auditd 服务是已经安装的。如果没有安装,则使用 yum 安装即可。命令如下:
[root@localhost ~]# yum -y install audit
- 安装完成之后,只需启动 auditd 服务即可。命令如下:
[root@localhost ~]# service audit start
- 当然,还要使 auditd 服务是开机自启动的。一般这些工作,系统都已经帮我们完成了。命令如下:
[root@localhost ~]# chkconfig audit on
[root@localhost ~]# chkconfig --list | grep audit
auditd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
18.10 auditd日志使用方法
- audit 会把 SELinux 的信息都记录在 /var/log/audit/audit.log 中。这个文件中记录的信息会非常多,如果手工查看,则效率将非常低下。比如笔者的 Linux 中这个日志的大小就有 4.54mb。
[root@VM-0-3-centos ~]# ll -d /var/log/audit/audit.log
-rw-------. 1 root root 4799999 Nov 9 18:32 /var/log/audit/audit.log
-
这只是测试机,如果是真正的生产服务器,那么这个日志的大小将更加庞大(注意:audit.log 并没有自动加入 logrotate 日志轮替当中,需要手工让这个日志进行轮替)。所以,如果我们手工查看这个日志,那么效率会非常低下。所以,Linux 给我们准备了几个工具,来帮助我们分析这个日志。
-
audit2why 命令用来分析 audit.log 日志文件,并分析 SELinux 为什么会拒绝进程的访问。也就是说,这个命令显示的都是 SELinux 的拒绝访问信息,而正确的信息会被忽略。命令的格式也非常简单,如下:
[root@localhost ~]# audit2why < 日志文件名
[root@VM-0-3-centos ~]# audit2why < /var/log/audit/audit.log
type=AVC msg=audit(1370412789.400:858): avc: denied { getattr ) for pid=25624 comm="httpd" path="/var/www/htirl/index.html" dev=sda3 ino=918426
scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
#这条信息的意思是拒绝PID 是 25624的进程访间"/var/uww/html/Index.html",原因是主体的安全上下文和目标的安全上下文不匹配。其中,denied代表拒绝,path指定目标的文件名,scontext代表主体的安全上下文。tcontext代表目标的安全上下文,仔细看看,其实就是主体的安全上下文类型httpd_t和目标的安全上下文类型var_t不匹配导致的
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.
#给你的处理建议是使用audit2allow命令来再次分析这个日志文件
- audit2allow 命令的作用是分析日志,并提供允许的建议规则或拒绝的建议规则。命令如下:
[root@VM-0-3-centos ~]# audit2allow -a /var/log/audit/audit.log
#选项-a:指定日志文件名
#============= httpd_t ==============
allow httpd_t var_t:file getattr;
#提示我们只需定义一个规则,允许httpd_t类型对var_t类型拥有getattr权限,即可解决这个问题
-
可是我们还没有学习如果修改策略规则如何修改?其实类似这种因为主体和目标安全上下文类型不匹配的问题,全部可以使用 restorecon 命令恢复目标(文件)的安全上下文为默认安全上下文,即可解决问题,简单方便,完全不用自己定义规则。但是 audit2allow 命令对其他类型的 SELinux 错误还是很有帮助的。
-
sealert 命令:是 setroubleshoot 客户端工具,也就是 SELinux 信息诊断客户端工具。虽然 setroubleshoot 服务已经不存在了,但是 sealert 命令还是可以使用的。命令格式如下:
[root@localhost ~]# sealert [选项] 日志文件名
-
选项:
- -a:分析指定的日志文件;
-
使用这个工具分析一下我们的 audit.log 日志,命令如下:
[root@VM-0-3-centos ~]# sealert -a /var/log/audit/audit.log
100% done'tuple' object has no attribute 'split'
100% donefound 2 alerts in /var/log/audit/audit.log
———————————————————————————————————————————————————
SELinux is preventing /usr/sbin/httpd from getattr access on the 文 件 /var/www/html/index.html.
***插件 restorecon (94.8 置信度) 建议 *********************************
If 您想要修复标签。
/var/www/html/index.html 默认标签应为 httpd_sys_content_t。
Then 您可以运行 restorecon。
Do
# /sbin/restorecon -v /var/www/html/index.html
#提示非常明确,只要运行以上命令,即可修复index.html文件的问题
有了这些日志分析工具,我们就能够处理常见的 SELinux 错误了。
参考文献:
SELinux auditd日志使用方法详解
下一篇:Linux学习-95-SELinux策略规则操作
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123697.html