cp: nelze vytvořit běžný soubor: Oprávnění odepřeno
On 15 února, 2021 by admin Na svém serveru Apache používám skript PHP a ze skriptu musím zkopírovat některé soubory (ke spuštění skript Bash, který kopíruje soubory). Bez problémů mohu zkopírovat do adresáře /tmp
, ale když chci zkopírovat do /tmp/foo
, zobrazí se mi tato chyba:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
i když jsou nastavena oprávnění pro adresář /tmp
a /tmp/foo
na stejnou hodnotu.
Víte, v čem je problém?
Komentáře
Odpověď
/tmp
Adresář má všechna oprávnění (čtení / zápis) pro všechny uživatele. ale pokud jste /tmp/foo
vytvořili pomocí svého vlastního účtu, má svá oprávnění právě pro vás! chcete-li, aby byl zapisovatelný pro ostatní uživatele (nebo programy), změňte jeho oprávnění pomocí tohoto příkazu:
chmod 777 /tmp/foo
Pokud máte jakékoli další soubory v tomto adresáři dříve, přidejte příznak -R
do výše uvedeného příkazu.
Aktualizace: Pomocí tohoto příkazu můžete změnit /tmp/foo
vlastníka z vlastního na výchozího uživatele Apache:
sudo chown www-data:www-data /tmp/foo -R
Zkontrolujte také svoji konfiguraci apache2, abyste zjistili, jaké uživatele má pro spouštění php skriptů.
Komentáře
- Děkujeme za odpověď, ale nefunguje. Nastavil jsem oprávnění pro / tmp / foo na 777 a stále mám stejnou chybu. Když spustím skript jako normální uživatel, pak je to v pořádku. Ale problém je, když to spustím z php skriptu
- Mohu vidět vaše skripty, prosím !? a používáte php nebo php-fpm? vaším problémem je, že ve výchozím nastavení php používá ke spouštění skriptů uživatele nakonfigurovaného pomocí Apache, zatímco jste si
/tmp/foo
vytvořili svým vlastním účtem! Aktualizuji svou odpověď, zkontrolujte ji prosím znovu. - php skript: <? Php shell_exec (" bash /path/to/script.sh)? > a script.sh je #! / bin / bash cp /my/folder/file.txt / tmp / foo
- Jak mohu zjistit, který uživatel Apache používá ke spouštění php skriptů? Když vložím do svého php skriptu bash příkaz whoami, pak dostanu " apache "
- můžete mi dát výstup tohoto příkazu:
ls -alh /tmp | grep foo
pokud má adresářfoo
název.
whoami
all /tmp
/tmp
je ve výchozím nastavení vždy pro root! výsledky dvou příkazů v tomto případě nesouvisí, protože/tmp
má všechna oprávnění pro všechny uživateletmp
je pro root, ale ne pro/tmp/foo
OP může spouštět skript jako jiný uživatel s/tmp/foo
patří.