cp: kann keine reguläre Datei erstellen: Berechtigung verweigert
On Februar 15, 2021 by admin Ich führe ein PHP-Skript auf meinem Apache-Server aus und muss aus dem Skript einige Dateien kopieren (um es auszuführen) ein Bash-Skript, das Dateien kopiert). Ich kann problemlos in ein Verzeichnis /tmp
kopieren. Wenn ich jedoch in /tmp/foo
kopieren möchte, wird folgende Fehlermeldung angezeigt:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
, obwohl die Berechtigungen für das Verzeichnis /tmp
und /tmp/foo
festgelegt sind auf den gleichen Wert.
Wissen Sie, wo das Problem liegt?
Kommentare
- können Sie das Ergebnis von
whoami
undll /tmp
- @SivaPrasath
/tmp
ist standardmäßig immer für root! Die Ergebnisse der beiden Befehle hängen in diesem Fall nicht zusammen, da/tmp
alle Berechtigungen für alle Benutzer hat. - @HamidYousefi yes,
tmp
ist für root, aber nicht für/tmp/foo
OP führt das Skript möglicherweise als ein anderer Benutzer aus, zu dem/tmp/foo
gehört. - @SivaPrasath whoami ist Apache und ll / tmp gibt drwxrwxrwx für / tmp / foo
- zurück. Hallo, willkommen. Um die Sache in Zukunft einfacher zu machen, ändern Sie dies bitte, indem Sie die Frage ändern (nicht durch Hinzufügen eines Kommentars), Befehle anzeigen und vollständig ausgeben. Dies hilft uns bei der schnelleren Beantwortung Ihrer Frage. Vielen Dank und viel Spaß beim Fragen.
Antwort
/tmp
Verzeichnis hat alle Berechtigungen (Lesen / Schreiben) für alle Benutzer. Wenn Sie jedoch /tmp/foo
über Ihr eigenes Konto erstellt haben, hat es seine Berechtigungen nur für Sie! Wenn Sie es für andere Benutzer (oder Programme) beschreibbar machen möchten, ändern Sie seine Berechtigung mit diesem Befehl:
chmod 777 /tmp/foo
Wenn ja Wenn Sie zuvor Dateien in diesem Verzeichnis gespeichert haben, fügen Sie dem obigen Befehl das Flag -R
hinzu.
Update: Verwenden Sie diesen Befehl, um den /tmp/foo
-Eigentümer von Ihrem eigenen in einen Apache-Standardbenutzer zu ändern:
sudo chown www-data:www-data /tmp/foo -R
Überprüfen Sie auch Ihre Apache2-Konfiguration, um festzustellen, über welchen Benutzer die PHP-Skripte ausgeführt werden.
Kommentare
- Danke für die Antwort, aber es funktioniert nicht. Ich habe die Berechtigungen für / tmp / foo auf 777 gesetzt und erhalte trotzdem den gleichen Fehler. Wenn ich das Skript als normaler Benutzer ausführe, ist es in Ordnung. Das Problem ist jedoch, wenn ich es über ein PHP-Skript ausführe.
- Kann ich Ihre Skripte bitte sehen? und benutzt du php oder php-fpm? Ihr Problem ist, standardmäßig PHP mit Apache konfigurierten Benutzer zum Ausführen von Skripten, während Sie
/tmp/foo
von Ihrem eigenen Konto erstellt haben! Ich werde meine Antwort aktualisieren, bitte noch einmal überprüfen. - PHP-Skript: <? Php shell_exec (" bash /path/to/script.sh)? > und script.sh ist #! / bin / bash cp /my/folder/file.txt / tmp / foo
- Wie kann ich herausfinden, welcher Benutzer Apache zum Ausführen von PHP-Skripten verwendet? Wenn ich whoami in meinen PHP-Skript-Bash-Befehl setze, erhalte ich " Apache "
- können Sie mir das geben Ausgabe dieses Befehls:
ls -alh /tmp | grep foo
, wenn das Verzeichnis den Namenfoo
hat.
Schreibe einen Kommentar