Wie erhalte ich (nur) den Benutzernamen von Apache?

Wie erhalte ich (nur) den Benutzernamen von Apache?

Ich versuche, ein Bash-Skript für automatisches Chowning von Dateien für den Apache2-Benutzer zu schreiben. Aber ich muss vorher 100 % sicher sein, wie der Benutzername lautet. Ich weiß, dass es normalerweise www-data ist. Aber ich muss sicher sein, dass der Benutzername beispielsweise vorher nicht irgendwie geändert wurde.

Ich suche nach einer Zeichenfolge, die NUR den Benutzernamen von Apache2 zurückgibt.

Ich weiß, # ps -aux | grep apache2und viele andere auch, aber sie geben eine Menge Daten zurück und ich brauche nur einen Benutzernamen.

Jede Hilfe wird sehr geschätzt!

Danke schön.

Antwort1

Der Benutzername und die Gruppen-ID von Apache2 werden durch eine Direktive in der Konfigurationsdatei festgelegt. Diese befindet sich in der Datei /etc/apache2/envvars.

Sie können diese Datei untersuchen und feststellen, dass sie standardmäßig, wie vermutet, lautet www-data. Wie Sie der Datei entnehmen können, ist die Benutzergruppe standardmäßig auf denselben Namen eingestellt.

Da Sie nun den effektiven Benutzer kennen, apachekönnen Sie die Dateien wie folgt auf diesen Benutzer ändern:

$ sudo chown -R www-data:www-data myhtmldirectory

Dadurch werden der Benutzer und der Gruppenbesitzer von myhtmldirectory und allen darunter liegenden Dateien und Verzeichnissen in geändert www-data.

Wenn Sie nur den Benutzereigentümer ändern möchten, lassen Sie den :www-dataTeil weg, der für die Gruppe bestimmt ist.

Ein sehr sicherer Weg, die richtige usrID zu erhalten, ist:

$ awk -F= '$1 == "export APACHE_RUN_USER" {print $2}' /etc/apache2/envvars

Diese Zeile analysiert die Envvars-Datei für die aktuell gestartete Sitzung.

Antwort2

Um die Namen der tatsächlichen Benutzer aller übereinstimmenden Prozesse zu finden apache2, verwenden Sie:

ps -o euser= -C apache2

Die -oOption legt das Ausgabeformat fest. In unserem Fall fragen wir nur nach dem tatsächlichen Benutzernamen, euser. Das nachfolgende Feld =gibt an ps, dass die normale Kopfzeile unterdrückt werden soll. Auf diese Weise besteht die Ausgabe nur aus Benutzernamen, die mit übereinstimmen apache2.

Bei mir läuft Apache2 nicht, daher als Beispiel:

$ ps -o euser= -C mount.ntfs
root
$ ps -o euser= -C atd
daemon

Antwort3

Ich habe eine tolle, einfache Lösung gefunden, die NUR den Apache2-Benutzernamen zurückgibt:

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

Danke.

verwandte Informationen