如何讓 Linux 下非 root 使用者程式使用小於 1024 埠
在 Linux 下,預設情況下1024 以下的埠是要在 root 下才能使用的,在其他使用者下,如果嘗試使用將會報錯。在有的時候,我們可能考慮程式執行在 root 帳戶下,但這可能會給 Linux 系統帶來安全風險。那如何能夠讓非 root 使用者執行的程式能夠對外啟用小於 1024 的埠呢?
本文嘗試給出一些方法:
(題圖來自: wordpress.com)
第一種方法:SetUID
給使用者的應用程式在執行位設定使用者 ID 能夠使程式可以以 root 許可權來執行,這個方法讓程式能夠像在 root 下執行一樣,不過需要非常小心,這種方法同樣會帶來安全風險,特別是當要執行的程式本身存在安全風險時。
使用的方法是:
chown root.root /path/to/application #使用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到低埠。使用的方法:
# 設定CAP_NET_BIND_SERVICE setcap cap_net_bind_service =+ep /path/to/application
Note:
1. 這個方法並不是所有Linux系統通適,核心在2.1之前的並沒有提供,因此你需要檢查要使用此方法所在系統是否支援;
2. 另外需要注意的是,如果要執行的程式檔案是一個指令碼,這個方法是沒有辦法正常工作的。
第三種方法:Port Forwarding
如果要執行的程式有許可權監聽其他埠,那麼這個方法是可以使用的,首先讓程式執行在非root帳戶下,並繫結高於1024的埠,在確保能正常工作的時候,將低埠通過埠轉發,將低埠轉到高階口,從而實現非root執行的程式繫結低埠。要使用此方法可以使用下面的方式:
# 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預設是被禁用的),注意,程式碼中使用的sysctl設定是臨時性設定,重啟之後將會被重置,如果要長久儲存,需要在/etc/sysctl.conf檔案內修改:
# 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的規則來實現埠轉發到程式所在的埠,示例中我們要將80埠轉發到8088。
此種方法能夠比較好的達到我們的目的,我們的程式可以通過非root使用者來執行,並能夠對外提供低埠號的服務。
第四種方式:RINETD
這種方法使用的也是埠轉發,此工具可以將本地埠對映到遠端埠,但此功能對於我們當前的功能來說,有點雞肋,畢竟我們新增了一個額外的程式,這將可能會增加我們系統的風險性。在此不做推薦。
相關文章
- linux下 如何切換到root使用者Linux
- linux 非root使用者原始碼安裝Linux原始碼
- 如何在Linux 讓Telnet root使用者可以登入Linux
- Linux下建立root/普通使用者Linux
- EBS R12中修改apache對應的埠為1024以下(80)並使用非root開啟Apache
- Linux中如何啟用root使用者Linux
- Linux環境下非root使用者離線安裝Python及相關庫LinuxPython
- Ambari非root使用者安裝步驟
- Ubuntu Linux中如何啟用root使用者UbuntuLinux
- linux禁止root使用者直接登入sshd並修改預設埠Linux
- 給非 root 使用者新增 docker 使用許可權Docker
- 解決非root使用者使用docker的辦法Docker
- Docker非root使用者修改/etc/hosts檔案Docker
- Linux下快速重置MySQL使用者(root)密碼方法LinuxMySql密碼
- 用非root使用者啟動Apache|Nginx的方法ApacheNginx
- LINUX下使用指令碼直接執行SQLPLUS命令(root使用者下)Linux指令碼SQL
- 關於MySQL下修改root使用者密碼的解決MySql密碼
- linux 禁止普通使用者su到root使用者Linux
- 如何在 Linux 中建立非登入使用者?Linux
- Linux下修改ssh埠和禁止root遠端登入Linux
- Kali Linux快速切換root使用者Linux
- Linux系統root使用者密碼忘記如何處理Linux密碼
- 小程式引導使用者下載APPAPP
- 單使用者模式下修改root密碼模式密碼
- 非root使用者暴力法解決選擇性使用兩個cudnnDNN
- linux qt程式root使用者執行,無法輸入中文LinuxQT
- IOError: [Errno 13] Permission denied 解決:linux下python安裝並使用非root模組ErrorLinuxPython
- 微信小程式,使用button元件讓使用者主動登陸方式。微信小程式元件
- mysql如何修改root使用者的密碼MySql密碼
- mysql 8 如何重置 root 使用者密碼MySql密碼
- LINUX下非oracle使用者執行sqlplus問題LinuxOracleSQL
- 備忘Linux下非root使用者實現crontab+rsync資料同步許可權問題解決辦法Linux
- RAC OCSSD程式被KILL引起系統重啟--非root使用者也能重啟OSCSS
- linux 下根據埠kill 程式Linux
- root使用者下設定N重密碼密碼
- Linux禁止非WHEEL使用者使用SU命令Linux
- linux下檢視程式佔用埠和埠占用程式命令Linux
- 修改root使用者密碼為root密碼