setcap 'cap_net_bind_service=+ep' /path/to/program
esto funcionará para procesos específicos. Pero para permitir que un usuario en particular se vincule a puertos por debajo de 1024, deberá agregarlo a sudoers.
Eche un vistazo a esta discusión para obtener más información.
(Algunos de estos métodos se han mencionado en otras respuestas; doy varias opciones posibles en orden aproximado de preferencia).
Puede redirigir el puerto bajo a un puerto alto y escuchar en el puerto alto.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080
Puede iniciar su servidor como raíz y eliminar los privilegios después de que haya comenzado a escuchar en el puerto privilegiado. Preferiblemente, en lugar de codificarlo usted mismo, inicie su servidor desde un contenedor que haga el trabajo por usted. Si su servidor inicia una instancia por conexión, inícielo desde inetd
(o un programa similar como xinetd
). Para inetd
, usa una línea como esta en /etc/inetd.conf
:
http stream tcp nowait username:groupname /path/to/server/executable argv[0] argv[1]…
Si su servidor escucha en una sola instancia, inícielo desde un programa como authbind
. Crea un archivo vacío /etc/authbind/byport/80
y hacerlo ejecutable para el usuario que ejecuta el servidor; o crea /etc/authbind/byuid/1234
, donde 1234 es el UID que ejecuta el servidor, que contiene la línea 0.0.0.0/0:80,80
.
Si el ejecutable de su servidor está almacenado en un sistema de archivos que admite capacidades, puede asignarle el cap_net_bind_service
capacidad. Tenga en cuenta que las capacidades aún son relativamente nuevas y todavía tienen algunos problemas.
setcap cap_net_bind_service=ep /path/to/server/executable
La respuesta corta es que esto no es posible por diseño.
La respuesta larga es que en los mundos de código abierto hay mucha gente jugando con el diseño y proponiendo métodos alternativos. En general, es una práctica ampliamente aceptada que esto no debería ser posible. El hecho de que lo esté intentando probablemente signifique que tiene otra falla de diseño en su sistema y debería reconsiderar toda la arquitectura de su sistema a la luz de las mejores prácticas de *nix y las implicaciones de seguridad.
Dicho esto, un programa para autorizar acceso no root a puertos bajos es authbind. Tanto selinux como grsecurity también proporcionan marcos para autenticaciones tan precisas.
Por último, si desea que usuarios específicos ejecuten programas específicos como root y lo que realmente necesita es permitir que un usuario reinicie Apache o algo así, sudo
es tu amigo!