![为什么前 1024 个端口仅限 root 用户使用?](https://linux22.com/image/2859/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%89%8D%201024%20%E4%B8%AA%E7%AB%AF%E5%8F%A3%E4%BB%85%E9%99%90%20root%20%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
这只是一种无谓的好奇心。我的一个朋友问我“Linux 下只有 root 可以使用哪个端口范围?”我告诉他0-1024是有限制的。然后他问我为什么会这样……我很茫然。一点也不知道。
这些端口受到限制而 1025-65535 没有受到限制,是否有原因?
大多数主要网络服务(HTTP、FTP、SSH、Telnet、HTTPS、POP、SMTP 等)都在这个范围内,所以我想到的可能答案是:
- 不受信任的用户可以运行侦听这些端口以获取登录详细信息的程序。
- 不受信任的用户可以运行未经授权的服务器应用程序。
有人能在这里阐明吗?
答案1
假设您正在与端口 <1024 上的计算机交换数据,并且您知道该计算机正在运行某种 UNIX 变体。然后您就知道在该端口上运行的服务已获得系统管理员的批准:它以 root 身份运行,或者至少必须以 root 身份启动。
在广阔而狂野的互联网世界中,这并不重要。大多数服务器由与其上运行的服务相同的人员管理;你不会比其他用户更信任根。
对于多用户计算机,尤其是在本地网络上,这可能很重要。例如,在民用密码术出现之前,在另一台机器上运行 shell 命令的一种流行方法是rsh
(r表情嘘呃);您可以使用密码身份验证,或者只需证明您是机器 A 上的用户 X 即可进行身份验证(机器 B 知道 X@A 可以在没有密码的情况下以 X@B 身份登录)。如何证明这一点?客户rsh
端是 setuid root,并使用 <1024 的端口号,因此服务器知道与其通信的客户端是值得信赖的,并且不会谎报 A 上的哪个用户正在调用它。相似地网络文件系统被设计为对用户和权限透明,因此常见的配置是在本地网络上每台计算机都使用相同的用户数据库,并且 A 上的用户 N 从服务器 B 挂载文件系统将获得 B 上的用户 N 的权限。同样,NFS 客户端来自 <1024 的端口号的事实证明 A 的 root 已经审查了 NFS 客户端,这应该确保如果它传输一个声称来自用户 N 的请求,那么该请求确实是来自用户N。
未经授权的用户无法在低端口上运行服务器是另一个好处,但不是主要的好处。在过去,欺骗是相当新奇的事情,运行欺骗服务器的用户无论如何都会很快被警惕的管理员消灭。