cp: impossibile creare file regolari: Autorizzazione negata
Su Febbraio 15, 2021 da admin Sto eseguendo uno script PHP sul mio server Apache e dallo script ho bisogno di copiare alcuni file (per eseguire uno script Bash che copia i file). Posso copiare in una directory /tmp
senza problemi, ma quando voglio copiare in /tmp/foo
ottengo questo errore:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
anche se le autorizzazioni per la directory /tmp
e /tmp/foo
sono impostate allo stesso valore.
Sai qual è il problema?
Commenti
Risposta
/tmp
Directory ha tutte le autorizzazioni (lettura / scrittura) per tutti gli utenti. ma se hai creato /tmp/foo
dal tuo account, ha i suoi permessi solo per te! se vuoi renderlo scrivibile per altri utenti (o programmi) cambia i suoi permessi con questo comando:
chmod 777 /tmp/foo
Se hai qualsiasi altro file allinterno di questa directory da prima, aggiungi il flag -R
al comando precedente.
Aggiorna: Utilizza questo comando per cambiare /tmp/foo
proprietario dal tuo utente predefinito apache:
sudo chown www-data:www-data /tmp/foo -R
controlla anche la configurazione di apache2 per vedere quale utente ha per eseguire gli script php.
Commenti
- Grazie per la risposta, ma non funziona. Ho impostato i permessi per / tmp / foo su 777 e continuo a ricevere lo stesso errore. Quando eseguo lo script come un utente normale, allora va bene. Ma il problema è quando lo eseguo da uno script php
- Posso vedere i tuoi script per favore !? e stai usando php o php-fpm? il tuo problema è che, per impostazione predefinita, php utilizza lutente configurato in Apache per eseguire gli script, mentre tu hai creato
/tmp/foo
dal tuo account! Aggiornerò la mia risposta, ricontrollala per favore. - php script: <? Php shell_exec (" bash /path/to/script.sh)? > e script.sh è #! / bin / bash cp /my/folder/file.txt / tmp / foo
- Come posso trovare quale utente Apache utilizza per eseguire script php? Quando inserisco il comando bash del mio script php whoami, ottengo " apache "
- puoi darmi il output di questo comando:
ls -alh /tmp | grep foo
se la directory hafoo
nome.
whoami
ell /tmp
/tmp
è sempre per root per impostazione predefinita! i risultati dei due comandi non sono correlati in questo caso, perché/tmp
dispone di tutte le autorizzazioni per tutti gli utentitmp
è per root, ma non per/tmp/foo
OP potrebbe eseguire lo script come un utente diverso a cui appartiene/tmp/foo
.