Finden Sie heraus, unter welchem ​​Benutzer Apache ausgeführt wird?


212

Ich möchte ein Datei-Upload-Verzeichnis auf meinem Server sichern, wie hier beschrieben, aber ich habe ein Problem, bevor ich diese Anweisungen befolgen kann. Ich weiß nicht, unter welchem ​​Benutzer Apache ausgeführt wird.

Ich habe einen Vorschlag gefunden, dass Sie in httpd.conf suchen können und es eine "Benutzer" -Zeile geben wird, aber in meiner httpd.conf-Datei gibt es keine solche Zeile, daher wird Apache vermutlich als Standardbenutzer ausgeführt. Ich kann aber nicht herausfinden, was das ist.

Also, meine Frage ist (sind):

  • Wie finde ich heraus, was der Standardbenutzer ist?
  • muss ich den Standardbenutzer ändern?
  • Wenn die Antwort Ja lautet und ich den Standardbenutzer durch Bearbeiten von httpd.conf ändere, ist es wahrscheinlich, dass etwas schief geht?

Vielen Dank!


12
Warum wurde diese Frage abgelehnt? Ja, es wurde aktualisiert, da es an anderer Stelle beantwortet wurde, aber ich sehe keine Notwendigkeit, abzustimmen? Das ist eine sehr gute Frage? Vielleicht würde unser Downwähler diesbezüglich gerne einen konstruktiven Kommentar abgeben?
Bryan

2
Möglicherweise möchten Sie dieses Update als Antwort veröffentlichen und akzeptieren, da Sie sich derzeit in der Warteschlange für unbeantwortete Fragen befinden.
Fahad Sadah

7
+1 für das Abmelden bei StackOverflow; Einige Benutzer scheinen darauf zu bestehen, neue Benutzer
auszuschalten

Verknüpfte Frage existiert nicht mehr
pal4life

Die nächste Frage: Was soll man tun, weil es einem von zwei Benutzern gefällt rootund www-data. Wie erteilen Sie der "richtigen" Apache-Gruppe die Erlaubnis, auf etwas zuzugreifen?

Antworten:


228

ps aux | egrep '(apache|httpd)' In der Regel wird angezeigt, als was Apache ausgeführt wird.

Normalerweise müssen Sie den Standardbenutzer nicht ändern. "Nobody" oder "apache" sind normalerweise gute Benutzer. Solange es nicht "root" ist;)

edit: genauerer befehl zum abfangen von apache binaries


42
Ja, oder es werden www-Daten auf Ubuntu sein.
Gravyface

10
... und Debian. :)
cubuspl42

7
Dieser Befehl zeigt mir eine Liste von Dingen, von apachedenen die meisten außer 1 rootauch.
Benutzer

2
Ich habe 3 Prozesse ( /usr/sbin/apache2 -k start), der eine Benutzer ist rootund die anderen beiden www-data. Sollte ich besorgt sein?
Zundi

3
@zundi, der Dienst startet als root, um sich an reservierte Ports zu binden (zB 80 und 443). Anschließend wird unabhängig von der konfigurierten Anzahl von Prozessen die Ausführung der Webserver-Arbeit und anderer Aufgaben als definierte Benutzer gestartet. Auf diese Weise werden Anforderungen von nicht privilegierten Prozessen verarbeitet. Sie werden feststellen, dass die übergeordnete ID (PPID) für alle anderen Prozesse gleich ist. Diese Idee ist die PID für den einen Prozess, der als Root ausgeführt wird.
Kevin

41

Sie können den folgenden Befehl versuchen:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'

1
Ich liebe diese Antwort, besser (allgemeiner) als die am besten bewertete Antwort. Vielen Dank
pgr

14

Verwenden Sie Folgendes apachectl -S, um Apache-Benutzer und -Gruppen anzuzeigen:

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

Danke, auf meinem Mac sehe ich, dass Apache als '_www' ausgeführt wird.
Mercury

Dies ist eine gute Antwort, da es sich um den einen Befehl handelt, der Ihnen viel mehr über den laufenden Webserver verrät und ihn umfassend darstellt.
Kontur

9

Laut ubuntuforums.org ist unter Ubuntu der Standardbenutzer für apache2 www-data.

Gesehen um wahr zu sein auf Ubuntu 13.10 Saucy.


Von Lars Noodén im obigen Forum.

Überprüfen Sie die tatsächlichen Konfigurationsdateien, um sicherzugehen, auf was [der Benutzer] wirklich eingestellt ist. Die Umbrella-Datei apache2.confwird ungefähr so ​​aussehen:

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Das ist ein Verweis auf Umgebungsvariablen, die in gesetzt sind /etc/apache2/envvars. mod_suexecErmöglicht auch das Ausführen von Skripten für einen anderen Benutzer und eine andere Gruppe.

Überprüfen Sie die Konfigurationen, um virtuelle Hosts zu finden, die alternative Benutzer, Gruppen oder beides verwenden können.

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

Bei Red Hat-basierten Distributionen ist dies (normalerweise der Benutzer, der httpd ausführt apache):

$ egrep "^User|^Group|^SuexecUserGroup" /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf

8

Ich weiß, dass dies ein alter Beitrag ist, aber er ist immer noch als unbeantwortet gelistet, deshalb werde ich einen Vorschlag machen. Wenn Sie nicht finden können, unter welchem ​​Benutzer oder welcher Gruppe Apache ausgeführt wird, öffnen Sie möglicherweise die Datei httpd.conf. Dort sollte ein Eintrag für "Benutzer" und "Gruppe" vorhanden sein. Sie können nicht nur sehen, unter welchem ​​Benutzer Apache ausgeführt werden soll, sondern Sie können ihn auch ändern, wenn Sie dies wünschen.


7

Sie können eine Codezeile in Ihr PHP-Skript einfügen:

echo exec('whoami');

8
Hier ist zu beachten, dass dies den Benutzer zeigt, unter dem PHP ausgeführt wird, nicht den Apache-Benutzer. Wenn Sie mod_php verwenden, sind diese gleich, aber wenn Sie, wie jetzt üblich, etwas anderes verwenden (wie php_fpm), können sie leicht unterschiedlich sein.
benz001

5

Dieser Code listet - mehr oder weniger - alphabetisch alle Nicht-Root-Benutzer auf, die Prozesse ausführen, die enthalten apache(oder deren Name enthält apache).

ps aux | grep -v root | grep apache | cut -d\  -f1 | sort | uniq

Die Liste wird wahrscheinlich Benutzer enthalten, die Prozesse wie 'grep apache' ausführen, z. B. Ihr feines Ich.
Mwfearnley

4
  • Um den Benutzer herauszufinden, können Sie ihn einfach verwenden, ps aux | grep apachewährend er ausgeführt wird.
  • Das müssen Sie nicht, aber wenn Apache als root ausgeführt wird, gibt es Sicherheitsprobleme.
  • Drittens werden durch das Ändern des Apache-Benutzers seine Zugriffsrechte auf einige Verzeichnisse geändert. Sie müssen sicherstellen, dass / var / www (oder wo immer Sie Ihre Websites haben) für den neuen Benutzer und die neue Gruppe zugänglich ist.
  • Auf den von mir betrachteten Systemen wurde Apache immer mit Apache: Apache (oder ähnlichem) als Benutzer und Gruppe installiert, daher sollte es wahrscheinlich schon so eingestellt sein.

HINWEIS: Dies ist die gleiche Antwort, die ich auf Stackoverflow gegeben habe .


2

Sie können auch die Apache-Konfigurationsdatei überprüfen und nach dem Eigentümer und der Gruppe suchen.


2

Wie von Noyo hier vorgeschlagen :

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

Und dann:

echo $APACHE_USER

1
Holen Sie sich den Benutzer (Ubuntu-Befehlszeile): Echo $ APACHE_USER
Jadeye

1

Ein alternativer Ansatz, zumindest für Debian / Ubuntu-basierte Distributionen, besteht darin , die gleiche Methode/etc/apache2/envvars zu verwenden, die Apache verwendet, um Benutzer und Gruppe festzulegen : source !

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

Wenn Sie Lust haben, können Sie Fehler unterdrücken, wenn die Datei nicht gefunden wird, und einen Standardwert angeben:

$ apacheuser = $ (
     source / fail / etc / apache2 / envvars 2> / dev / null &&
     echo "$ APACHE_RUN_GROUP" ||
     Echo niemand  
)
$ echo "$ apacheuser"
niemand

1

Ich habe festgestellt, dass die meisten der hier angebotenen Lösungen system- oder konfigurationsspezifisch sind (insbesondere funktionieren die meisten Lösungen unter MacOS überhaupt nicht), und einige hängen davon ab, dass der Benutzer weiß, wo sich die Konfigurationsdateien von Apache überhaupt befinden. .

Also betrüge ich ein bisschen und lasse mir von Apache selbst sagen, was was ist.

Mit dem einfachen Befehl apachectl -Serfahren Sie, was Sie über eine laufende Instanz von Apache wissen müssen, und die Ergebnisse können relativ einfach analysiert werden. Hier ist meine Lösung, die ich oben in einigen bashSkripten verwende, um eine Vielzahl von Dingen zu bestimmen , die ich zu einem bestimmten Zeitpunkt möglicherweise benötige ...

# 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=\" `" : ".*\"\(.*\)\".*")

Diese Werte können dann als solche verwendet werden:

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

0

Ich habe diesen Befehl in CakePHP-Dokumenten gefunden .

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

Enthält jetzt HTTPDUSERden Benutzernamen des Benutzers, der den Server betreibt, echo $HTTPDUSERin meinem Fall Ausgaben www-data- mit rlerdorf / php7dev .


0

Verwenden Sie lsof und übergeben Sie den Port, auf den Apache als Argument hört. In der Spalte USER sehen Sie, wie der Benutzer-Appache ausgeführt wird.

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

Dies kann langsam sein, wenn Sie einige 100.000 geöffnete Dateihandles und / oder einen stark ausgelasteten Server haben.
Dennis Nolte
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.