Deg*_*gas 6 linux linux-networking socket
这个问题类似于网络端口打开,但没有附加过程?netstat显示没有 pid 的侦听端口,但 lsof 没有
我尝试了我能做的一切(作为 root:netstat、lsof、ls -al /proc/*/fd 等),但我找不到 pid。
不管怎样,我必须关闭或释放没有 pid 的端口,因为我的进程想要监听它。无论如何都要这样做吗?
我不想重新启动服务器。因为我的系统中有一个进程,它会更新我所有服务器中的bin文件,然后自动部署所有服务器。当监听7123或其他端口时,部署会失败。
谢谢。
这种情况有三台服务器,它们都是 Rackspace 的服务器,所有“坏端口”都是 udp 端口 7123。
重新启动可以解决这个问题,我已经在这三台服务器之一上尝试过。但我不想重新启动服务器。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 213120 0 134.213.205.214:7123 0.0.0.0:* -
Run Code Online (Sandbox Code Playgroud)
nmap的结果显示该端口没有关闭。(@Enzo)
root@auto:~# nmap 134.213.205.214 -p 7123 -sU
Starting Nmap 6.40 ( http://nmap.org ) at 2018-04-16 12:01 UTC
Nmap scan report for auto (134.213.205.214)
Host is up.
PORT STATE SERVICE
7123/udp open|filtered unknown
Nmap done: 1 IP address (1 host up) scanned in 2.12 seconds
Run Code Online (Sandbox Code Playgroud)
目前,重新启动是关闭/释放此端口的唯一方法。但重新启动是一个坏主意,它会使服务停止。
您的系统可能运行在不一致的状态。我将从做一些基本的诊断开始。
检查UDP套接字及其进程。
运行sudo netstat -lunp或sudo ss -lunp查看 UDP 套接字(端口 7123 上)是否繁忙。普通sudo用户需要升级权限并查看正在该端口“侦听”的 PID 和进程名称。如果没有,将会出现代替 PID 和进程名称。记下 PID。如果没有列出,那么您可以开始认为您的系统已受到损害,因为该进程能够通过操纵进程的内部内核结构来隐藏自己!如果您看不到具有高权限的 PID,那么您最好隔离该服务器,因为它可能已被破坏和黑客攻击。sudo-
检查监听进程是否也在“说话”
我建议使用nmap或更通用的netcat工具。你nmap可以尝试这个命令:
sudo nmap -sV -v -Pn -sU -p U:7123 134.213.205.214
它尝试理解端口 UDP:7123 上使用的协议。sudo特定扫描类型(UDP 服务扫描)需要。如果您看到的数据与您的预期不符,则可能是该过程失控或处于不一致的状态。或者它已被其他(恶意?)代码替换。
您需要netcat一些手动干预来生成到服务器的流量:
netcat -u 134.213.205.214 7123
无论您输入什么内容,都将通过端口 UDP:7123 发送到您的应用程序。您还可以通过以下方式传输一些随机数据(但不要期望任何有意义的结果):
cat /dev/urandom | netcat -u 134.213.205.214 7123
检查系统和应用程序日志(如果有)
前者通常存储在/var/log/目录中。应用程序日志可以在其他任何地方。lsof如果您检查第二列上的 PID,该工具会有所帮助。在后续操作中我会密切关注这些日志。
检查该 PID 的进程表
该命令ps可以提供有关进程的许多详细信息。我个人最喜欢的是:
PS_FORMAT="ruser,pid,ppid,s,%cpu,rss,cmd" ps ax --sort=pid
您可以在第二列中看到您要查找的 PID,以及真实用户 ID(ruser,第一列)、父 PID(ppid,第三列)、状态(s,第四列)、CPU 使用率百分比( %cpu,第 5 个)、驻留集大小(rss,第 6 个)和带有参数的命令行(cmd,第 7 个)。在我看来,对于这种情况,进程状态(它是一个字母)和 CPU 使用百分比以及命令行是关键值。
检查手册页以获取所有详细信息ps并微调输出。
检查二进制文件
如果您有另一台具有相同架构和操作系统的计算机,并且以预期方式运行相同的进程,则可以检查二进制文件是否逐字节匹配。如果没有,您最好从已知的安全源重新安装这些二进制文件。
我们假设该程序是/usr/local/bin/myserver.
计算并记下其校验和。像这样的东西:
sha512sum /usr/local/bin/myserver
如果程序已编译为使用动态库,那么您还需要检查它们。使用的动态库列表通过以下方式获得:
ldd /usr/local/bin/myserver
请注意:输出可能相当长,但对于每一行,您都需要计算并记下校验和以进行比较。
如果发现与参考可信系统有任何差异,我建议重新安装整个系统和应用程序。这是一种激进的方法,但我认为目标系统不再值得信任。
杀死并重新启动进程
我会尝试终止流氓进程(前提是您知道其 PID)并重新启动它以检查流氓行为是否持续存在。为了杀死给定 PID 的进程,您可以运行:
sudo kill -s SIGKILL <PID>
我需要警告您,在许多情况下,进程不会终止或终止时间比预期晚。它主要取决于ps之前运行的命令显示的进程状态。引用的手册页在“进程状态代码”段落中报告了有关进程状态列的一些信息。
使用该命令ps再次检查进程状态。它通常应该在几秒钟内被踢出并从进程列表中消失。
一旦进程被终止,您可以尝试重新启动它并查看恶意行为是否重复。
作为一般经验法则,如果您不对系统进行任何更改,则行为也几乎不会改变。也就是说,仅仅重新启动应用程序或系统很难解决问题:它只会被及时推进。