cp: kan ikke oprette almindelig fil: Tilladelse nægtet
On februar 15, 2021 by admin Jeg kører et PHP-script på min Apache-server, og fra scriptet skal jeg kopiere nogle filer (for at køre et Bash-script, der kopierer filer). Jeg kan kopiere til en mappe /tmp
uden problemer, men når jeg vil kopiere til /tmp/foo
så får jeg denne fejl:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
selvom tilladelserne til biblioteket /tmp
og /tmp/foo
er indstillet til samme værdi.
Ved du, hvad der er problemet?
Kommentarer
Svar
/tmp
Directory har alle tilladelser (læs / skriv) til alle brugere. men hvis du lavede /tmp/foo
af din egen konto, har den sine tilladelser kun til dig! hvis du vil gøre det skriveligt for andre brugere (eller programmer), skal du ændre tilladelsen med denne kommando:
chmod 777 /tmp/foo
Hvis du har andre filer i denne mappe fra før, tilføj -R
flag til ovenstående kommando.
Opdatering: Brug denne kommando til at ændre /tmp/foo
ejer fra din egen til apache-standardbruger:
sudo chown www-data:www-data /tmp/foo -R
Kontroller også din apache2-konfiguration for at se, hvilken bruger den har til at køre php-scripts.
Kommentarer
- Tak for svaret, men det virker ikke. Jeg har indstillet tilladelserne til / tmp / foo til 777 og stadig får jeg den samme fejl. Når jeg kører scriptet som en normal bruger, er det okay. Men problemet er, når jeg kører det fra et php-script
- Kan jeg se dine scripts tak !? og bruger du php eller php-fpm? dit problem er, at php som standard bruger apache-konfigureret bruger til at køre scripts, mens du lavede
/tmp/foo
af din egen konto! Jeg opdaterer mit svar, tjek det igen. - 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 finde, hvilken bruger-apache der bruges til at køre php-scripts? Når jeg sætter min php-script bash-kommando whoami så får jeg " apache "
- kan du give mig output af denne kommando:
ls -alh /tmp | grep foo
hvis biblioteket harfoo
navn.
whoami
ogll /tmp
/tmp
er som standard altid til root! de to kommandoresultater er ikke relateret i dette tilfælde, da/tmp
har alle tilladelser til alle brugeretmp
er til root, men ikke til/tmp/foo
OP kører muligvis scriptet som en anden bruger med/tmp/foo
tilhører.