Ubuntu

如何在 setcap 的幫助下在埠 80 上設置遠端埠轉發到我的本地主機?

  • April 11, 2020

當我被 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

引用自:https://unix.stackexchange.com/questions/41451