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):
Merci!
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
Vous pouvez essayer la commande suivante:
ps -ef | egrep '(httpd|Apache2|Apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'
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
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
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.
Vous pouvez inclure une ligne de code dans votre script PHP:
echo exec('whoami');
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
ps aux | grep Apache
lorsqu'il est en cours d'exécution.REMARQUE: c'est la même réponse que j'ai donnée le Stackoverflow .
Ou vous pouvez vérifier le fichier de configuration Apache et rechercher le propriétaire et le groupe.
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
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
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
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 .
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)
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'