cp: nu se poate crea un fișier obișnuit: Permisiune refuzată
On februarie 15, 2021 by admin Execut un script PHP pe serverul meu Apache și din script trebuie să copiez câteva fișiere (pentru a rula un script Bash care copiază fișiere). Pot copia într-un director /tmp
fără probleme, dar când vreau să copiez în /tmp/foo
atunci primesc această eroare:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
chiar dacă sunt setate permisiunile pentru directorul /tmp
și /tmp/foo
la aceeași valoare.
Știți care este problema?
Comentarii
Răspuns
/tmp
Director are toate permisiunile (citire / scriere) pentru toți utilizatorii. dar dacă ați creat /tmp/foo
după propriul dvs. cont, acesta are permisiunile sale doar pentru dvs.! dacă doriți să-l scrieți pentru alți utilizatori (sau programe), modificați permisiunea cu această comandă:
chmod 777 /tmp/foo
Dacă aveți orice alte fișiere din acest director dinainte, adăugați -R
la comanda de mai sus.
Actualizare: Utilizați această comandă pentru a schimba proprietarul /tmp/foo
din propriul dvs. în utilizator implicit apache:
sudo chown www-data:www-data /tmp/foo -R
vă rugăm să verificați și configurația apache2 pentru a vedea ce utilizator are pentru a rula scripturile php.
Comentarii
- Vă mulțumim pentru răspuns, dar nu funcționează. Am setat permisiunile pentru / tmp / foo la 777 și totuși primesc aceeași eroare. Când rulez scriptul ca utilizator normal, atunci este în regulă. Dar problema este când îl rulez dintr-un script PHP
- Vă pot vedea scripturile, vă rog !? și folosiți php sau php-fpm? problema ta este că, în mod implicit, php folosește un utilizator configurat de apache pentru a rula scripturi, în timp ce ai creat
/tmp/foo
de la propriul cont! Voi actualiza răspunsul meu, verificați-l din nou, vă rog. - script php: <? Php shell_exec (" bash /path/to/script.sh)? > și script.sh este #! / bin / bash cp /my/folder/file.txt / tmp / foo
- Cum pot găsi ce utilizator utilizează Apache pentru a rula scripturi PHP? Când pun comanda bash a scriptului php whoami, atunci primesc " apache "
- îmi puteți da ieșirea acestei comenzi:
ls -alh /tmp | grep foo
dacă directorul are numelefoo
.
whoami
șill /tmp
/tmp
este întotdeauna pentru root implicit! rezultatele celor două comenzi nu sunt legate în acest caz, deoarece/tmp
are toate permisiunile pentru toți utilizatoriitmp
este pentru rădăcină, dar nu pentru/tmp/foo
OP ar putea rula scriptul ca un utilizator diferit cu care aparține/tmp/foo
.