ubuntu用非root用户 无法启用80端口web服务
需求 conda python
默认情况下,1024以下的端口,只有root用户可以使用,例如想用python3启动一个在80端口上的web服务,只能切换到root用户再启动。如果想不用root用户启动,怎么办呢?
解决办法
记录一种测试了的办法:
Linux 内核从 2.6.24 版本开始就有了能力的概念,这使得普通用户也能够做只有超级用户才能完成的工作。
使用 setcap 命令让指定程序拥有绑定端口的能力,这样即使程序运行在普通用户下,也能够绑定到 1024 以下的特权端口上。
# 给指定程序设置 CAP_NET_BIND_SERVICE 能力
$ sudo setcap cap_net_bind_service=+eip /home/xda/miniconda3/bin/python3.9
注意赋给的程序目标不能是软链接
注意 conda的python一般都是软链接
比如:
/home/xda/miniconda3/bin/python
很可能是指向
/home/xda/miniconda3/bin/python3.9的
如果使用的python路径
/home/xda/miniconda3/bin/python
给
setcap cap_net_bind_service=+eip
会报错的。