Festlegen der richtigen Berechtigungen zum Hochladen von Dateien

12

Ich habe ein PHP-Skript, das eine Datei in ein Verzeichnis namens "Uploads" hochlädt. Ich kann den Upload nur dann zum Laufen bringen, wenn ich Folgendes tue:

chmod 777 uploads

Ich weiß, dass dies nicht korrekt ist, aber ich weiß nicht, was ich tun soll, damit es funktioniert.

Serverinfo: T1-Micro Amazon Linux AMI 2013.03 auf Amazon EC2

Fragen:

  • Wie finde ich heraus, welche Benutzer Zugriff benötigen ... z. B. wie lautet der Benutzername für Apache oder den Webserver?

  • Welche Zugriffsebene muss ich geben und welchen Befehl würde ich dazu verwenden.

Vielen Dank!

Bearbeiten: Ich habe viele Antworten zum Stapelüberlauf gefunden, die ich untersuchen werde. Beispielsweise

/programming/3642241/php-file-upload-permissions

/programming/10842880/setting-permissions-in-php-on-server

/programming/8948537/permission-denied-when-attempting-to-upload-file-with-php

Vielen Dank

fun_programming
quelle

Antworten:

20

Versuchen Sie zu laufen:

ps -ef | grep apache

und schauen Sie sich die Spalte ganz links an, die dem Apache-Server entspricht. Dies ist der Benutzer, der Apache ausführt, und durch Vererbung auch PHP.

Ändern Sie den Besitz des Upload-Verzeichnisses auf diesen Benutzer und schränken Sie die Berechtigungen ein wenig ein, z. B. wenn der Webserver-Benutzer www-datazu der gleichnamigen Gruppe gehört (unter Verwendung eines Beispielpfads von /var/www/uploads):

sudo chown www-data:www-data /var/www/uploads
sudo chmod 755 /var/www/uploads

(oder welche Berechtigungen Sie in diesem Fall wünschen). Ich verwende sudoin den Beispielbefehlen - ich weiß nicht genau, wie die EC2-Systeme in dieser Hinsicht eingerichtet sind, um Superuser-Berechtigungen zu erhalten.

Wenn Sie bereits Dateien / Verzeichnisse hochgeladen haben, möchten Sie möglicherweise auch den Besitz und die Berechtigungen für diese ändern. Um dies zu tun 777, können Sie mit vernünftigeren Berechtigungen Folgendes ausführen:

sudo chown -R www-data:www-data /var/www/uploads
sudo chmod -R 755 /var/www/uploads
sudo find /var/www/uploads -type f -exec chmod -x {} \;

Führen Sie Befehle nicht "blind" aus, wenn Sie nicht jeden Teil davon verstehen. Überprüfen Sie die manSeiten, wenn etwas unklar ist (es sollte ziemlich einfach sein).

Daniel Andersson
quelle
Vielen Dank. Das hat sehr geholfen. Apache ist der Benutzer. Die Befehle sudo chown und sudo chmod funktionieren beide.
fun_programming
Klare und unkomplizierte Lösung. Vielen Dank. Jetzt brauche ich die riskante 777-Erlaubnis nicht mehr
lhrec_106