如何获取正在监听的端口列表以及绑定这些端口的用户的名称(在 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-所有者 {用户名}对于特定用户