解决nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

在 Linux 内核 2.6.20 及更新版本中,非 root 用户无法绑定 1-1023 端口。这些端口被称为"特权端口",通常用于提供系统服务。
普通用户执行nginx -t

nginx: the configuration file /home/app_nginx_access/nginx/conf/nginx.conf syntax is ok
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
nginx: configuration file /home/app_nginx_access/nginx/conf/nginx.conf test failed

80端口权限被拒绝
解决方法:
setcap命令用于在Linux系统中为文件或目录设置特定的capabilities,‌这些capabilities可以控制进程的权限,‌而不需要直接使用root账户执行操作。‌通过这种方式,‌可以提高系统的安全性,‌同时避免直接使用root账户可能带来的安全风险。‌
关于Linux

CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口
CAP_NET_BROADCAST:允许网络广播和多播访问
CAP_NET_ADMIN:允许执行网络管理任务
CAP_NET_RAW:允许使用原始套接字
赋予nginx服务能力
sudo setcap cap_net_bind_service=+ep /home/app_nginx_access/nginx/sbin/nginx
查看服务能力
getcap  /home/app_nginx_access/nginx/sbin/nginx
解除nginx服务能力
setcap -r cap_net_bind_service=+ep /home/app_nginx_access/nginx/sbin/nginx

 注意:

1. 这个方法并不是所有Linux系统通适,内核在2.1之前的并没有提供,因此你需要检查要使用此方法所在系统是否支持;
2. 另外需要注意的是,如果要运行的程序文件是一个脚本,这个方法是没有办法正常工作的。

 

posted @ 2024-07-10 16:38  Armored-forces  阅读(460)  评论(0)    收藏  举报