非root用戶使用1024以下端口


 
如果你有一個最新的內核,確實有可能使用它作為非root用戶啟動服務,但綁定低端口。最簡單有效的辦法是:
#setcap 'cap_net_bind_service=+ep' /path/to/program

 執行了該命令后,該文件程序將會具有CAP_NET_BIND_SERVICE功能,setcap在debian軟件包libcap2-bin中,至於具體的功能感興趣可以自己查閱。

現在要注意的是:

  1. 您的內核版本至少為2.6.24

  2.文件不能是腳本。也就是說你必須將CAP_NET_BIND_SERVICE功能應用到可執行文件本身,而不是腳本中指向的其他應用。如果賦予了該文件CAP_NET_BIND_SERVICE能力,其他應用濫用用這個文件就可能在安全性上造成隱患。

  3.如果你的程序使用自己的... / lib /的共享庫,而Linux將在任何具有像setcap或suid這樣的特權提升的程序上禁用LD_LIBRARY_PATH,將導致不能使用。

 

參考:

https://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-on-linux

LD_LIBRARY_PATH作用 https://www.douban.com/note/520942662/

端口轉發、setuid,在root目錄下啟動應用 https://www.cnblogs.com/fatt/p/5019322.html

 

應用實例:

nginx配置文件,監聽80端口

 

直接在非root用戶下啟動nginx服務,發現啟動不了,提示非root用戶沒有使用80端口的權利。

使用setcap
在root用戶下執行命令:
#setcap cap_net_bind_service=+eip
 
提示:注意文件的顏色變化
 
再次啟動nginx服務:
 注:如果不使用了,使用如下命令即可:
#setcap -r 文件名

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM