linux對於非root權限用戶不能使用1024以下的端口,對於一些服務,過高的權限,會帶來一定的風險。那么對於低權限的用戶如何對外開放1024以下的端口。我這里找到幾種辦法並且親測可行
首先搭建環境centos7 賬戶tengine沒有sudo 權限
1.nginx 等軟件做反向代理
反向代理不說了。網上以查到
2.iptables端口轉發
首先程序綁定1024以上的端口,然后root權限下做轉發注意有些系統需要手動開啟IP FORWARD功能
vi /etc/sysctl.conf #修改 net.ipv4.ip_forward = 1 #重新加載 sysctl -p /etc/sysctl.conf

3. setuid
root賬戶下執行
chown root:root nginx chmod 4755 nginx

從圖片可以看出來nginx可以運行,但是主進程仍然是以root權限運行,這樣並不安全。
4.CAP_NET_BIND_SERVICE
從 2.1 版本開始,Linux 內核有了能力的概念,這使得普通用戶也能夠做只有超級用戶才能完成的工作,這包括使用端口。
獲取CAP_NET_BIND_SERVICE能力,即使服務程序運行在非root帳戶下,也能夠banding到低端口。使用的方法:
root賬戶下執行
setcap cap_net_bind_service=+eip /home/tengine/nginx/tengine/sbin/nginx
切換到tengine賬戶下
信息如下
[root@centos7 sbin]# setcap cap_net_bind_service=+eip /home/tengine/nginx/tengine/sbin/nginx [root@centos7 sbin]# su tengine [tengine@centos7 sbin]$ stat nginx 文件:"nginx" 大小:6054330 塊:11832 IO 塊:4096 普通文件 設備:fd00h/64768d Inode:397136 硬鏈接:1 權限:(0755/-rwxr-xr-x) Uid:( 1001/ tengine) Gid:( 1001/ tengine) 最近訪問:2016-10-11 18:43:05.402239835 +0800 最近更改:2016-10-11 18:25:47.273183401 +0800 最近改動:2016-10-11 18:48:23.084257104 +0800 創建時間:- [tengine@centos7 sbin]$ ./nginx [tengine@centos7 sbin]$ ps -aux| grep nginx tengine 18014 0.0 0.1 45500 1124 ? Ss 18:49 0:00 nginx: master process ./nginx tengine 18015 0.0 0.1 45960 1596 ? S 18:49 0:00 nginx: worker process tengine 18017 0.0 0.0 112664 984 pts/0 R+ 18:49 0:00 grep --color=auto nginx [tengine@centos7 sbin]$
最后別忘記怎么清除這個能力
setcap -r nginx