Vorrei accettare brevemente le connessioni per lo sviluppo quando sono NATed, quindi sto tentando di farlo:
$ ssh [email protected] -R 80:localhost:80
Che non riesce mentre sto cercando di associare una porta troppo bassa:
Warning: remote port forwarding failed for listen port 80
Quindi ho scoperto che posso fare setcap 'cap_net_bind_service=+ep' /my/application
per consentirgli di ascoltare le porte inferiori a 1024. Quindi ho questo nel mio crontab suders:
@reboot setcap 'cap_net_bind_service=+ep' /usr/sbin/sshd
Ma non mi consente ancora di collegarmi alla porta 80. Cosa sto facendo di sbagliato? Userò semplicemente nginx per proxy su 8080 o iptables o qualcosa del genere, ma sono ancora curioso di sapere perché quello che stavo cercando di fare non ha funzionato.
Risposta accettata:
OpenSSH rifiuterà definitivamente di collegarsi a porte privilegiate a meno che l'ID utente dell'utente che ha effettuato l'accesso non sia 0 (root). Le righe di codice rilevanti sono:
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.");
Fonte:http://www.openssh.com/cgi-bin/cvsweb/src/usr.bin/ssh/serverloop.c?annotate=1.162 righe 1092-1098
Se sei curioso, pw
è di tipo struct passwd *
e su Linux è definito in /usr/include/pwd.h