Me gustaría aceptar conexiones brevemente para el desarrollo cuando estoy en NAT, por lo que intento hacer esto:
$ ssh [email protected] -R 80:localhost:80
Lo que falla porque estoy tratando de vincular un puerto que es demasiado bajo:
Warning: remote port forwarding failed for listen port 80
Así que descubrí que puedo hacer setcap 'cap_net_bind_service=+ep' /my/application
para permitirle escuchar puertos inferiores a 1024. Así que tengo esto en mi crontab de Suders:
@reboot setcap 'cap_net_bind_service=+ep' /usr/sbin/sshd
Pero todavía no me permite enlazar en el puerto 80. ¿Qué estoy haciendo mal? Voy a usar nginx como proxy a 8080 o iptables o algo así, pero aún tengo curiosidad por saber por qué lo que estaba tratando de hacer no funcionó.
Respuesta aceptada:
OpenSSH se negará rotundamente a vincularse a puertos privilegiados a menos que la identificación de usuario del usuario que inició sesión sea 0 (raíz). Las líneas de código relevantes son:
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.");
Fuente:http://www.openssh.com/cgi-bin/cvsweb/src/usr.bin/ssh/serverloop.c?annotate=1.162 líneas 1092-1098
Si tienes curiosidad, pw
es de tipo struct passwd *
y en Linux se define en /usr/include/pwd.h