Linux 功能不起作用

Linux 功能不起作用

我正在尝试使用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
...

我应该怎么做才能使 Linux 功能正常工作并允许程序绑定到特权端口?

快速搜索表明,带有nosuid标志的挂载可能会阻止功能运行,并且我验证了它在这种情况下不会干扰。

答案1

您需要将功能设置为 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/java

相关内容