cp: nie można utworzyć zwykłego pliku: Odmowa uprawnień
On 15 lutego, 2021 by admin Uruchamiam skrypt PHP na moim serwerze Apache i ze skryptu muszę skopiować niektóre pliki (aby uruchomić skrypt Bash, który kopiuje pliki). Mogę skopiować do katalogu /tmp
bez żadnych problemów, ale kiedy chcę skopiować do /tmp/foo
, pojawia się ten błąd:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
, mimo że uprawnienia do katalogu /tmp
i /tmp/foo
są ustawione do tej samej wartości.
Czy wiesz, na czym polega problem?
Komentarze
Odpowiedź
/tmp
Katalog ma wszystkie uprawnienia (odczyt / zapis) dla wszystkich użytkowników. ale jeśli utworzyłeś /tmp/foo
za pomocą własnego konta, ma on swoje uprawnienia tylko dla Ciebie! jeśli chcesz, aby był zapisywalny dla innych użytkowników (lub programów), zmień jego uprawnienia za pomocą tego polecenia:
chmod 777 /tmp/foo
Jeśli masz wszelkie inne pliki znajdujące się w tym katalogu wcześniej, dodaj flagę -R
do powyższego polecenia.
Aktualizacja: Użyj tego polecenia, aby zmienić właściciela /tmp/foo
z własnego na domyślnego użytkownika Apache:
sudo chown www-data:www-data /tmp/foo -R
sprawdź również konfigurację Apache2, aby zobaczyć, którego użytkownika ma do uruchamiania skryptów php.
Komentarze
- Dziękuję za odpowiedź, ale nie działa. Ustawiłem uprawnienia dla / tmp / foo na 777 i nadal pojawia się ten sam błąd. Kiedy uruchamiam skrypt jako zwykły użytkownik, wszystko jest w porządku. Ale problem polega na tym, że uruchamiam go ze skryptu php
- Czy mogę zobaczyć twoje skrypty !? i czy używasz php czy php-fpm? Twoim problemem jest to, że domyślnie php używa skonfigurowanego użytkownika Apache do uruchamiania skryptów, podczas gdy zrobiłeś
/tmp/foo
z własnego konta! Zaktualizuję odpowiedź, sprawdź ją ponownie. - skrypt php: <? Php shell_exec (" bash /path/to/script.sh)? >, a script.sh to #! / bin / bash cp /my/folder/file.txt / tmp / foo
- Jak mogę sprawdzić, którego użytkownika używa apache do uruchamiania skryptów php? Kiedy wprowadzam do mojego skryptu php polecenie bash whoami, otrzymuję " apache "
- czy możesz podać mi dane wyjściowe tego polecenia:
ls -alh /tmp | grep foo
jeśli katalog mafoo
nazwę.
whoami
ill /tmp
/tmp
jest domyślnie zawsze dla użytkownika root! wyniki dwóch poleceń nie są powiązane w tym przypadku, ponieważ/tmp
ma wszystkie uprawnienia dla wszystkich użytkownikówtmp
jest dla użytkownika root, ale nie dla/tmp/foo
OP może uruchamiać skrypt jako inny użytkownik, do którego/tmp/foo
należy.