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