如果你有一個最新的內核,確實有可能使用它作為非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,將導致不能使用。
參考:
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 文件名