cp: ei voi luoda säännöllistä tiedostoa: Lupa evätty
On helmikuu 15, 2021 by admin Käytän PHP-komentosarjaa Apache-palvelimellani ja komentosarjasta minun on kopioitava joitain tiedostoja (suoritettavaksi Bash-komentosarja, joka kopioi tiedostot). Voin kopioida hakemistoon /tmp
ilman ongelmia, mutta kun haluan kopioida tiedostoon /tmp/foo
, saan tämän virheen:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
vaikka hakemiston /tmp
ja /tmp/foo
hakemiston oikeudet on asetettu samaan arvoon.
Tiedätkö mikä on ongelma?
kommentit
Vastaa
/tmp
Hakemisto on kaikki käyttöoikeudet (luku / kirjoitus) kaikille käyttäjille. mutta jos teit /tmp/foo
omalla tililläsi, sillä on oikeudet vain sinulle! jos haluat tehdä siitä kirjoitettavaksi muille käyttäjille (tai ohjelmille), vaihda sen lupaa tällä komennolla:
chmod 777 /tmp/foo
Jos sinulla on kaikki muut tämän hakemiston tiedostot aikaisemmista, lisää -R
lippu yllä olevaan komentoon.
Päivitys: Käytä tätä komentoa vaihtaaksesi /tmp/foo
omistajan omasta Apache-oletuskäyttäjäksi:
sudo chown www-data:www-data /tmp/foo -R
tarkista myös apache2-määrityksesi nähdäksesi, mikä käyttäjä sillä on php-komentosarjojen suorittamiseen.
Kommentit
- Kiitos vastauksesta, mutta se ei toimi. Olen asettanut / tmp / foo -oikeuksiksi 777 ja silti saan saman virheen. Kun suoritan komentosarjan tavallisena käyttäjänä, se on kunnossa. Mutta ongelma on, kun suoritan sen php-komentosarjalta
- Voinko nähdä skriptisi !? ja käytätkö php: tä tai php-fpm: tä? ongelmasi on, että oletuksena php käyttää apache-määritettyä käyttäjää komentosarjojen suorittamiseen, kun teit
/tmp/foo
oman tilisi avulla! Päivitän vastaukseni, tarkista se uudelleen. - php-komentosarja: <? Php shell_exec (" bash /path/to/script.sh)? > ja script.sh on #! / bin / bash cp /my/folder/file.txt / tmp / foo
- Miten löydän, minkä käyttäjän apache käyttää php-komentosarjojen suorittamiseen? Kun laitan php-komentosarjani bash-komentoon whoami, saan " apache "
- voitko antaa minulle tämän komennon lähtö:
ls -alh /tmp | grep foo
, jos hakemistolla onfoo
-nimi.
whoami
jall /tmp
/tmp
on oletuksena aina pääkäyttäjälle! nämä kaksi komentotulosta eivät liity tässä tapauksessa, koska becase/tmp
: llä on kaikki käyttöoikeudet kaikille käyttäjilletmp
on tarkoitettu juurille, mutta ei/tmp/foo
OP saattaa käyttää komentosarjaa eri käyttäjänä, johon/tmp/foo
kuuluu.