自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

系統(tǒng) Linux 系統(tǒng)運維
在Linux下,默認(rèn)端口1024下的程序是要在root下才能使用的,在其他用戶下,如果嘗試使用將會報錯。在有的時候,我們可能考慮程序運行在root帳戶下,可能會給Linux系統(tǒng)帶來安全風(fēng)險。那如何能夠讓非root用戶運行的程序能夠?qū)ν鈫⒂眯∮?024的端口呢?

在Linux下,默認(rèn)端口1024下的程序是要在root下才能使用的,在其他用戶下,如果嘗試使用將會報錯。在有的時候,我們可能考慮程序運行在root帳戶下,可能會給Linux系統(tǒng)帶來安全風(fēng)險。那如何能夠讓非root用戶運行的程序能夠?qū)ν鈫⒂眯∮?024的端口呢?本文嘗試給出一些方法: 

[[140984]]

***種方法:

SetUID

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

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

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

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

第二種方法:

CAP_NET_BIND_SERVICE

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

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

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

Note:

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

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

第三種方法:

Port Forwarding

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

  1. # Enable the IP FORWARD kernel parameter. 
  2. sysctl -w net.ipv4.ip_forward=1 
  3.   
  4. # Use iptables rules to redirect packets 
  5. iptables -F -t nat 
  6. iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to:8088 

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

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

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

  1. load new sysctl.conf 
  2. sysctl -p /etc/sysctl.conf 
  3.   
  4. or sysctl -p 
  5. default filename is /etc/sysctl.conf 

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

此種方法能夠比較好的達(dá)到我們的目的,我們的程序可以通過非root用戶來運行,并能夠?qū)ν馓峁┑投丝谔柕姆?wù)。 

第四種方法:

RINETD2

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

參考說明:

1.  Linux capabilities文檔,參見其中CAP_NET_BIND_SERVIC,文中的內(nèi)核是否從2.1開始有這個功能并不完全確定,此信息來自網(wǎng)上。

2.  官網(wǎng)地址:RINETD

責(zé)任編輯:火鳳凰 來源: Mitchell Chu博客
相關(guān)推薦

2018-10-26 16:20:27

PodmanrootLinux

2021-02-17 09:16:58

PodmanLinuxDocker

2011-04-19 16:09:35

LinuxpythonMySQLdb

2020-04-17 08:00:22

Docker命令普通用戶

2010-03-03 14:17:02

Linux內(nèi)核

2020-09-22 11:20:12

UbuntuLinuxroot

2009-12-25 11:40:29

Linux root

2009-10-23 08:41:14

Linux系統(tǒng)操作系統(tǒng)Grub

2021-07-14 14:20:22

root命令Linux

2010-01-06 09:35:55

2010-05-27 14:42:40

Linux查看端口

2014-08-27 11:22:46

LinuxSFTP

2009-09-03 09:08:08

Linuxroot密碼遺忘

2015-08-17 10:16:00

CentOSDocker命令root

2010-02-23 15:57:49

CentOS Orac

2012-10-09 11:01:18

IBMdw

2009-07-06 17:18:36

root帳號Linux郵件

2022-12-14 17:26:43

2013-12-23 13:24:47

Linuxauthbind命令
點贊
收藏

51CTO技術(shù)棧公眾號