httpd服务器未启动:(13)权限被拒绝:make_sock:无法绑定到地址[::]:88

67

我正在尝试在CentOS 6上启动httpd服务器,但出现以下错误:

[root@machine ~]# service httpd start
Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:88
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:88
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]

我还检查了端口88,它没有被使用。 我也使用semanage进行了检查,但没有帮助。

将不胜感激任何帮助。


4
把端口添加到 SELinux 对我有用,所以感谢提供链接的人。 - superEb
编辑配置文件以更改Apache使用的端口号,使其大于1024,例如8080。我在Windows中使用Ubuntu v20,并进行如下编辑:sudo vi /etc/apache2/ports.conf。 - MTMDev
16个回答

135

我遇到了这个问题,是因为缺少SELinux权限。默认情况下,SELinux仅允许apache/httpd绑定到以下端口:

80, 81, 443, 488, 8008, 8009, 8443, 9000

如果使用默认的SELinux配置,绑定到我的httpd.conf配置的Listen 88 HTTP端口和config.d/ssl.conf配置的Listen 8445 TLS/SSL端口将会失败。

为了解决这个问题,我需要将端口88和8445添加到系统的SELinux配置中:

  1. 安装semanage工具:sudo yum -y install policycoreutils-python
  2. 允许httpd使用端口88:sudo semanage port -a -t http_port_t -p tcp 88
  3. 允许httpd使用端口8445:sudo semanage port -a -t http_port_t -p tcp 8445

我认为我在Mac OS X(Darwin,Unix变体)上遇到了同样的问题。听取端口88似乎重新启动得很好,并且没有抛出任何错误,但是我无法在该端口上在浏览器中获得任何响应。但是一旦我将其更改为81,它就开始正常工作了。 - Stephen Washburn
在 Fedora 24 上使用 dnf 安装 policycoreutils-python-utils。 - e18r
请参考以下链接了解如何允许非root用户绑定特定端口:https://superuser.com/a/892391/216033 - Tilo
1
-m选项(修改)对我有用,因为我需要的端口已经被定义为其他SELinux策略。 - JCm
@Abdull,这个解决方案只适用于基于rpm的操作系统。在Debian或Ubuntu上该怎么办? - Andrew

56

看起来你不是以"root"身份运行它。只有root用户才能绑定到该端口(80)。 请检查conf/httpd.conf文件中的配置,查找Listen行并将端口更改为更高的端口。


2
你可以使用 sudo - Andrew
@Andrew,不好意思,我不能这样做,我没有权限。 - Igor Zilberman
谢谢!在我的情况下,我在Dockerfile中使用了USER X命令,这就是问题的原因所在。将其注释掉后,将root设置为默认用户,一切都正常运行了。 - Genarito

20

这是对Abdull在此线程中回答的补充:

我不得不修改端口而不是添加端口。

semanage port -m -t http_port_t -p tcp 5000

因为我在添加端口时遇到了以下错误:

ValueError: Port tcp/5000 already defined


这对我有效,尽管我添加了SELinux策略并且成功了,但我仍然需要这样做才能使其正常工作,浪费了我30分钟的生命:( - Broken Arrow

8

在终端中以root权限运行此命令:

sudo /etc/init.d/apache2 start

如果您想要启动Web服务器,必须拥有root权限,否则会出现类似的错误。


需要超级用户访问权限。因此,sudo服务apache2 restart将重新启动像您使用sudo /etc/init.d/apache2 start一样。 - vimal krishna

7

在我的CentOS 6.7安装中,我不仅遇到了使用root启动httpd的问题,还遇到了xauth的问题(出现“/usr/bin/xauth:timeout in locking authority file /.Xauthority”错误并伴随着权限被拒绝的错误)

# setenforce 0

这个命令解决了两个问题。


这解决了我在Centos 7上的问题,该系统是在vagrant驱动的开发服务器上运行apache2的另一个端口。但请记住,您实际上是禁用SELinux - 这意味着禁用安全功能。在生产服务器上最好使用semanage来添加端口,就像@Abdull提到的那样。 - Hafenkranich

6

禁用 SELinux

暂时禁用 SELinux

sudo setenforce 0

重启httpd服务

service httpd restart

持久地禁用SELinux(重启后)

vi /etc/selinux/config

添加行并保存
SELINUX=disabled

我建议禁用SELinux,启动Web服务器并执行以下操作: grep -a AVC /var/log/audit/audit.log | grep httpd | audit2allow -a -M myhttpd 使用 semodule -i myhttpd.pp 启用您的myhttpd策略,然后再次启用SELinux。 - Ulrich-Lorenz Schlüter

3
在我的情况下,我尝试首先使用端口88,即使这样httpd也无法启动。
我按照以下命令,即修改而不是添加,如一位用户建议的那样,成功运行了httpd。
semanage port -a -t http_port_t -p tcp 88

1
禁用SELINUX后,任何端口都可用。
sudo -s;  
setenforce 0;  
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config;  


0
检查安全状态 getenforce 检查防火墙状态 firewall-cmd --zone=public --list-all
检查执行权限 进入httpd/bin目录 #chown root:[YOUR ACCOUNT] ./httpd #chmod +s ./httpd
然后重新运行服务

根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

0
在Linux(Centos 6或更高版本)中,0到1024端口被保留供系统使用。如果您使用root或特权用户,则可以强制系统绑定到低于1024的任何端口。
我使用非root用户从源代码安装了Apache-2.4,并通过允许使用高于1024的端口(例如8080)并修改http.conf文件来解决了这个问题。将Listen 80更改为Listen 8080。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接