Apache mit Symlink zum Home-Verzeichnis - Berechtigungsfehler

15

Ich habe ein paar Probleme beim Verknüpfen meines /var/www/mit einem neuen WebrootVerzeichnis in meinem Home-Ordner. Ich denke, diese resultieren aus meinem Unverständnis der Linux-Berechtigungen.

Soweit mir bekannt ist, sollten Symlinks die Form des zu verlinkenden Verzeichnisses und des zu verlinkenden Verzeichnisses haben. In meinem Fall habe ich Folgendes ausgeführt:

sudo ln -s ~/Webroot/* /var/www/

dies hat irgendwie funktioniert, wenn ich laufe lsauf /var/www/i alle Dateien in meinem sehen WebrootVerzeichnis.

Wann immer ich versuche, eine Datei auszuführen, die sich in meinem WebrootOrdner befindet, erhalte ich eine Fehlermeldung mit der Berechtigung 403, weil die Dateien in meinem Webroot-Verzeichnis von mir erstellt wurden und die Apache-Instanz als WWW-Daten ausgeführt wird.

Wenn dies der Fall ist, würde dies bedeuten, dass ich die Berechtigungen für jede von mir erstellte Datei ändern muss, um sie auszuführen?

Ich habe zuvor eine lokale Apache-Instanz ausgeführt, indem ich das Stammverzeichnis meines vhost-Standards auf den WebrootOrdner zeigte. In diesem Fall musste ich keine Berechtigungen ändern. Jede Hilfe wäre dankbar.

Richzilla
quelle
Haben Sie überprüft, um sicherzustellen, dass Apache nicht so konfiguriert ist, dass er Symlinks nicht folgt? Ich hatte dieses Problem einmal. Ein verwandter Thread in einem anderen Forum könnte hier sein: linuxforums.org/forum/servers/…
RobotHumans

Antworten:

15

Dies ist keine gute Vorgehensweise, da ich mit Weboide einverstanden bin. Es gibt jedoch einen einfachen Weg, um dieses Ziel zu erreichen.

1). aktiviere das apache userdir modul.

sudo  a2enmod userdir

Dadurch wird das Apache-Userdir-Modul aktiviert. Jetzt können Sie den Inhalt der Website in ~/Webroot/oder in irgendetwas in Ihrem Home-Verzeichnis ablegen.

Hinweis: Der Standardordner ist ~/public_html

2). Nehmen Sie die erforderlichen Änderungen an vor /etc/apache2/mods-enabled/userdir.conf.

3). Starten Sie den Apache neu

sudo /etc/init.d/apache2 restart

Jetzt können Sie auf die Site zugreifen, indem Sie mit Ihrem Browser zu http: // ip-address / ~ username navigieren . Sie können für diese Site auch einen virtuellen Host festlegen.

Wenn Sie PHP-Dateien ausführen möchten, müssen Sie einen weiteren Schritt ausführen

Bearbeiten Sie die /etc/apache2/mods-enabled/php5.confund kommentieren Sie die folgenden Zeilen:

 <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
            php_admin_value engine Off
        </Directory>
    </IfModule>
</IfModule>

Starten Sie dann den Apache neu.

Das ist es. Du bist fertig.

Ref: https://wiki.ubuntu.com/UserDirectoryPHP

Hoffe das hilft. Wenn Sie auf Schwierigkeiten stoßen, können Sie diese hier posten.

aneeshep
quelle
7

Dies ist keine gute Praxis, um das zu erreichen, was Sie wollen.

Wenn Sie PHP verwenden, möchten Sie vielleicht einen Blick auf suexec , suphp oder php-fpm und fastcgi werfen .


Sie haben Recht mit Ihrem Problem. Dies ist ein Berechtigungsproblem, da Ihre WebrootDateien einem anderen Benutzer gehören als www-data.

Hier ist eine gar nicht so schlechte Lösung, um Ihr Problem zu umgehen. Beachten Sie, dass Sie wahrscheinlich sudo verwenden oder sich als root anmelden müssen. Vergewissern Sie sich, dass Sie alle auszuführenden Befehle vollständig verstanden haben !!

Ändern Sie Ihren WebrootOrdner sowie die Unterordner und Dateien, um die Gruppeneigentümerschaft festzulegen www-dataund die richtigen Berechtigungen festzulegen:

# set the group ownership to be www-data
chgrp -R www-data /path/to/home/Webroot/
# make sure www-data has read & write permissions (change it to `g=r` if you want to only give read-only access)
chmod -vR g=rw /path/to/home/Webroot/
# make sure www-data can access the folders by adding the group execute bit field to directories
find /path/to/home/Webroot/ -type d -print0 | xargs -0p chmod -v g+x

Bearbeiten: Beachten Sie, dass Sie diese Befehle auf jeden Fall erneut ausführen müssen, wenn Sie Dateien / Ordner mit Ihrem regulären Benutzerkonto hinzufügen.

Weboide
quelle
2

Ich habe fast dasselbe mit Debian Lenny gemacht, aber ich habe in den Nicht-Hax-Modus gewechselt. Ich habe Apache korrekt konfiguriert. Aber mit symlink:

$ ll /home
drwxr-xr-x  8 root   root   4,0K nov 14 14.59 .
drwxrwxrwx  7 root   root   4,0K nov 14 21.24 www -> /var/www

Ich denke, Sie sollten die Berechtigung von ~ und ~ / Webroot überprüfen . Ich denke, Ihr Verzeichnis (~) ist lesegeschützt. Ich meine, Sie müssen Folgendes ausführen:

$ ls -la /home

Um die richtigen Berechtigungen festzulegen, verwenden Sie:

# chmod 755 /home
# chmod 755 /home/<YOURNAME>
# chown <YOURNAME>:www-data -R /home/<YOURNAME>/Webroot
# chmod 775 -R /home/<YOURNAME>/Webroot

Ich denke, es sollte helfen, aber gib mir mehr Infos dazu. Ich schlage Ihnen vor, die Webroot aus Ihrem Verzeichnis zu entfernen, z. zu / nach Hause wie ich , weil es Sicherheitsproblem sein kann.

"#" bedeutet root-Berechtigung , z. schreibe sudo vor die Befehle; "$" bedeutet Einzelbenutzerberechtigung

Antivirtel
quelle
0

Sie müssen die Berechtigungen nicht nur für Ihr Ziel überprüfen, sondern auch für die übergeordneten Ziele.

zVictor
quelle
Warum? Handelt es sich um eine Apache- oder Dateisystembeschränkung?
Flimm
Es tut uns leid. Ich habe die Informationen nicht geprüft, sie beruhen lediglich auf einer persönlichen Erfahrung.
zVictor
0

Ich war mit diesem Problem konfrontiert. Die Idee, die Gruppe meines Home-Verzeichnisses in www-data zu ändern, gefiel mir jedoch nicht. Dieses Problem kann einfach gelöst werden, indem die Konfigurationsdatei für den virtualHost geändert wird. Konfigurieren Sie einfach das Directory-Tag, um diese einzuschließen

<Directory "your directory here">
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

Das Require all grantedist eine neue Funktion, denke ich; mit einem Standardwert von denied.

Siehe diese Seite als Referenz: http://httpd.apache.org/docs/current/mod/core.html#directory

Peter
quelle