Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 为什么1024以下的端口具有特权?_Unix_Ip_Port - Fatal编程技术网

Unix 为什么1024以下的端口具有特权?

Unix 为什么1024以下的端口具有特权?,unix,ip,port,Unix,Ip,Port,我听说这是一个安全特性,但它通常看起来像是一个安全问题。如果我想编写一个使用特权端口的服务器,我不仅要担心我的代码有多安全,还要特别担心我是否使用了setuid权限并删除了特权。True。但这也意味着与您交谈的任何人都知道,您必须拥有root权限才能运行该服务器。当您在端口22(例如)登录到服务器时,您知道您正在与root用户运行的进程通信(安全问题除外),因此您可以使用该系统的密码或其他您可能不信任该系统上具有用户帐户的任何人的信息来信任该进程 参考文献: 编辑以详细说明原因:许多最重要的网络

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

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

参考文献:

编辑以详细说明原因:许多最重要的网络服务—telnet(是的,它仍然被使用—出人意料地经常使用)、SSH、许多HTTP服务、FTP等—都涉及通过网络发送密码等重要数据。在安全设置中,某种加密(无论是协议(SSH)中固有的还是围绕它的加密(stunnel、IPSec)可以保护数据不被监听到线路上,但所有这些保护都在服务器上结束

为了正确地保护您的数据,您需要确保您正在与“真正的”服务器通信。如今,安全证书是在web(和其他地方)上执行此操作的最重要方式:您假设只有“真正的”服务器可以访问证书,因此如果您验证与您交谈的服务器是否具有该证书,您将信任它


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

您没有说您使用的是什么平台,但在Linux上,至少可以使用功能(特别是CAP_NET_BIND_服务)来允许非根进程监听小于1024的端口。比如说,


另一种选择是设置iptables规则,将流量从特权端口转发到非特权端口(我在生产中使用过这个,它非常简单并且工作良好)。上面的链接中也描述了它。

似乎更像是一个超级用户。也许可以转移这个问题?在linux中,如果你设置了一个带有CAP_NET_BIND_服务的程序,这个程序可以作为另一个用户监听特权端口。man setcap…在UN*X上发现错误功能…端口低于1024…解决方法…问题是,我们不必担心是否使用了
setuid
正确。例如,我们可以说“我的进程将假定当它启动时,文件描述符3是您希望我监听的相关套接字”,然后我们可以有一个简单的、经过良好验证的标准程序,该程序放弃特权,然后执行一个命令,然后是另一个简单的标准验证良好的程序,它只监听一个套接字,并将该套接字放在给定的文件描述符上。哎呀,这似乎是一个很小的原因,导致了这样一个恼人的限制。相反,这是一个非常重要的原因——很明显,我在上面没有充分解释。=如果您知道服务器是以root身份运行的,这是否会使有人更容易尝试黑客攻击?任何“客户机”都不应该假设或知道您以root用户身份运行。初始密码应该始终更改,这就是为什么SSH具有知道服务器与我以前连接的服务器相同的安全特性。仅仅因为它的根,并不能使它更安全或更不安全,因为该服务可能已经被黑客攻击,现在正以根运行以窃取您的密码。甚至像linux这样的服务器也允许以非root用户的身份监听特权端口(root需要授予访问权)@Rahly:如果您的机器的root帐户被破坏,或者root帐户由一个傻瓜管理,那么您就有一个更大的问题,因为在该机器上运行的任何服务都会受到怀疑。简言之,您永远不应该连接到您不信任的机器。@Rahly:您的假设是错误的:确实只有root用户才能启动侦听特权端口的服务。但一旦启动,服务通常会放弃根用户权限,并作为有限用户运行(例如
www-data
),这正是您提到的安全原因。因此,特权端口上的服务必须由root授权,但通常不以root权限运行。