我如何知道哪个用户绑定了哪个端口?

我如何知道哪个用户绑定了哪个端口?

如何获取正在监听的端口列表以及绑定这些端口的用户的名称(在 Linux 上)?

最终,我希望系统上有几个用户,为他们分配 2 个端口来使用,并且可能不会绑定在任何其他端口上。

我不知道该怎么做,但似乎如果我有正确的 bash-fu 组合,我应该能够获得上述列表并定期检查哪些用户绑定到哪些端口,以及是否有任何用户因使用未分配的端口而被锁定。

答案1

您可能可以使用 netstat 得到答案,但是,我一直使用通常安装在服务器上的 lsof。lsof 非常适合调查 Linux 进程及其使用的文件和套接字。例如,lsof -i -P 将产生以下类型的输出:

# lsof -i -P
COMMAND     PID    USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
sshd       1468    root    3u  IPv4   599160      0t0  TCP *:22 (LISTEN)
mysqld     1718   mysql   10u  IPv4   599883      0t0  TCP *:3306 (LISTEN)
dovecot    1776    root    5u  IPv4   599934      0t0  TCP *:993 (LISTEN)
spamd      1789    root    5u  IPv4   600861      0t0  TCP localhost.localdomain:783 (LISTEN)

将其与 cut、grep、sed 等结合起来,您应该能够编写一个可提供报告的解决方案。

答案2

如何使用IP表仅允许您希望用户访问的端口:例如允许端口 80:

/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

其余端口默认被拒绝(需要更多条目来指定默认行为)。相同的概念解释如下这里

此外,如果将来你想允许任何用户访问某个特定端口,你可以向 IPTABLE 添加一个条目,其中包含以下选项-m 所有者 --uid-所有者 {用户名}对于特定用户

相关内容