linux故障排查命令 linux故障分析方法( 三 )


标签问题:如果某个文件被移动而不是被拷贝,它保留原始标签 。
$ mv index.html /var/www/html/
解决方案:正确标记文件 。
将上下文更换成正确的标签:
# chcon -t httpd_system_content_t /var/www/html/index.html
更换拥有参考标签的上下文:
# chcon --reference /var/www/html/ /var/www/html/index.html
针对这两种情况,恢复文件的默认上下文:
# restorecon -vR /var/www/html/
SELinux需要知道
服务定制:Web服务器将在端口8585上侦听请求 。
要把所需的端口添加到上下文,请运行:
# semanage port -a -t http_port_t -p tcp 8585
为服务添加功能:Web服务器将能够发送电子邮件 。
要启用邮件发送功能,开启布尔值,运行:
# setsebool -P httpd_can_sendmail 1
-P标志使变更在布尔值中具有持久性 。
要获得所有布尔值,运行:
# getsebool -a
要检查布尔值的状态,运行:
# semanage boolean -l
策略故障排查
服务未运行:使用wicd而不是NetworkManager服务来处理无线连接 。
检查audit.log文件,查找被拒绝的访问:
# grep denied audit.log | cut -d{ -f2 | sort -n | uniq -u
create } forpid=2670 comm="wicd" scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:system_r:NetworkManager_t:s0 tclass=appletalk_socket permissive=1
create } forpid=2670 comm="wicd" scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:system_r:NetworkManager_t:s0 tclass=ax25_socket permissive=1
ioctl }forpid=2670 comm="wicd" path="socket:[52681]" dev="sockfs" ino=52681 ioctlcmd=0x8b01 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:system_r:NetworkManager_t:s0 tclass=ax25_socket permissive=1
ioctl }forpid=2670 comm="wicd" path="socket:[52684]" dev="sockfs" ino=52684 ioctlcmd=0x8b01 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:system_r:NetworkManager_t:s0 tclass=appletalk_socket permissive=1
setattr }forpid=2214 comm="wicd" name="dhclient.conf.template" dev="dm-0" ino=437068 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=unconfined_u:object_r:etc_t:s0 tclass=file permissive=0
注意:上下文NetworkManager_t和etc_t所涉及的一些元素需要权限,需要访问不同的文件和套接字创建 。
创建type enforcement (.te)文件 , 拥有策略的必要权限:
# vi my_wicd.te
module my_wicd 1.0;
require {
type NetworkManager_t;
type etc_t;
class ipx_socketcreate;
class ax25_socket {create ioctl };
class appletalk_socket {create ioctl };
class file setattr;
}
#============= NetworkManager_t ==============
allow NetworkManager_t etc_t:file setattr;
allow NetworkManager_t self:appletalk_socket {create ioctl };
allow NetworkManager_t self:ax25_socket {create ioctl };
allow NetworkManager_t self:ipx_socketcreate;
要编译策略,安装软件包selinux-policy-devel,并生成策略软件包:
# make -f /usr/share/selinux/devel/Makefile my_wicd.pp
要激活刚生成的模块,运行:
# semodule -i my_wicd.pp
策略错误信息:试图访问我的网站时,我在日志中看到了SELinux错误 。
为SELinux错误信息排查故障时常见的陷阱之一是,根据发现的所有错误信息创建策略 。在大多数情况下,如果setroubleshoot包已安装,同样的提醒会给出所有可能的变通选项 , 按最好到最差的顺序排列 。
要查看今天生成的setroubleshoot提醒,运行:
# journalctl -t setroubleshoot --since today
Dec 08 13:08:33 lab.example.com setroubleshoot[12013]: failed to retrieve rpm info for /var/www/html/index.html
Dec 08 13:08:34 lab.example.com setroubleshoot[12013]: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html. For complete SELinux messages run: sealert -l 011df984-4eb6-4079-98ab-cba173c4342e

推荐阅读