cp: kan ikke opprette vanlig fil: Tillatelse nektet
On februar 15, 2021 by admin Jeg kjører et PHP-skript på Apache-serveren min, og fra skriptet må jeg kopiere noen filer (for å kjøre et Bash-skript som kopierer filer). Jeg kan kopiere til en katalog /tmp
uten problemer, men når jeg vil kopiere til /tmp/foo
så får jeg denne feilen:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
selv om tillatelsene for katalogen /tmp
og /tmp/foo
er satt til samme verdi.
Vet du hva problemet er?
Kommentarer
Svar
/tmp
Katalog har alle tillatelser (lese / skrive) for alle brukere. men hvis du laget /tmp/foo
av din egen konto, har den tillatelsene bare for deg! hvis du vil gjøre det skrivbart for andre brukere (eller programmer), endre tillatelsen med denne kommandoen:
chmod 777 /tmp/foo
Hvis du har andre filer i denne katalogen fra før, legg til -R
flagg til kommandoen ovenfor.
Oppdatering: Bruk denne kommandoen til å endre /tmp/foo
eier fra din egen til apache-standardbruker:
sudo chown www-data:www-data /tmp/foo -R
Sjekk også apache2-konfigurasjonen for å se hvilken bruker den har for å kjøre php-skriptene.
Kommentarer
- Takk for svaret, men det fungerer ikke. Jeg har satt tillatelsene for / tmp / foo til 777 og fremdeles får jeg den samme feilen. Når jeg kjører skriptet som en vanlig bruker, er det greit. Men problemet er når jeg kjører det fra et php-skript
- Kan jeg se skriptene dine !? og bruker du php eller php-fpm? problemet ditt er som standard php ved hjelp av apache-konfigurert bruker for å kjøre skript, mens du laget
/tmp/foo
av din egen konto! Jeg vil oppdatere svaret mitt, sjekk det igjen. - php script: <? Php shell_exec (" bash /path/to/script.sh)? > og script.sh er #! / bin / bash cp /my/folder/file.txt / tmp / foo
- Hvordan kan jeg finne hvilken brukerapache som brukes til å kjøre php-skript? Når jeg legger til php-skriptets bash-kommando whoami så får jeg " apache "
- kan du gi meg utdata fra denne kommandoen:
ls -alh /tmp | grep foo
hvis katalogen harfoo
navn.
whoami
ogll /tmp
/tmp
er alltid for root som standard! resultatene av de to kommandoene er ikke relatert i dette tilfellet, fordi/tmp
har alle tillatelser for alle brukeretmp
er for root, men ikke for/tmp/foo
OP kjører kanskje skriptet som en annen bruker med/tmp/foo
tilhører.