Jak mogę rekurencyjnie zmieniać uprawnienia do plików i katalogów?

65

Mam Ubuntu zainstalowane na moim komputerze lokalnym z apache / php / mysql.

Mam teraz katalog na / var / www - w którym mam kilka moich bieżących projektów. Pracuję również z opensource (drupal, magento, sugarcrm).

Problem, przed którym stoję, to zmiana uprawnień do plików w terminalu. Czasami muszę zmienić uprawnienia do całego folderu i jego kolejnych podfolderów i plików. Muszę indywidualnie zmieniać za pomocą

sudo chmod 777 foldername

Jak mogę to zrobić rekurencyjnie.

Także dlaczego muszę to zawsze robić 777 , próbowałem 755 dla folderów i 644 dla plików, ale to nie zadziała.

Nikhil
źródło

Odpowiedzi:

90

Wystarczy dodać -Ropcję rekurencyjnej zmiany uprawnień do plików. Przykład: rekurencyjnie dodaj uprawnienia do odczytu i zapisu dla właściciela i grupy w foldername:

chmod -R ug+rw foldername

Uprawnienia będą jak 664 lub 775.

Ustawianie uprawnień do 777 jest bardzo zniechęcony . Występują błędy w Apache lub edytorze dotyczące uprawnień, ponieważ apache działa pod innym użytkownikiem ( www-data) niż Ty.

Jeśli chcesz pisać /var/www, dodaj się do www-datagrupy i odpowiednio ustaw uprawnienia umask +.

  • Dodaj się do www-datagrupy:sudo adduser $USER www-data
  • Zmień własność plików w /var/www:sudo chown -R www-data:www-data /var/www
  • Zmień umask, aby nowo utworzone pliki przez Apache przyznawały również uprawnienia do zapisu grupie. Dodaj umask 007do /etc/apache2/envvars.
  • Przyznać się (technicznie, grupa www-data) Napisać uprawnienia: sudo chmod -R g+w /var/www.
Lekensteyn
źródło
tak, dodawałem flagę r w niewłaściwym miejscu, dodawałem ją po o + w dla chmod.
JohnMerlino
Ponadto, jeśli spróbujesz użyć chmod -r blablabla(małe -r zamiast -R), możesz skończyć z usunięciem uprawnień do odczytu dla wszystkich ...
Cyril Duchon-Doris
1
Po wykonaniu tych instrukcji warto sprawdzić, czy nie ma .htaccessplików z uprawnieniami do zapisu dla apache. find /var/www/ | grep .htaccess | xargs ls -l.
reynoldsnlp
23

brutalna siła:

sudo find foldername -exec chmod a+rwx {} ";"

Co nie działa? Bądź bardziej dokładny!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"
nieznany użytkownik
źródło
kiedy znajdziesz się w folderze, usuń „foldername”
Enrique
4
... i zastąp go.
djjeck
4

Do niczego nie potrzebujesz 777. W najgorszym przypadku musisz zmienić właściciela niektórych plików i katalogów na użytkownika „www-data”.

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

Jeśli używasz metody członkostwa w grupie Lekensteyn, zmień odpowiednio 755 na 775 i 644 na 664 powyżej, a następnie wymuś lepkość grupy:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s
Kees Cook
źródło
3

Możesz zmieniać podfoldery i pliki w Nautilusie. Jak widać na obrazku poniżej. Aby mieć uprawnienia do przycisków, możesz włączyć tę opcję w Ubuntu Tweak.

wprowadź opis zdjęcia tutaj

Alfredo Hernández
źródło
Służy LANG=C [command]do uzyskiwania tłumaczeń na angielski.
Lekensteyn,
1

Jeśli chcesz, aby wszystkie twoje pliki były czytelne dla świata (tzn. Jest to tylko statyczny zestaw plików / obrazów HTML), użyj tego polecenia:

chmod -R a+r <base directory>

To rekurencyjnie przejdzie przez wszystkie pliki i podkatalogi i doda do nich uprawnienia do odczytu.

OSTRZEŻENIE : Nie rób tego w przypadku plików wykonywalnych! Tylko pliki, które powinny być widoczne dla wszystkich.

Ryan Shillington
źródło
Czy mówisz „nie rób chmod -R a+xna niczym”, czy „nie rób chmod -R a+rna plikach wykonywalnych”?
aleclarson
Naprawiłem to. To drugie jest prawdą. Uważaj, aby umożliwić innym dostęp do twoich plików wykonywalnych.
Ryan Shillington,