socat返回permission denied排查记录

操作系统版本:Centos 7 2003

开发人员反馈通过socat做正向代理,连接socat代理返回permission denied,根据日志查看发现执行connect函数时返回EACCES,即permission denied。注:程序是root用户执行的

man connect查看返回错误可能原因:

EACCES For Unix domain sockets, which are identified by pathname: Write permission is denied on the socket file, or search permission is denied for one  of  the directories in the path prefix.  (See also path_resolution(7).)

EACCES, EPERM
The  user  tried  to  connect to a broadcast address without having the socket broadcast flag enabled or the connection request failed because of a local firewall rule.
以为是操作系统防火墙或selinux问题,通过排查发现防火墙是关闭的,selinux也未启用

换nc测试,发现nc与socat返回结果相同,也是没有权限

跟踪调用栈

通过perf record -p PID -ag,再根据perf script得到socat程序执行connect时内核中的调用栈:

根据内核源码发现,从调用栈中的filter_get_sock_type函数开始就不属于内核源码,因此想到一种可能,就是安装了其他的内核模块。

进一步查看内核模块:执行lsmod,发现系统中很多内核模块,根据内核模块名通过find / -name '内核模块名*'查找内核模块路径,找到后执行nm '内核模块名绝对路径' | grep filter_get_sock_type,在其中某个模块中果然找到此函数,剩下的函数同样方法查找,也都在此模块中,因此问题发现,原因是客户安装了自己或第三方实现的防火墙,此防火墙阻止了相关程序执行connect函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值