Ubuntu
如何在 setcap 的幫助下在埠 80 上設置遠端埠轉發到我的本地主機?
當我被 NAT 時,我想簡單地接受連接以進行開發,所以我正在嘗試這樣做:
$ ssh ubuntu@example.org -R 80:localhost:80
當我試圖綁定一個低埠時失敗了:
Warning: remote port forwarding failed for listen port 80
所以我發現我可以
setcap 'cap_net_bind_service=+ep' /my/application
讓它監聽低於 1024 的埠。所以我在我的 suders crontab 中有這個:@reboot setcap 'cap_net_bind_service=+ep' /usr/sbin/sshd
但它仍然不允許我綁定埠 80。我做錯了什麼?我只是要使用 nginx 代理到 8080 或 iptables 或其他東西,但我仍然很好奇為什麼我試圖做的事情沒有奏效。
OpenSSH 將完全拒絕綁定到特權埠,除非登錄使用者的使用者 ID 為 0(root)。相關的程式碼行是:
if (!options.allow_tcp_forwarding || no_port_forwarding_flag || (!want_reply && listen_port == 0) || (listen_port != 0 && listen_port < IPPORT_RESERVED && pw->pw_uid != 0)) { success = 0; packet_send_debug("Server has disabled port forwarding.");
來源:http ://www.openssh.com/cgi-bin/cvsweb/src/usr.bin/ssh/serverloop.c?annotate= 1.162 1092-1098行
如果你很好奇,
pw
它的類型struct passwd *
和在 linux 上的定義是/usr/include/pwd.h