[email protected]:/var/www# ps aux | egrep '(Apache|httpd)'
root 1086 0.0 0.3 88480 3160 ? Ss Mar08 0:09 /usr/sbin/Apache2 -k start
www-data 1089 0.0 0.8 445500 8840 ? Sl Mar08 0:56 /usr/sbin/Apache2 -k start
www-data 1090 0.0 0.8 445564 8832 ? Sl Mar08 0:56 /usr/sbin/Apache2 -k start
root 12072 0.0 0.0 8160 932 pts/0 S+ 19:20 0:00 egrep --color=auto (Apache|httpd)
puede sumar1 por favor informe sobre el proceso 1086 Apache ejecutado por la raíz. ¿Es esto un problema de seguridad?
No, esto es normal. En los sistemas basados en Debian, Apache2 se inicia como root. Luego se bifurca y se ejecuta bajo un usuario sin privilegios (generalmente www-data
). El trabajo real lo realizan estos procesos.
Solo un proceso privilegiado puede vincularse a puertos inferiores a 1024. Por lo tanto, al menos para vincularse a los puertos predeterminados 80 y 443, tendrá que ejecutarse como root.
Y, entre otras cosas, el proceso original lee las claves privadas del certificado SSL, que generalmente solo se leen por root. De /usr/share/doc/Apache2/README.Debian.gz
:
The SSL key file should only be readable by root; the certificate file may be
globally readable. These files are read by the Apache parent process which runs
as root, and it is therefore not necessary to make the files readable by the
www-data user.
Entonces, este es un comportamiento documentado.
No. Apache siempre se inicia como "root" y luego usa "setuid" para generar niños que realmente procesan las solicitudes para el usuario de Apache.
Si desea crear un socket de escucha en un puerto privilegiado (uno debajo del puerto 1024) debe hacerlo como root (o para ser más precisos: con ID de usuario 0). Puerto 80 y 443 para SSL.
Entonces ... si no confía en Apache para unirse a un socket, no debe ejecutar un servidor web en su servidor.
Ver por ejemplo http://www.thegeekstuff.com/2011/03/Apache-hardening/