Connaître l'utilisateur sur lequel Apache est exécuté?

212

Je souhaite sécuriser un répertoire de téléchargement de fichiers sur mon serveur, comme décrit joliment ici, mais j'ai un problème avant de pouvoir suivre ces instructions. Je ne sais pas sous quel utilisateur Apache s'exécute.

J'ai trouvé une suggestion que vous pouvez regarder dans httpd.conf et qu'il y aura une ligne "Utilisateur", mais il n'y a pas de telle ligne dans mon fichier httpd.conf, donc je suppose qu'Apache est exécuté en tant qu'utilisateur par défaut. Je ne peux pas savoir ce que c'est, cependant.

Donc, ma question est (sont):

  • comment puis-je savoir ce que l'utilisateur par défaut est
  • dois-je changer l'utilisateur par défaut
  • Si la réponse est oui et que je change d'utilisateur par défaut en modifiant httpd.conf, cela risque-t-il de tout gâcher?

Merci!

eikonomega
la source
12
pourquoi cette question a-t-elle été rejetée? Oui, il a été mis à jour comme il a été répondu ailleurs, mais je ne vois pas la nécessité de voter à la baisse? C'est une très bonne question? Peut-être que notre électeur le plus en retard voudrait ajouter un commentaire constructif à ce sujet?
Bryan
2
Vous voudrez peut-être publier cette mise à jour en tant que réponse et l'accepter, car vous vous trouvez actuellement dans la file d'attente sans réponse.
Fahad Sadah
7
+1 pour avoir été annulé sur StackOverflow; certains utilisateurs semblent insister pour
chasser les
La question liée n'existe plus
pal4life
La question suivante: que faire, car c’est l’un des deux utilisateurs, like rootet www-data. Comment donnez-vous au "bon" groupe Apache la permission d'accéder à quelque chose?

Réponses:

228

ps aux | egrep '(apache|httpd)' Généralement, vous verrez comment fonctionne Apache.

Habituellement, vous n'avez pas besoin de changer l'utilisateur par défaut, "personne" ou "apache" sont généralement de bons utilisateurs. Tant que ce n'est pas "root";)

edit: commande plus précise pour attraper aussi les binaires apache

grufftech
la source
42
Ouais, ou ce sera www-data sur Ubuntu.
Gravyface
10
... et Debian. :)
cubuspl42
7
Cette commande me montre une liste de choses, la plupart de apachemais 1 de rootaussi.
Utilisateur
2
J'ai 3 processus ( /usr/sbin/apache2 -k start), son utilisateur est rootet les deux autres www-data. Devrais-je être concerné?
zundi
3
@zundi, le service démarre en tant qu'utilisateur root afin d'effectuer des opérations telles que la liaison à des ports réservés (par exemple 80 et 443). Ensuite, quel que soit le nombre de processus configurés, il démarre pour effectuer le travail du serveur Web, ainsi que toute autre tâche, en tant qu'utilisateur défini. De cette façon, les demandes sont traitées par des processus non privilégiés. Vous remarquerez que l'ID parent (PPID) est le même pour tous les autres processus. Cette idée correspond au PID de ce processus exécuté en tant que root.
Kevin
41

Vous pouvez essayer la commande suivante:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'
Nowthatsamatt
la source
1
J'adore cette réponse, meilleure (plus générique) que la réponse la plus votée. Merci
pgr
14

Utilisez apachectl -S, qui montrera quelque chose d'utilisateur et de groupe Apache, quelque chose comme ceci:

User: name="_www" id=70
Group: name="_www" id=70
Kyaw
la source
Merci, sur mon mac, je vois qu'apache tourne en tant que '_www'.
Mercure
C'est une bonne réponse, car c'est la seule commande qui vous en dit beaucoup plus sur votre serveur Web en cours d'exécution et le présente de manière complète.
dimanche
9

Selon Ubuntuforums.org , l'utilisateur par défaut d'apache2 est Ubuntu www-data.

Vu pour être vrai sur Ubuntu 13.10 Saucy.


De Lars Noodén sur le forum ci-dessus.

Pour être sûr de ce que [l'utilisateur] est réellement configuré, vérifiez les fichiers de configuration actuels. Le fichier parapluie, apache2.confaura quelque chose comme ce qui suit,

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

C’est une référence aux variables d’environnement définies dans /etc/apache2/envvars. mod_suexecpermet également aux scripts d'être exécutés par un utilisateur et un groupe différents.

Pour rechercher des hôtes virtuels pouvant utiliser d'autres utilisateurs, groupes ou les deux, vérifiez les configurations.

$ egrep "^User|^Group|^SuexecUserGroup" /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf

Pour les distributions basées sur Red Hat, ce serait (généralement son utilisateur exécutant httpd est apache):

$ egrep "^User|^Group|^SuexecUserGroup" /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
Kevin
la source
8

Je sais qu'il s'agit d'un ancien message, mais il est toujours répertorié comme étant sans réponse. Je vais donc faire une suggestion. Si vous ne trouvez pas l'utilisateur ou le groupe sous lequel Apache est exécuté, essayez peut-être d'ouvrir le fichier httpd.conf. Il devrait y avoir une entrée pour "Utilisateur" et "Groupe". Vous pouvez non seulement voir quel utilisateur Apache est supposé fonctionner, mais vous pouvez le changer si vous en ressentez le besoin.

kainosnous
la source
7

Vous pouvez inclure une ligne de code dans votre script PHP:

echo exec('whoami');
JG Estiot
la source
8
Attention, cela montre à l'utilisateur que PHP est exécuté, pas à l'utilisateur Apache. Si vous utilisez mod_php, elles sont identiques, mais si, comme cela est maintenant très courant, vous utilisez autre chose (comme php_fpm), elles peuvent facilement être différentes.
benz001
5

Ce code listera - plus ou moins - par ordre alphabétique tous les utilisateurs non root exécutant des processus contenant apache(ou dont le nom contient apache)

ps aux | grep -v root | grep apache | cut -d\  -f1 | sort | uniq
utilisateur163193
la source
La liste comprendra probablement des utilisateurs qui exécutent des processus tels que 'grep apache', tels que votre personne.
mwfearnley
4
  • Pour trouver l'utilisateur, vous pouvez simplement l'utiliser ps aux | grep apacheen cours d'exécution.
  • Ce n'est pas nécessaire, mais si Apache est exécuté en tant que root, des problèmes de sécurité se posent.
  • Troisièmement, changer l'utilisateur d'Apache changera ses droits pour accéder à certains répertoires. Vous devez vous assurer que / var / www (ou où que vous ayez vos sites Web) soit accessible au nouvel utilisateur et au nouveau groupe.
  • Sur les systèmes que j'ai examinés, apache a toujours été installé à l'aide d'apache: apache (ou similaire) en tant qu'utilisateur et groupe, il devrait donc probablement déjà être configuré de cette manière.

NOTE: Ceci est la même réponse que j'ai donnée sur Stackoverflow .

Kjir
la source
2

Ou vous pouvez consulter le fichier de configuration apache et rechercher le propriétaire et le groupe.

AliGibbs
la source
2

Comme suggéré par Noyo ici :

APACHE_USER=$(ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}')

Puis:

echo $APACHE_USER
Kenorb
la source
1
Obtenez l'utilisateur (ligne de commande ubuntu): echo $ APACHE_USER
Jadeye
1

Une autre approche, du moins pour les distributions basées sur Debian / Ubuntu, consiste à utiliser la même méthode qu'Apache pour définir son utilisateur et son groupe: source/etc/apache2/envvars !

$ echo "$(source /etc/apache2/envvars && echo "$APACHE_RUN_GROUP")"
www-data

Si vous voulez avoir du chic, vous pouvez supprimer les erreurs si le fichier n'est pas trouvé et fournir une valeur par défaut:

$ apacheuser = $ (
     source / fail / etc / apache2 / envvars 2> / dev / null &&
     echo "$ APACHE_RUN_GROUP" ||
     faire écho à personne  
)
$ echo "$ apacheuser"
personne
MestreLion
la source
1

J'ai trouvé que la plupart des solutions proposées ici étaient spécifiques au système ou à la configuration (en particulier, la plupart des solutions ne fonctionnaient pas du tout sur MacOS) et quelques-unes comptaient sur l'utilisateur pour savoir où se trouvaient les fichiers de configuration d'Apache. .

Donc, je triche un peu et laisse Apache lui-même me dire quoi.

La commande simple apachectl -Svous indiquera ce que vous devez savoir sur une instance en cours d’Apache, et ses résultats peuvent être analysés assez facilement. Voici ma solution, que j'utilise en haut de quelques bashscripts pour déterminer une variété d'éléments dont j'ai besoin à un moment donné ...

# Store the results so we don't have to keep calling apachetl...
astatus=`apachectl -S`

# Now grab whatever you want from the result... 
HTTPD_ROOT_DIR=$(expr "`echo "$astatus" | grep ServerRoot`" : ".*\"\(.*\)\".*")
HTTPD_DOC_DIR=$(expr "`echo "$astatus" | grep \"Main DocumentRoot\" `" : ".*\"\(.*\)\".*")
HTTPD_USER=$(expr "`echo "$astatus" | grep \"User:.*name=\" `" : ".*\"\(.*\)\".*")
HTTPD_GROUP=$(expr "`echo "$astatus" | grep \"Group:.*name=\" `" : ".*\"\(.*\)\".*")

Ces valeurs peuvent ensuite être utilisées comme telles:

echo $HTTPD_ROOT_DIR // /etc/httpd
echo $HTTPD_DOC_DIR  // /var/www
echo $HTTPD_USER     // www-data
echo $HTTPD_GROUP    // www-data
Mike Fahy
la source
0

J'ai trouvé cette commande dans la documentation de CakePHP .

HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`

Contient maintenant HTTPDUSERle nom d'utilisateur de l'utilisateur qui exécute le serveur; echo $HTTPDUSERdans mon cas, www-datail affiche –utilisant rlerdorf / php7dev .

Nabil Kadimi
la source
0

Utilisez lsof et passez le port apache est écouté comme argument. Voir la colonne USER pour l'utilisateur appache est exécuté en tant que.

# lsof -i :80
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd     21058   root    4u  IPv6  74730      0t0  TCP *:http (LISTEN)
httpd     21111 www-data    4u  IPv6  74730      0t0  TCP *:http (LISTEN)
httpd     24915 www-data    4u  IPv6  74730      0t0  TCP *:http (LISTEN)
David Okwii
la source
lsof peut être lent lorsque vous avez quelques 100k de fichiers ouverts et / ou un serveur très occupé.
Dennis Nolte