root@ip-172-31-38-0:/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)
can sum1 s'il vous plaît informer sur le processus 1086 Apache exécuté par la racine. Est-ce un problème de sécurité?
Non, c'est normal. Sur les systèmes basés sur Debian, Apache2 est démarré en tant que root. Il bifurque ensuite et s'exécute sous un utilisateur non privilégié (généralement www-data
). Le travail réel est effectué par ces processus.
Seul un processus privilégié peut se lier aux ports inférieurs à 1024. Ainsi, au moins pour la liaison aux ports par défaut 80 et 443, il devra s'exécuter en tant que root.
Et, entre autres, le processus d'origine lit les clés privées des certificats SSL, qui ne sont généralement lues que par 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.
Il s'agit donc d'un comportement documenté.
Non. Apache est toujours démarré en tant que "root" et il utilise ensuite "setuid" pour générer des enfants qui effectuent le traitement des requêtes pour l'utilisateur Apache.
Si vous souhaitez créer un socket d'écoute sur un port privilégié (donc un en dessous du port 1024), vous devez le faire en tant que root (ou pour être plus précis: avec l'ID utilisateur 0). Port 80 et 443 pour SSL.
Donc ... si vous ne faites pas confiance à Apache pour vous lier à un socket, vous ne devez pas exécuter de serveur Web sur votre serveur.
Voir par exemple http://www.thegeekstuff.com/2011/03/Apache-hardening/