Linux中如何讓普通用戶使用小於1024的端口

本文章內容:

Linux中如何讓普通用戶使用小於1024的端口。

參考文章:http://www.unixlinux.online/unixlinux/linuxgl/linuxwh/201703/73815.html、https://cloud.tencent.com/developer/article/1526429

 

在Linux系統中,一般情況下,小於1024的端口是不對沒有root的Linux普通用戶開放的。但是還是有一些技巧能夠讓沒有root的用戶使用小於1024的端口的。本文就來介紹一下Linux中如何讓普通用戶使用1024以下端口。

方法一:SetUID

給用戶的應用程序在執行位設置用戶 ID 能夠使程序可以以 root 權限來運行,這個方法讓程序能夠像在 root 下運行一樣,不過需要非常小心,這種方法同樣會帶來安全風險,特別是當要執行的程序本身存在安全風險時。

使用的方法是:

1. chown root.root /path/to/application

2. 使用SetUID

chmod u+s /path/to/application

我們可以看到在系統下,/usr/bin/passwd這種文件,就使用了SetUID,使得每個系統能的用戶都能用passwd來修改密碼,這是要修改/etc/passwd的文件(而這個只有root有權限)。

既然要使用非root用戶運行程序,目的就是要降低程序本身給系統帶來的安全風險,因此,本方法使用的時候需要特別謹慎。

方法二:CAP_NET_BIND_SERVICE

從 2.1 版本開始,Linux 內核有了能力的概念,這使得普通用戶也能夠做只有超級用戶才能完成的工作,這包括使用端口。

獲取CAP_NET_BIND_SERVICE能力,即使服務程序運行在非root帳戶下,也能夠banding到低端口。使用的方法:

1. 設置CAP_NET_BIND_SERVICE

setcap cap_net_bind_service=+ep /path/to/application

注意:

1. 這個方法並不是所有Linux系統通適,內核在2.1之前的並沒有提供,因此你需要檢查要使用此方法所在系統是否支持。

2. 另外需要注意的是,如果要運行的程序文件是一個腳本,這個方法是沒有辦法正常工作的。

方法三:Port Forwarding

如果要運行的程序有權限監聽其他端口,那麼這個方法是可以使用的,首先讓程序運行在非root帳戶下,並綁定高於1024的端口,在確保能正常工作的時候,將低端口通過端口轉發,將低端口轉到高端口,從而實現非root運行的程序綁定低端口。要使用此方法可以使用下面的方式:

1. Enable the IP FORWARD kernel parameter.

sysctl -w net.ipv4.ip_forward=1

2. Use iptables rules to redirect packets.

iptables -F -t nat
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to:8088

第一步使用sysctl確保啟用IP FORWARD功能(此功能在Red Hat/CentOS默認是被禁用的),注意,代碼中使用的sysctl設置是臨時性設置,重啟之後將會被重置,如果要長久保存,需要在/etc/sysctl.conf文件內修改:

net.ipv4.ip_forward =1

然後從文件中加載新的配置:

sysctl -p /etc/sysctl.conf

sysctl -p

第二步就是使用iptables的規則來實現端口轉發到程序所在的端口,示例中我們要將80端口轉發到8088。

此種方法能夠比較好的達到我們的目的,我們的程序可以通過非root用戶來運行,並能夠對外提供低端口號的服務。

方法四:RINETD

這種方法使用的也是端口轉發,此工具可以將本地端口映射到遠程端口,但此功能對於我們當前的功能來說,有點雞肋,畢竟我們新增了一個額外的程序,這將可能會增加我們系統的風險性。在此不做推薦。

以上就是Linux中如何讓普通用戶使用小於1024端口的方法了,前面三種方法都可以不用root而且沒有什麼風險,大家可以放心使用。