为什么低于1024的端口是特权?

num*_*um1 56 unix ip

我听说这是一个安全功能,但它通常看起来像一个安全问题.如果我想编写一个使用特权端口的服务器,我不仅要担心我的代码有多安全,我还要特别担心我是否正在使用setuid和删除权限.

jim*_*imw 62

真正.但这也意味着任何与您交谈的人都知道您必须拥有root权限才能运行该服务器.当您在端口22(例如)上登录服务器时,您知道您正在与root运行的进程(除了安全问题)进行通信,因此您可以信任该系统的密码或其他信息.不信任在该系统上拥有用户帐户的任何人.

参考:http://www.w3.org/Daemon/User/Installation/PrivilegedPorts.html.

编辑以详细说明推理:许多最重要的网络服务 - telnet(是的,它仍然使用 - 经常令人惊讶),SSH,许多HTTP服务,FTP等等 - 涉及通过网络发送密码等重要数据.在安全设置中,某种加密,无论是协议中固有的(SSH)还是包裹它(stunnel,IPSec),都可以保护数据不被窃听,但所有这些保护都在服务器上结束.

为了正确保护您的数据,您需要确保与"真实"服务器通信.今天的安全证书是这样做的网站上(和其他地方)的最重要的方法:你认为只有"真正的"服务器访问证书,所以如果你确认你正在谈话的服务器有一个证书你我会相信它.

特权端口以非常类似的方式工作:只有root可以访问特权端口,因此如果您正在与特权端口通信,那么您知道您正在与root通话.这在现代网络上并不是很有用:重要的是服务器的身份,而不是IP.在其他类型的网络中,情况并非如此:例如,在学术网络中,服务器通常由安全房间中受信任的工作人员进行物理控制,但学生和工作人员可以作为用户自由访问.在这种情况下,通常可以安全地假设您始终可以信任root,因此您可以安全地登录并将私有数据发送到特权端口.如果普通用户可以监听所有端口,则需要一个额外的层来验证特定程序是否受某些数据信任.

  • Ick,这似乎是一个如此恼人的限制的小原因. (5认同)
  • 相反,这是一个非常重要的原因 - 显然我上面没有充分解释.= (5认同)
  • 如果您知道服务器正在以 root 身份运行,这是否会让其他人更容易尝试进行黑客攻击?任何“客户端”都不应该假定或知道您以 root 身份运行。初始密码应始终更改,这就是为什么 SSH 具有知道服务器与我之前连接的服务器相同的安全功能的原因。仅仅因为它的 root 并不会使其更加安全或不那么安全,因为该服务可能已被黑客入侵,并且现在以 root 身份运行以窃取您的密码。即使像 Linux 这样的服务器也允许以非 root 用户身份监听特权端口(root 需要授予访问权限) (2认同)
  • @Rahly:你的假设是错误的:确实只有root可以**启动监听特权端口的**服务.但是一旦启动,服务通常会删除root权限并以有限的用户身份运行(例如`www-data`),这完全是出于您提到的安全原因.因此,特权端口上的服务必须由root授权,但通常不以root权限运行. (2认同)
  • 在我的 Ubuntu 上,这些以 root 身份运行:“nginx 主进程、smbd、sshd、cupsd、cups-browsed、nmbd、dhclient”。这些删除权限:“lighttpd、dnsmasq、exim4、mongod、mysqld、avahi-daemon、dictd ntpd”。所以你们都错了,我的意思是对的。 (2认同)

Ric*_*ond 8

你没有说你正在使用什么平台,但在Linux上至少你可以使用功能(特别是CAP_NET_BIND_SERVICE)来允许非root进程侦听小于1024的端口.例如,参见,有没有办法在Linux上绑定到"特权"端口的非root进程?

另一种方法是设置iptables规则以将流量从特权端口转发到非特权端口(我在生产中使用过它,它非常简单且运行良好).它也在上面的链接中描述.