¿Cómo puedo permitir que un usuario no root use puertos inferiores a 1024?

2

Estoy trabajando con una aplicación que utiliza un puerto por debajo de 1024 porque originalmente estaba destinado a ejecutarse como root. Me gustaría depurar la aplicación en un IDE que abro como yo mismo (usuario no root) pero tengo sudoprivilegios. Tengo razones contra la depuración remota, así como también para abrir el IDE en sudo.

Entonces, la única manera de hacer esto sería permitir que un usuario no root use puertos o un puerto por debajo de 1024. ¿Se puede hacer eso y cómo?

anfibio
fuente

Respuestas:

3

Si no puede cambiar su aplicación para usar un puerto superior a 1024, la forma más fácil sería tomar el puerto que está utilizando y asignarlo a un puerto superior a 1024.

Puede hacerlo utilizando el firewall, ipfwes la herramienta para configurar el firewall. También puede hacerlo usando 'nc', a veces conocido como ncat o netcat.

Hay una pregunta aquí que da más detalles. El hilo también menciona "AuthBind", que es un paquete de código abierto que permite justamente esto: abrir puertos por debajo de 1024 sin otorgar privilegios de root.

Tony Williams
fuente
Me di cuenta de mi aplicación para utilizar un puerto por encima de 1024 pero requeriría cambios de configuración entre mi entorno local y el código fuente procedente del depósito de VC - es por eso que estoy tratando de evitarlo
amphibient
No había pensado en el ipfwmétodo, definitivamente así mejor que la solución netcat para no introducir una complejidad adicional con el manejo de la conexión.
drfrogsplat
3

Advertencia: si su depuración solo requiere una única conexión, y no necesita depurar específicamente eventos de conexión / desconexión ...

Podría usar netcat(o ncen algunos sistemas).

Configura su aplicación para abrir, digamos, el puerto 12345 (que puede abrir el usuario). Luego usa netcat para abrir, digamos, el puerto 123 (solo para usuarios privilegiados) y reenviar los datos al puerto 12345.

# sudo nc -l 123 | nc localhost 12345

La primera mitad del comando ejecuta netcat ncy le dice que escuche -len el puerto 123. La tubería redirige los datos de la primera instancia de netcat a otra. El segundo comando se conecta a su aplicación y reenvía los datos.

Tenga en cuenta que tan pronto como ejecute este comando, la segunda instancia de netcat se conectará a su aplicación. Si su aplicación va a comenzar a enviar datos de inmediato, querrá conectar a su cliente muy rápidamente y deberá tener cuidado con la forma en que se almacenan los datos.

Si desea que el cliente pueda desconectarse y volver a conectarse sin tener que reiniciar netcat, ejecute en su lugar:

# sudo nc -lk 123 | nc localhost 12345

El -kle dice a netcat que siga ejecutándose si el cliente se desconecta del puerto 123.

Nuevamente, hay limitaciones con este método, ya que estás cediendo en gran medida el control del lado de la conexión al hacer que netcat lo maneje por ti. Por otro lado, es muy rápido y fácil de configurar y desmontar, si eso es todo lo que necesita.

drfrogsplat
fuente
Me di cuenta de mi aplicación para utilizar un puerto por encima de 1024 pero requeriría cambios de configuración entre mi entorno local y el código fuente procedente del depósito de VC - es por eso que estoy tratando de evitarlo
amphibient
O la adición de un argumento de línea de comandos que anula el puerto configurado o qué archivo de configuración se utiliza. Los IDE generalmente pueden ejecutarse con una línea de comando específica, que de otro modo no usaría cuando se ejecuta como el servicio real.
drfrogsplat