web-dev-qa-db-fra.com

Découvrir sous quel utilisateur Apache s'exécute?

Je veux sécuriser un répertoire de téléchargement de fichiers sur mon serveur comme décrit magnifiquement 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 il y aura une ligne "Utilisateur", mais il n'y a pas une telle ligne dans mon fichier httpd.conf, donc je suppose qu'Apache fonctionne comme utilisateur par défaut. Je ne peux pas savoir ce que c'est, cependant.

Donc, ma question est (sont):

  • comment savoir quel est l'utilisateur par défaut
  • dois-je changer l'utilisateur par défaut
  • si la réponse est oui et que je change d'utilisateur par défaut en éditant httpd.conf, est-il susceptible de tout gâcher?

Merci!

230
Anna

ps aux | egrep '(Apache|httpd)' montrera typiquement en quoi Apache s'exécute.

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

249
grufftech

Vous pouvez essayer la commande suivante:

ps -ef | egrep '(httpd|Apache2|Apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'
44
nowthatsamatt

Utilisation apachectl -S, qui montrera quelque chose à l'utilisateur et au groupe Apache, quelque chose comme ceci:

User: name="_www" id=70
Group: name="_www" id=70
20
Kyaw

Selon buntuforums.org , sur Ubuntu, l'utilisateur par défaut pour Apache2 est 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 défini, vérifiez les fichiers de configuration réels. Le fichier parapluie, Apache2.conf aura quelque chose comme ceci,

User ${Apache_RUN_USER}
Group ${Apache_RUN_GROUP}

Il s'agit d'une référence aux variables d'environnement définies dans /etc/Apache2/envvars. mod_suexec permet également d'exécuter des scripts pour 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
10
Kevin

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

8
kainosnous

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

echo exec('whoami');
7
JG Estiot

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
5
user163193
  • Pour connaître l'utilisateur, vous pouvez simplement utiliser ps aux | grep Apache lorsqu'il est en cours d'exécution.
  • Vous n'avez pas besoin de le faire, mais si Apache s'exécute en tant que root, il y a des problèmes de sécurité.
  • Troisièmement, changer l'utilisateur d'Apache modifiera ses droits d'accès à certains répertoires. Vous devez vous assurer que/var/www (ou partout où vous avez vos sites Web) est accessible au nouvel utilisateur et au nouveau groupe.
  • .

REMARQUE: c'est la même réponse que j'ai donnée le Stackoverflow .

4
Kjir

Ou vous pouvez vérifier le fichier de configuration Apache et rechercher le propriétaire et le groupe.

2
AliGibbs

Une approche alternative, au 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 obtenir de la fantaisie, 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" || 
 écho personne 
) 
 $ echo "$ apacheuser" 
 personne 
2
MestreLion

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}')

Et alors:

echo $Apache_USER
2
kenorb

J'ai trouvé que la plupart des solutions proposées ici sont spécifiques au système ou à la configuration (en particulier, la plupart des solutions ne fonctionnent pas du tout sur MacOS) et quelques-unes dépendent de l'utilisateur sachant où se trouvent les fichiers de configuration d'Apache en premier lieu. .

Alors je triche un peu et laisse Apache me dire quoi.

La commande simple apachectl -S vous indiquera ce que vous devez savoir sur une instance d'Apache en cours d'exécution, et ses résultats peuvent être analysés assez facilement. Voici ma solution, que j'utilise en haut de quelques scripts bash pour déterminer une variété de choses 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 telles quelles:

echo $HTTPD_ROOT_DIR // /etc/httpd
echo $HTTPD_DOC_DIR  // /var/www
echo $HTTPD_USER     // www-data
echo $HTTPD_GROUP    // www-data
1
Mike Fahy

J'ai trouvé cette commande dans CakePHP docs .

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

Maintenant HTTPDUSER contient le nom d'utilisateur de l'utilisateur qui exécute le serveur, echo $HTTPDUSER dans mon cas, les sorties www-data –En utilisant rlerdorf/php7dev .

0
Nabil Kadimi

Utilisez lsof et passez le port qu'Apache écoute comme argument. Voir la colonne USER pour l'utilisateur appache s'exécute 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)
0
David Okwii

C'est ce que j'utilise en ce moment:

apachectl -t -D DUMP_RUN_CFG 2>/dev/null |
sed -n '/^User/s/.*name="\([^"]*\)".*/\1/p'
0
ceving