为什么前 1024 个端口仅限于 root 用户?

And*_*ert 61 networking security root tcp

这比什么都更无趣。我的一个朋友问我'在 Linux 下只有 root 可以使用哪个端口范围?我告诉他0-1024被限制了。然后他问我为什么会这样……我不知所措。什么都不知道。

是否有理由限制这些端口而 1025-65535 不受限制?

大多数主要的网络服务(HTTP、FTP、SSH、Telnet、HTTPS、POP、SMTP 等)都在这个范围内,所以我想到了可能的答案:

  • 不受信任的用户可以运行在这些端口上侦听登录详细信息的程序。
  • 不受信任的用户可能会运行未经授权的服务器应用程序。

任何人都可以在这里阐明吗?

Gil*_*il' 61

假设您正在与端口 <1024 上的计算机交换数据,并且您知道该计算机正在运行某种 unix 变体。然后您就知道在该端口上运行的服务是由系统管理员批准的:它以 root 身份运行,或者至少必须以 root 身份启动。

在广阔而狂野的互联网世界中,这无关紧要。大多数服务器与运行在其上的服务由同一个人管理;您不会比其他用户更信任根。

对于多用户机器,尤其是在本地网络上,这很重要。例如,在民用密码学出现之前,一种在另一台机器上运行 shell 命令的流行方法是rsh( r emote sh ell);您可以使用密码身份验证,或者您可以仅通过证明您是机器 A 上的用户 X 来进行身份验证(机器 B 知道 X@A 可以在没有密码的情况下以 X@B 身份登录)。如何证明?该rsh客户端为setuid根,并且使用一个端口号<1024,所以服务器知道它在说话到客户端是值得信赖的,不会骗哪个用户在A被调用它。同样NFS 被设计为在用户和权限方面是透明的,所以一个常见的配置是在本地网络上,每台机器使用相同的用户数据库,从服务器 B 挂载文件系统的 A 用户 N 将获得 B 用户 N 的权限。同样,NFS 客户端来自端口号 <1024 的事实证明 A 的 root 已经审查了 NFS 客户端,这应该确保如果它传输声称来自用户 N 的请求,那么该请求确实是来自用户 N。

未经授权的用户无法在低端口上运行服务器是另一个好处,但不是主要好处。在过去,欺骗是相当新鲜的,无论如何,运行欺骗服务器的用户都会被警惕的管理员迅速清除。

  • @dmckee 也可以说这种设计会导致更多服务器以 root 身份运行,即使它们可以选择在备用端口上运行。 (7认同)
  • @Amazed 今天在本地网络上偶尔仍然有用。我不认为这会导致更多服务器以 root 身份运行,服务可以绑定端口然后删除权限,或者使用可用的功能,或者管理员可以重定向防火墙配置上的端口。如果今天设计了 unix,我认为它不会被放入,但它并没有什么坏处。 (5认同)
  • 那么,有点像穷人的身份验证呢?这个约定在现代 *nix-like 操作系统中是否有任何真正的好处? (4认同)
  • 这种废话早就应该从内核中消失了。任何端口号都不应具有任何特殊含义。该设计背后的“推理”早已过时(我认为即使在设计时也是有争议的)。但更糟糕的是,任何“值得信赖”的特殊数字范围的想法都是其含义。网络服务器需要以 root 身份执行才能提供网页服务。一次漏洞利用和漏洞服务器消失了。又是为了什么?对于从来没有一点点工作的遗留设计。 (4认同)
  • @Amazed:unix 世界是保守的,所以要问的问题是*“它会造成什么真正的麻烦吗?”*(并且应该充分了解每个值得运行的服务器都有一个命令行参数来更改端口)。 (2认同)