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 apache2
und 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, apache
kö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-data
Teil 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 -o
Option 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.