我试图使用Linux功能允许程序(httpd)以非特权用户的身份绑定到特权端口(443)。
我使用以下命令设置程序的功能:
setcap CAP_NET_BIND_SERVICE+eip httpd
然后我验证了这个能力是用.
getcap httpd
指纹..。
httpd = cap_net_bind_service+eip
当我试图启动程序时,它会退出,因为它不能绑定到所需的端口。我使用strace发现了这一点:
strace -f httpd揭示“权限被拒绝,不能绑定,关闭”:
...
write(2, "(13)Permission denied: AH00072: "..., 85(13)Permission denied: AH00072: make_sock: could not bind to address [redacted X.X.X.X]:443) = 85
close(3) = 0
write(2, "no listening sockets available, "..., 46no listening sockets available, shutting down
...快速搜索表明,带有nosuid标志的挂载可以阻止功能的运行,并且我验证了它在这种情况下并没有干扰功能。
发布于 2019-09-24 21:58:33
您需要将功能设置为httpd应用程序的绝对路径。
setcap CAP_NET_BIND_SERVICE+eip <path/to/executable>这里我将使用java,tomcat使用它来运行我们的应用程序。
java位置:
/opt/java/bin/java设置能力:
setcap CAP_NET_BIND_SERVICE+eip /opt/java/bin/javahttps://serverfault.com/questions/834557
复制相似问题