cp: kan inte skapa vanlig fil: Tillstånd nekad
On februari 15, 2021 by admin Jag kör ett PHP-skript på min Apache-server och från skriptet måste jag kopiera några filer (för att köra ett Bash-skript som kopierar filer). Jag kan kopiera till en katalog /tmp
utan problem, men när jag vill kopiera till /tmp/foo
får jag det här felet:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
även om behörigheterna för katalogen /tmp
och /tmp/foo
är inställda till samma värde.
Vet du vad problemet är?
Kommentarer
Svar
/tmp
Katalog har alla behörigheter (läs / skriv) för alla användare. men om du skapade /tmp/foo
av ditt eget konto, har det sina behörigheter bara för dig! om du vill göra det skrivbart för andra användare (eller program) ändra dess behörighet med det här kommandot:
chmod 777 /tmp/foo
Om du har alla andra filer i den här katalogen från tidigare, lägg till -R
flagga till kommandot ovan.
Uppdatering: Använd det här kommandot för att ändra /tmp/foo
ägare från din egen till apache-standardanvändare:
sudo chown www-data:www-data /tmp/foo -R
Kontrollera också din apache2-konfiguration för att se vilken användare den har för att köra php-skript.
Kommentarer
- Tack för svaret, men det fungerar inte. Jag har satt behörigheterna för / tmp / foo till 777 och fortfarande får jag samma fel. När jag kör skriptet som en vanlig användare är det okej. Men problemet är när jag kör det från ett php-skript
- Kan jag se dina skript tack !? och använder du php eller php-fpm? ditt problem är att php som standard använder apache-konfigurerad användare för att köra skript, medan du skapade
/tmp/foo
av ditt eget konto! Jag kommer att uppdatera mitt svar, kontrollera det igen. - php-skript: <? Php shell_exec (" bash /path/to/script.sh)? > och script.sh är #! / bin / bash cp /my/folder/file.txt / tmp / foo
- Hur hittar jag vilken användarapache som används för att köra php-skript? När jag lägger till mitt php-skript bash-kommando whoami så får jag " apache "
- kan du ge mig utdata från det här kommandot:
ls -alh /tmp | grep foo
om katalogen harfoo
namn.
whoami
ochll /tmp
/tmp
är alltid för root som standard! de två kommandoresultaten är inte relaterade i det här fallet, eftersom/tmp
har alla behörigheter för alla användaretmp
är för root, men inte för/tmp/foo
OP kör kanske skriptet som en annan användare med/tmp/foo
tillhör. / li>