我正在尝试在 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,但没有帮助。
任何帮助将不胜感激。
我碰巧遇到了这个问题,因为缺少 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 配置中:
semanage
工具:sudo yum -y install policycoreutils-python
sudo semanage port -a -t http_port_t -p tcp 88
sudo semanage port -a -t http_port_t -p tcp 8445
似乎您不是以“root”身份运行它。只有 root 可以绑定到此端口 (80)。 检查conf/httpd.conf 文件中的配置,Listen 行并将端口更改为更高的端口。
这是对 Abdull 在此线程中某处的答案的补充:
我必须修改而不是添加端口
semanage port -m -t http_port_t -p tcp 5000
因为我在添加端口时遇到此错误
ValueError: Port tcp/5000 already defined
在终端以 root 权限运行此命令:
sudo /etc/init.d/apache2 start
您必须是 root 才能启动网络服务器,否则您会收到类似的错误。
在安装 centos 6.7 时,我不仅在使用 root 启动 httpd 时遇到问题,而且在使用 xauth 时也遇到问题(出现
/usr/bin/xauth: timeout in locking authority file /.Xauthority
并出现底层权限被拒绝错误)
# setenforce 0
解决了这两个问题。
禁用SELinux
暂时禁用 SELinux
sudo setenforce 0
重启httpd服务
service httpd restart
永久禁用 SELinux(重新启动后)
vi /etc/selinux/config
添加行并保存
SELINUX=disabled
就我而言,我尝试首先使用端口 88,即使如此,httpd 也不会启动。
我使用了以下命令,即按照一位用户的建议进行修改而不是添加,并且能够运行 httpd。
semanage port -a -t http_port_t -p tcp 88
禁用SELINUX后,任何端口都可用。
sudo -s;
setenforce 0;
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config;
在 Linux(Centos 6 或更高版本)中,从 0 到 1024 的端口保留供系统使用。 如果您使用 root 或特权用户,您可以强制系统绑定到任何低于 1024 的端口。
我使用非 root 用户从源代码安装了 Apache-2.4,并通过允许高于 1024(例如:8080)的端口并修改了 http.conf 文件解决了这个问题。畅听80改为听8080
我在 RHEL 7.5 中尝试启动 httpd 服务以进行 openstack train 安装时也遇到了类似的错误。
-- 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工具:
sudo yum -y install policycoreutils-python-utils
(更多信息:https://www.cyberciti.biz/faq/redhat-install-semanage-selinux-command-rpm)
允许 httpd 使用端口 8081:
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
现在一切正常。
这里实际的解决方案是修改现有端口(如果存在)。例如,当:
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
然后,如果您所在的区域已关闭该端口,则需要通过
firewall-cmd
打开该端口。
另外:禁用 SELinux 是一个潜在的安全漏洞,请勿在生产实例上执行此操作!
检查安全状态
获得力量
检查防火墙状态
firewall-cmd --zone=public --list-all
检查执行权限
转到httpd/bin
#chown root:[您的帐户] ./httpd #chmod +s ./httpd
从 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...
首先杀死所有挂起的httpd实例,然后尝试重新启动Apache:
service httpd restart