提问人:Nishu Tayal 提问时间:6/13/2013 更新时间:11/17/2023 访问量:199402
httpd 服务器未启动: (13)权限被拒绝: make_sock: 无法绑定到地址 [::]:88
httpd Server not started: (13)Permission denied: make_sock: could not bind to address [::]:88
问:
我正在尝试在 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 查询了一下,但没有帮助。
任何帮助将不胜感激。
答:
似乎您不是以“root”身份运行它。只有 root 可以绑定到此端口 (80)。 在 conf/httpd.conf 文件“侦听”行中检查您的配置,并将端口更改为更高的端口。
评论
sudo
USER X
在终端上,以 root 权限运行以下命令:
sudo /etc/init.d/apache2 start
您必须是root才能启动Web服务器,否则将收到类似的错误。
评论
由于缺少 SELinux 权限,我碰巧遇到了这个问题。默认情况下,SELinux 只允许 apache/httpd 绑定到以下端口:
80, 81, 443, 488, 8008, 8009, 8443, 9000
因此,使用默认的 SELinux 配置,绑定到我的 -configured HTTP 端口和 -configured 的 TLS/SSL 端口将失败。httpd.conf
Listen 88
config.d/ssl.conf
Listen 8445
为了解决我的问题,我不得不将端口 88 和 8445 添加到我的系统的 SELinux 配置中:
- 安装工具:
semanage
sudo yum -y install policycoreutils-python
- 允许端口 88 用于 httpd:
sudo semanage port -a -t http_port_t -p tcp 88
- 允许端口 8445 用于 httpd:
sudo semanage port -a -t http_port_t -p tcp 8445
评论
在我的 centos 6.7 安装中,我不仅遇到使用 root 启动 httpd 的问题,而且使用 xauth 也遇到问题(获取底层权限被拒绝错误)/usr/bin/xauth: timeout in locking authority file /.Xauthority
# setenforce 0
修复了这两个问题。
评论
semanage
这是对阿卜杜勒在此线程中某处的回答的补充:
我不得不修改而不是添加端口
semanage port -m -t http_port_t -p tcp 5000
因为我在添加端口时收到此错误
ValueError: Port tcp/5000 already defined
评论
首先杀死所有挂起的 httpd 实例,然后尝试重新启动 Apache:
service httpd restart
从 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...
就我而言,我尝试先使用端口 88,即使这样 httpd 也不会启动。
我使用了以下命令,即修改而不是添加,正如其中一位用户所建议的那样,并且能够运行 httpd。
semanage port -a -t http_port_t -p tcp 88
禁用 SELinux
暂时禁用 SELinux
sudo setenforce 0
重新启动 httpd 服务
service httpd restart
永久禁用 SELinux(重新启动后)
vi /etc/selinux/config
添加行并保存
SELINUX=disabled
评论
grep -a AVC /var/log/audit/audit.log | grep httpd | audit2allow -a -M myhttpd
semodule -i myhttpd.pp
在 Linux(Centos 6 或更高版本)中,从 0 到 1024 的端口保留供系统使用。 如果您使用 root 用户或特权用户,则可以强制系统绑定到低于 1024 的任何端口。
我使用非 root 用户从源代码安装了 Apache-2.4,并通过允许高于 1024(ex:8080) 的端口和修改的 http.conf 文件解决了这个问题。张 听 80 听 8080
我在尝试在 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 得到解决。
我编辑,设置,然后重新启动;然后它奏效了。
或者,您可以运行 ;您不需要重新启动,但一旦使用过。/etc/selinux/config
SELINUX=disabled
setenforce 0
只是为了添加有关此错误的更多信息,我在 CentOS 8.2 上遇到了类似的错误:
sudo journalctl -xe
错误: 权限被拒绝: AH00072: make_sock: 无法绑定到地址 0.0.0.0:8081
因此,我使用了 Abdull 和 Ulrich-Lorenz Schlüter 的命令如下:
安装适用于 CentOS 8.2 的 semanage 工具:(更多信息:https://www.cyberciti.biz/faq/redhat-install-semanage-selinux-command-rpm
sudo yum -y install policycoreutils-python-utils
)允许端口 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 所提到的。
- 然后:
sudo systemctl start httpd
现在它工作正常。
禁用 SELINUX 后,任何端口都是可用的。
sudo -s;
setenforce 0;
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config;
这里的实际解决方案是修改现有端口(如果存在)。例如,当:
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 是一个潜在的安全漏洞,不要在生产实例上这样做!
检查安全状态
获取强制执行
检查防火墙状态
防火墙-cmd --zone=public --list-all
检查执行权限
转到 httpd/bin
#chown root:[您的帐户] ./httpd
#chmod +s ./httpd
并重新运行服务
评论