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

httpd Server not started: (13)Permission denied: make_sock: could not bind to address [::]:88

提问人:Nishu Tayal 提问时间:6/13/2013 更新时间:11/17/2023 访问量:199402

问:

我正在尝试在 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 查询了一下,但没有帮助。

任何帮助将不胜感激。

Apache CentOS

评论

4赞 superEb 10/18/2013
将端口添加到 SELinux 对我有用,所以感谢您的链接。
0赞 MTMDev 2/12/2021
编辑 conf 以将 Apache 使用的端口更改为大于 1024 的数字,例如 8080。我在 Windows 中使用 Ubuntu v20 并像以下方式进行编辑:sudo vi /etc/apache2/ports.conf

答:

56赞 Igor Zilberman 7/9/2013 #1

似乎您不是以“root”身份运行它。只有 root 可以绑定到此端口 (80)。 在 conf/httpd.conf 文件“侦听”行中检查您的配置,并将端口更改为更高的端口。

评论

2赞 Andrew 3/18/2018
你可以使用sudo
0赞 Igor Zilberman 3/25/2018
@Andrew,不,我不能,没有特权
0赞 Genarito 6/8/2023
谢谢!就我而言,我正在使用 Dockerfile 中的命令,这是问题的原因。注释它再次将根设置为默认用户,一切正常USER X
8赞 Sohail xIN3N 2/23/2014 #2

在终端上,以 root 权限运行以下命令:

sudo /etc/init.d/apache2 start

您必须是root才能启动Web服务器,否则将收到类似的错误。

评论

0赞 vimal krishna 8/24/2015
true 表示需要 root 用户访问权限。所以 sudo 服务 apache2 restart 也会像你用 sudo /etc/init.d/apache2 start 编写的那样重新启动
135赞 Abdull 3/17/2014 #3

由于缺少 SELinux 权限,我碰巧遇到了这个问题。默认情况下,SELinux 只允许 apache/httpd 绑定到以下端口:

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

因此,使用默认的 SELinux 配置,绑定到我的 -configured HTTP 端口和 -configured 的 TLS/SSL 端口将失败。httpd.confListen 88config.d/ssl.confListen 8445

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

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

评论

0赞 Stephen Washburn 5/17/2014
我认为我在Mac OS X(Darwin,Unix变体)上遇到了同样的问题。在端口 88 上侦听似乎可以正常重启并且没有抛出任何错误,但我无法在该端口上的浏览器中收到任何响应。一旦我把它改成 81,它就开始工作了。
0赞 e18r 8/4/2016
在 Fedora 24 上使用 dnf install policycoreutils-python-utils
0赞 Tilo 6/14/2018
请参阅此处,了解允许非 root 用户绑定某些端口: superuser.com/a/892391/216033
1赞 JCm 9/27/2018
-m 选项(修改)适用于我已经为其他 SELINUX 策略定义的端口。
0赞 Andrew 2/16/2022
@Abdull,此 sol 特定于基于 rpm 的操作系统。 在 Debian 或 Ubuntu 上做什么
7赞 Sebas 6/5/2016 #4

在我的 centos 6.7 安装中,我不仅遇到使用 root 启动 httpd 的问题,而且使用 xauth 也遇到问题(获取底层权限被拒绝错误)/usr/bin/xauth: timeout in locking authority file /.Xauthority

# setenforce 0

修复了这两个问题。

评论

0赞 Hafenkranich 10/20/2018
这解决了我在流浪汉驱动的开发服务器上的 Centos 7 上的问题,该服务器在另一个端口上运行 apache2。但请记住,您实际上是在禁用 SELinux——这意味着禁用安全功能。在生产服务器上,最好使用添加端口,如@Abdull所述semanage
20赞 Ulrich-Lorenz Schlüter 6/13/2017 #5

这是对阿卜杜勒在此线程中某处的回答的补充:

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

semanage port -m -t http_port_t -p tcp 5000

因为我在添加端口时收到此错误

ValueError: Port tcp/5000 already defined

评论

0赞 Broken Arrow 5/12/2023
这对我有用,虽然我添加了 SELinux 策略并且取得了成功,但我仍然需要这样做才能使其工作,从我的生活:(中吃掉了 30 分钟
-5赞 Deven 10/12/2017 #6

首先杀死所有挂起的 httpd 实例,然后尝试重新启动 Apache:

service httpd restart
-1赞 Chandra 5/24/2018 #7

从 root 用户或 sudo 开始,它工作正常,这是示例输出:

[ec2-user@ip-172-31-12-164 ~]$ service httpd start
Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
                                                           **[FAILED]**
[ec2-user@ip-172-31-12-164 ~]$ sudo service httpd start
Starting httpd:                                            [  OK  ]
[ec2-user@ip-172-31-12-164 ~]$ sudo service httpd status
httpd (pid  3077) is running...
3赞 SanjayMD 7/1/2018 #8

就我而言,我尝试先使用端口 88,即使这样 httpd 也不会启动。

我使用了以下命令,即修改而不是添加,正如其中一位用户所建议的那样,并且能够运行 httpd。

semanage port -a -t http_port_t -p tcp 88
6赞 Jonny 11/26/2018 #9

禁用 SELinux

暂时禁用 SELinux

sudo setenforce 0

重新启动 httpd 服务

service httpd restart

永久禁用 SELinux(重新启动后)

vi /etc/selinux/config

添加行并保存

SELINUX=disabled

评论

0赞 Ulrich-Lorenz Schlüter 5/25/2023
我建议禁用 SELinux,启动 Web 服务器并启用您的 myhttpd 策略,然后再次启用 SELinux。grep -a AVC /var/log/audit/audit.log | grep httpd | audit2allow -a -M myhttpdsemodule -i myhttpd.pp
0赞 BongSey 10/17/2019 #10

在 Linux(Centos 6 或更高版本)中,从 0 到 1024 的端口保留供系统使用。 如果您使用 root 用户或特权用户,则可以强制系统绑定到低于 1024 的任何端口。

我使用非 root 用户从源代码安装了 Apache-2.4,并通过允许高于 1024(ex:8080) 的端口和修改的 http.conf 文件解决了这个问题。张 听 80 听 8080

0赞 Nepolean Luwang 1/31/2020 #11

我在尝试在 RHEL 7.5 中启动用于 openstack 火车安装的 httpd 服务时也遇到了类似的错误。

-- Unit httpd.service has begun starting up.
Jan 31 10:11:16 controller httpd[1631]: (13)Permission denied: AH00072: make_sock: could not bind to address 10.0.0.11:5000
Jan 31 10:11:16 controller httpd[1631]: no listening sockets available, shutting down
Jan 31 10:11:16 controller httpd[1631]: AH00015: Unable to open logs
Jan 31 10:11:16 controller systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Jan 31 10:11:16 controller kill[1632]: kill: cannot find process ""
Jan 31 10:11:16 controller systemd[1]: httpd.service: control process exited, code=exited status=1
Jan 31 10:11:16 controller systemd[1]: Failed to start The Apache HTTP Server.
-- Subject: Unit httpd.service has failed

解决方案:它通过禁用 SElinux 得到解决。

0赞 FZZF 6/4/2020 #12

我编辑,设置,然后重新启动;然后它奏效了。 或者,您可以运行 ;您不需要重新启动,但一旦使用过。/etc/selinux/configSELINUX=disabledsetenforce 0

0赞 Alessandro C. 2/23/2022 #13

只是为了添加有关此错误的更多信息,我在 CentOS 8.2 上遇到了类似的错误:

sudo journalctl -xe

错误: 权限被拒绝: AH00072: make_sock: 无法绑定到地址 0.0.0.0:8081

因此,我使用了 Abdull 和 Ulrich-Lorenz Schlüter 的命令如下:

  1. 安装适用于 CentOS 8.2 的 semanage 工具:(更多信息:https://www.cyberciti.biz/faq/redhat-install-semanage-selinux-command-rpmsudo yum -y install policycoreutils-python-utils )

  2. 允许端口 8081 用于 httpd:sudo semanage port -a -t http_port_t -p tcp 8081

我得到了以下输出:ValueError:端口 tcp/8081 已定义

所以,我跑了:

sudo semanage port -m -t http_port_t -p tcp 8081

正如 Ulrich-Lorenz Schlüter 所提到的。

  1. 然后:sudo systemctl start httpd

现在它工作正常。

1赞 geekyouth 11/21/2022 #14

禁用 SELINUX 后,任何端口都是可用的。

sudo -s;  
setenforce 0;  
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config;  

0赞 Dawid Pura 2/17/2023 #15

这里的实际解决方案是修改现有端口(如果存在)。例如,当:

semanage port -a -t http_port_t -p tcp 88

最终得到:

ValueError: Port tcp/88 already defined

那么端口很可能具有不同的类型,要对其进行修改,只需使用:

semanage port -m -t http_port_t -p tcp 88

然后,您需要通过 if 已在您的区域中关闭来打开该端口。firewall-cmd

另外:禁用 SELinux 是一个潜在的安全漏洞,不要在生产实例上这样做!

0赞 Iron Mask 10/12/2023 #16
  1. 检查安全状态

    获取强制执行

  2. 检查防火墙状态

    防火墙-cmd --zone=public --list-all

  3. 检查执行权限

    转到 httpd/bin

    #chown root:[您的帐户] ./httpd

    #chmod +s ./httpd

并重新运行服务

评论

0赞 Community 10/20/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。