291 votes

Découvrir sous quel utilisateur Apache fonctionne?

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

J'ai trouvé une suggestion selon laquelle vous pouvez regarder dans httpd.conf et qu'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 s'exécute en tant qu'utilisateur par défaut. Je ne peux cependant pas savoir qui c'est.

Alors, ma question est (sont) :

  • comment puis-je savoir qui est l'utilisateur par défaut
  • dois-je modifier l'utilisateur par défaut
  • si la réponse est oui et que je modifie l'utilisateur par défaut en éditant httpd.conf, est-il probable que cela causera des problèmes ?

Merci!

17 votes

Pourquoi cette question a-t-elle été downvotée? Oui, elle a été mise à jour car elle a obtenu une réponse ailleurs, mais je ne vois pas pourquoi la downvoter? C'est une question parfaitement valable? Peut-être que notre downvoter pourrait ajouter un commentaire constructif à ce sujet?

2 votes

Vous voudrez peut-être publier cette mise à jour en tant que réponse et l'accepter, car vous êtes actuellement dans la file d'attente des réponses non résolues.

12 votes

+1 pour avoir été réprimandé sur StackOverflow; certains utilisateurs semblent insister pour décourager les nouveaux utilisateurs

3voto

Mike Fahy Points 121

J'ai trouvé que la plupart des solutions offertes 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 s'appuient sur le fait que l'utilisateur sait déjà où se trouvent les fichiers de configuration d'Apache...

Alors je triche un peu et laisse Apache lui-même me dire ce qu'il en est.

La commande simple apachectl -S vous dira tout ce que vous devez savoir sur une instance en cours d'exécution d'Apache, et ses résultats peuvent être analysés assez facilement. Voici ma solution, que j'utilise en tête de quelques scripts bash pour déterminer diverses choses dont j'aurais besoin à un moment donné...

# Stocker les résultats pour ne pas avoir à appeler apachectl à chaque fois...
astatus=`apachectl -S`

# Maintenant, récupérez ce que vous voulez du résultat... 
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=\" `" : ".*\"\(.*\)\".*")

Vous pouvez ensuite utiliser ces valeurs comme ceci :

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

0 votes

Vous pouvez utiliser l'opérateur <<< pour passer une chaîne en tant que stdin à un processus : grep b <<<$'a\nb\nc\n'

2voto

Zafar Points 241

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 ensuite:

echo $APACHE_USER

1 votes

Obtenir l'utilisateur (ligne de commande ubuntu) : echo $APACHE_USER

1voto

thehouse Points 1134

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`

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

1voto

David Okwii Points 274

Utilisez lsof et transmettez le port sur lequel Apache écoute en tant qu'argument. Consultez la colonne USER pour l'utilisateur sous lequel Apache s'exécute.

# 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 votes

Lsof peut être lent lorsque vous avez quelques centaines de milliers de descripteurs de fichier ou un serveur assez occupé.

0voto

ceving Points 499

C'est ce que j'utilise actuellement:

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X