Wie man Apache als aktuellen Benutzer laufen lässt

44

Ich denke, für eine Entwicklungsmaschine ist es bequemer, Apache als aktueller Benutzer auszuführen, um das Berechtigungsproblem zu vereinfachen? Wie mache ich das? Ich denke, es ist suexec, aber wie konfiguriere ich es in Ubuntu + Apache?

Jiew Meng
quelle

Antworten:

28

Ich selbst würde den Benutzer der www-dataGruppe hinzufügen mit ...

sudo adduser {username} www-data

Einfach und effektiv. Kein Durcheinander mit Konfigurationsdateien oder Berechtigungen.

Rinzwind
quelle
6
Ich habe es die ganze Zeit gemacht, aber dadurch werden einige Probleme mit verweigerten Berechtigungen nicht behoben, da die Gruppenrechte nicht mit den Benutzerrechten für alle Dateien übereinstimmen.
Kostanos
1
Dies wird nicht behoben, wenn das CHMOD der Gruppe das Schreiben nicht erlaubte.
GusDeCooL
Das Problem für mich ist, dass ich eine lokale Installation habe. Wenn ich Dateien mit meiner IDE erstelle, haben sie meinen 'Benutzer / Gruppe' und manchmal kann Apache diese Dateien nicht lesen
Postadelmaga
Dies allein löst nicht viele Berechtigungsprobleme, da Ihre primäre Gruppe normalerweise nicht aus WWW-Daten besteht und einige PHP-Apps Schreibberechtigungen für Gruppen benötigen. (Joomla, WordPress)
Eric
2
Dies löst nicht das Problem, bei dem Sie Dateien erstellen und WWW-Daten nicht entfernen / bearbeiten können, da Ihre Hauptgruppe keine WWW-Daten enthält
billy
56

Bearbeiten Sie die folgende Datei als root: / etc / apache2 / envvars

mit dem Befehl:

sudo nano /etc/apache2/envvars

Ändern Sie den Benutzer und die Gruppe in sich selbst, wenn es nur einen Benutzer gibt und Sie nie wieder Probleme mit Berechtigungen haben.

IE, wenn Sie sich nur als Benutzer 'big_dog' anmelden und den Server ausführen:

export APACHE_RUN_USER=big_dog
export APACHE_RUN_GROUP=big_dog

Ich bin mir sicher, dass Sie diesen Benutzer in den aktuellen Benutzer ändern können. Installieren Sie dann user_dir. Sie haben alle Web-Sites, über die Sie die volle Kontrolle haben (sofern Sie dies nicht ändern).

Starten Sie den Server neu (falls Sie sich nicht sicher sind, starten Sie ihn einfach neu oder starten Sie ihn neu) und Sie können loslegen.

Eric
quelle
3
Das wirkt wie ein Zauber! Dankeschön. das einzige, was ich hinzufügen würde:sudo chown big_dog.big_dog /var/lock/apache2
Kostanos
3
Wahrscheinlich werden Sie auch brauchensudo chown big_dog.big_dog -R /var/log/apache2
Kostanos
Auf OpenSUSE-Tumbleweed (und wahrscheinlich auf einem anderen) ist die Datei um/etc/apache2/uid.conf
Dilawar
Sie müssen die envvars-Datei nicht unbedingt ändern. Ich habe gerade die Umgebungsvariablen aktualisiert, bevor ich Apache mit einem Skript gestartet habe. Auf diese Weise sind Sie nicht an einen einzelnen Benutzer gebunden, sondern derjenige, der das Skript ausführt, führt den Apache aus. Ich export APACHE_RUN_USER=#$(id -u)gab die Benutzer-ID an und verwendete sie in ähnlicher Weise id -gfür die Gruppe im Skript. Am Ende rief ich Apache zum Ausführen auf.
inblueswithu
1

warum würdest du das tun? Ich hatte in der Vergangenheit Probleme mit dieser Dauerwelle, aber dies ist mein Entwicklungsprozess von heute:

  • Installiere eine neue Linux-Box (virtuell oder lokal wie ein Laptop)
  • Führe den Standard- sudo apt-get install lamp-server^Proc aus, um die Lampe hochzufahren
  • mach sym link zu meinem home dir wo projekte so sind:

    ln -s /home/user/html /var/www/html

  • mache sym link zur hosts config datei

    ln -s /home/user/html/Apache-VirtualHosts.conf /etc/apache/sites-enabled/000-default

das ist es :)

Es funktioniert wie vorgesehen, keine Probleme mit Benutzerrechten oder Ähnlichem mit dem Apache-Server, für MySQL habe ich etwas mehr Zeit.

hth, Prost

Kresimir Pendic
quelle
Damit wird keines der Berechtigungsprobleme behoben, die in den meisten anderen Antworten angesprochen wurden.
HörmannHH
0

Wenn Sie das Problem umgehen, können Sie feststellen, wo der Benutzer für Apache festgelegt ist, indem Sie Folgendes ausführen:

grep www- /etc/apache2/apache2.conf

Dann müssen diese Instanzen in /etc/apache2/apache2.confApache ( sudo /etc/init.d/apache2 reload) bearbeitet und neu geladen werden .

Oli
quelle
apache2.confenthält www-für mich nicht
Jiew Meng
Ich habe das Gefühl, Sie meinten so etwas wie grep -HR "www-" /etc/apache2/. Wenn Sie bereits wissen, dass es sich um eine apache2.conf-Datei handelt, bearbeiten Sie diese Datei einfach. In meinem Fall war es nicht da, aber in / etc / apache2 / envvars, wie Erics Antwort zeigt.
Mike
Das liegt daran, apache.confsucht ${APACHE_RUN_USER}und ${APACHE_RUN_GROUP}. Nicht www-datadirekt.
Yahya Uddin
0

Erstellen Sie eine neue Benutzergruppe webdevund fügen Sie den www-dataBenutzer hinzu.

sudo addgroup webdev
sudo adduser www-data webdev

Fügen Sie dann Ihren Benutzer zu dieser Gruppe hinzu und machen Sie sie zur Standardgruppe für Ihren Benutzer.

sudo adduser {your-user} webdev
sudo addgroup webdev

Als letztes müssen Sie sicherstellen, dass die Gruppe webdev über die Rechte rwx für die Dateien verfügt

sudo chmod 775 -R /path/to/project

Jetzt kann nur noch passieren, dass zB für www-data eine neue Protokolldatei erstellt wird und Sie diese nicht rwxen können.

Thomas Venturini
quelle
1
Was ist der Vorteil davon, nur meinen eigenen Benutzer zur www-dataGruppe hinzuzufügen , zumal es sich um eine Entwicklungsumgebung handelt?
Dan
Wenn Sie dies auf diese Weise tun und die 775-Rechte auf z. B. public_html oder / var / www setzen, haben Sie keine Probleme mit den Rechten auf Ihrem Entwicklungscomputer. Bei den anderen Vorgehensweisen müssen Sie zusätzliche Schritte ausführen, oder Sie sind nicht so effektiv, wie ich es nicht tun möchte. Meiner Meinung nach ist dies der beste Weg, um auf einem Dev-Rechner damit umzugehen. Für produktive Server würde ich ein anderes Setup empfehlen. Auch mit diesem Ansatz können Sie problemlos Benutzer hinzufügen.
Thomas Venturini