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


53

这比其他任何事情都更让人感到好奇。我的一个朋友问我“在Linux下只有root可以使用哪个端口范围?” 我告诉他0-1024被限制。然后他问我为什么会这样……我茫然不知所措。完全不知道

为什么限制这些端口而不限制1025-65535是有原因的?

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

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

有人可以在这里亮吗?

Answers:


52

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

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

对于多用户计算机,尤其是在本地网络上,这可能很重要。例如,在民用加密前的日子里,在另一台机器上运行的外壳命令的流行方法是rsh- [R表情SH ELL); 您可以使用密码身份验证,也可以仅通过证明您是计算机A上的用户X来进行身份验证(计算机B知道X @ A可以以X @ B身份登录而没有密码)。如何证明呢?该rsh客户端为setuid根,并且使用一个端口号<1024,所以服务器知道它在说话到客户端是值得信赖的,不会骗哪个用户在A被调用它。类似的NFS 旨在将用户和权限透明化,因此一个常见的配置是在本地网络上,每台计算机都使用相同的用户数据库,并且服务器B上A挂载文件系统上的用户N将获得B上用户N的权限。同样,NFS客户端来自端口号<1024的事实证明A的根已审核了NFS客户端,这应该确保如果它传输的请求是来自用户N的请求,则该请求确实是来自用户N。

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


2
那么,有点像穷人的身份证明吗?这个约定在类似现代* nix的操作系统中是否有任何真正的好处?
安德鲁·兰伯特

2
@Amazed:Unix世界是保守的,所以要问的问题是“它引起任何真正的麻烦吗?” (应该充分了解所有值得运行的服务器都有命令行参数来更改端口)。
dmckee 2011年

5
@dmckee也可以说这样的设计导致更多服务器以root用户身份运行,即使它们可以选择在备用端口上运行也是如此。
安德鲁·兰伯特

5
@Amazed它今天在本地网络上仍然偶尔有用。我认为这不会导致更多服务器以root用户身份运行,服务可以绑定端口然后放弃特权,或者使用功能(如果可用),或者管理员可以在防火墙配置上重定向端口。我认为,如果今天不设计unix,就不会放进去,但是这并没有什么坏处。
吉尔(Gilles)“所以,别再邪恶了”,

1
废话早就应该从内核中消除了。没有端口号应该有任何特殊含义。该设计背后的“推理”早已过时(即使在设计时,我也认为这是有争议的)。但是,更糟糕的是暗示了任何“值得信赖”的特殊数字范围的想法。Web服务器需要以root用户身份执行才可以提供网页。一个漏洞利用,漏洞服务器就消失了。那又是为了什么呢?对于从未使用过的传统设计。
masi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.