溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux非root用戶程序如何使用小于1024端口

發(fā)布時(shí)間:2021-10-28 14:23:16 來(lái)源:億速云 閱讀:271 作者:小新 欄目:系統(tǒng)運(yùn)維

小編給大家分享一下Linux非root用戶程序如何使用小于1024端口,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

***種方法:

SetUID

為用戶的應(yīng)用程序在執(zhí)行位設(shè)置user ID能夠使程序可以有root權(quán)限來(lái)運(yùn)行,這個(gè)方法讓程序能夠像在root下運(yùn)行有同樣的效果,不過(guò)需要非常小心,這種方法同樣會(huì)帶來(lái)安全風(fēng)險(xiǎn),特別是當(dāng)要執(zhí)行的程序本身存在安全風(fēng)險(xiǎn)。使用的方法是:

chown root.root /path/to/application #使用SetUID chmod u+s /path/to/application

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

既然要使用非root用戶運(yùn)行程序,目的就是要降低程序本身給系統(tǒng)帶來(lái)的安全風(fēng)險(xiǎn),因此,本方法使用的時(shí)候需要特別謹(jǐn)慎。

第二種方法:

CAP_NET_BIND_SERVICE

從2.1開始,Linux內(nèi)核有了能力的概念,這使得普通用戶也能夠做只有超級(jí)用戶才能完成的工作,這包括使用端口1

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

#設(shè)置CAP_NET_BIND_SERVICE setcap cap_net_bind_service =+ep /path/to/application

Note:

1. 這個(gè)方法并不是所有Linux系統(tǒng)通適,內(nèi)核在2.1之前的并沒(méi)有提供,因此你需要檢查要使用此方法所在系統(tǒng)是否支持(Linux must support capacity);

2. 另外需要注意的是,如果要運(yùn)行的程序文件是一個(gè)腳本,這個(gè)方法是沒(méi)有辦法正常工作的(Script won't work)。

第三種方法:

Port Forwarding

如果要運(yùn)行的程序有權(quán)限監(jiān)聽其他端口,那么這個(gè)方法是可以使用的,首先讓程序運(yùn)行在非root帳戶下,并綁定高于1024的端口,在確保能正常工作的時(shí)候,將低端口通過(guò)端口轉(zhuǎn)發(fā),將低端口轉(zhuǎn)到高端口,從而實(shí)現(xiàn)非root運(yùn)行的程序綁定低端口。要使用此方法可以使用下面的方式:

# Enable the IP FORWARD kernel parameter. sysctl -w net.ipv4.ip_forward=1   # 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默認(rèn)是被禁用的),注意,代碼中使用的sysctl設(shè)置是臨時(shí)性設(shè)置,重啟之后將會(huì)被重置,如果要長(zhǎng)久保存,需要在/etc/sysctl.conf文件內(nèi)修改:

# Default value is 0, need change to 1. # net.ipv4.ip_forward = 0 net.ipv4.ip_forward = 1

然后從文件中加載新的配置

# load new sysctl.conf sysctl -p /etc/sysctl.conf   # or sysctl -p # default filename is /etc/sysctl.conf

第二步就是使用iptables的規(guī)則來(lái)實(shí)現(xiàn)端口轉(zhuǎn)發(fā)到程序所在的端口,示例中我們要將80端口轉(zhuǎn)發(fā)到8088。

此種方法能夠比較好的達(dá)到我們的目的,我們的程序可以通過(guò)非root用戶來(lái)運(yùn)行,并能夠?qū)ν馓峁┑投丝谔?hào)的服務(wù)。

第四種方法:

RINETD2

這種方法使用的也是端口轉(zhuǎn)發(fā),此工具可以將本地端口映射到遠(yuǎn)程端口,但此功能對(duì)于我們當(dāng)前的功能來(lái)說(shuō),有點(diǎn)雞肋,畢竟我們新增了一個(gè)額外的程序,這將可能會(huì)增加我們系統(tǒng)的風(fēng)險(xiǎn)性。在此不做推薦。

以上是“Linux非root用戶程序如何使用小于1024端口”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI