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
 
会报错的。

0 个评论

要回复文章请先登录注册