一、问题现象

现网一台SuSE主机,在使用traceroute直接进行测试路由信息时可以正常返回(默认使用udp),当换用tcp协议指定端口时,提示权限拒绝,具体如下:

1# traceroute 192.168.23.22 -T -q 10 -f 4 -p 7280
2unable to create ICMP recv socket: Permission denied

二、问题分析

1、strace跟踪

先在redhat上使用该命令进行测试,发现可以正常返回结果 。接下来使用strace命令进行跟踪处理,并将结果输入到文件和正常的主机上进行对比。

1strace -f -t  -o /tmp/trace.txt traceroute 192.168.23.22 -T -q 10 -f 4 -p 7280

结果如下:

strace
strace

发现主机在权限被拒绝之前并未有异常提示。

2、使用审计服务进行审计

Auditd实现文件操作记录和审计我之前在博文中有提到过。启用审计服务,我临时增加如下规则:auditctl -w /usr/sbin/traceroute -p r,执行完成后,在审计日志中发现如下内容:

audit-raw
audit-raw

从中可以发现,被拒绝类型里有APPARMOR_DENIED。apparmor是SuSE下的一个类似于redhat下的SELinux的东西,通过rcapparmor stop关闭该服务后,再进行traceroute使用raw socket 进行tcp 路由跟踪,发现可以正常执行。

如果审计信息比较多的话,也可以通过如下命令查看最近的审计日志:

1# ausearch -ts recent
2----
3time->Fri Jul 14 11:26:27 2017
4type=DAEMON_START msg=audit(1500002787.761:2610): auditd start, ver=1.7.7 format=raw kernel=2.6.32.54-0.3-default auid=1001 pid=24877 subj=unconfined  res=success
5----
6time->Fri Jul 14 11:28:02 2017
7type=APPARMOR_DENIED msg=audit(1500002882.357:48): operation="socket_create" pid=31415 parent=2489 profile="/usr/sbin/traceroute" family="inet" sock_type="raw" protocol=1

三、其他

这个问题并不复杂,这里列出来同样是想给出一种分析问题的手段和方法 。当然,这里问题只是通过关服务的方式解决,如果想即不关 apparmor服务又想解决的话,就需要修改/etc/apparmor里的相关策略进行解决 。