Zmiana uprawnień wszystkim podrzędnym plikom lub katalogom

Uwaga: Ten wpis został utworzony ponad rok temu. Informacje w nim zawarte mogą być nieaktualne!

Terminal

Wyobraźmy sobie sytuację, w której w katalogu /prywatny/dane znajdują się dziesiątki plików i katalogów. Chcemy ustawić oddzielne prawa dostępu dla plików (644) i katalogów (755) znajdujących się wewnątrz /prywatny/dan. Jak to łatwo zrobić?

Zmiana uprawnień dla plików

find /prywatny/dane -type f -exec chmod 644 {} \;

Zmiana uprawień dla katalogów

find /prywatny/dane -type d -exec chmod 755 {} \;
Pamiętaj, aby odpowiednio zmienić nazwę katalogu!
Jeżeli powyższy artykuł nie rozwiązał lub rozwiązał częściowo Twój problem, dodaj swój komentarz opisujący, w którym miejscu napotkałeś trudności.
Mile widziane komentarze z uwagami lub informacjami o rozwiązaniu problemu.
  • wrzomar

    A zakładka „Uprawnienia” we właściwościach pliku/folderu w Nautilusie nie jest łatwiejsza? Ale wpis super! Mógłby być dodany jako przykład użycia find w 9 części Mocy zaklętej w terminalu. A propos kursów, przydałoby się wspomnieć o poleceniach xargs, head, tail, wc, less (zless itp.). grep (wraz z fgrep, egrep, zgrep itp.), sed, awk, gzip, bzip2 itp., locate… itd. Oraz trochę zagadnień z bash’a – definicje funkcji powłoki, aliasy i inne fajne rzeczy, np. zastosowania perl’a w bash’u (może jakiś kursik podstaw perl’a?). Może któreś z powyższych było wspomniane, ale brakowało przykładów, więc mi umknęło.

  • magic74

    a ja bym chciał mieć jeden katalog w /home do którego mają dostęp 0dczyt i Zapis dzieci utworzyłem grupę kids zaznaczyłem prawa odczytu i zapisu dla grupy dodałem dzieciaki do grupy kids i nic z tego dalej nie mają dostępu.
    Jakieś sugestie?

    • wrzomar

      Jeśli się nie mylę, utworzyłeś katalog bezpośrednio w /home i nadałeś mu prawa odczytu i zapisu dla grupy kids, a dzieciaki dodałeś do grupy kids. Domyślnie nowe pliki są tworzone z prawami 644, a katalogi z 755 i uid oraz domyślnym gid użytkownika, który go stworzył. Więc najprościej, żeby nie grzebać się z ACL, ustaw setgid bit dla grupy dla tego stworzonego wspólnego katalogu i od tej pory wszystkie nowe pliki i katalogi będą miały grupę taką jak grupa wspólnego katalogu (zakładając, że użytkownik miał prawo ustawić tę grupę dla pliku/katalogu, czyli należał do niej). Prawa dostępu nadal będą 644 i 755 dla pliku/katalogu, ale dzięki temu chronią czyjeś pliki i katalogi, a prawa zapisu dla grupy kids będzie mógł zmienić właściciel tegoż zasobu. Setgid bit dla grupy można ustawić poleceniem ‚chmod g+s nazwa_katalogu’, jeśli właściciel katalogu jest inny niż twój użytkownik to konieczne jest sudo. Możesz jeszcze ustawić sticky bit, który zwykle używa się dla katalogów takich jak /tmp – do których dostęp ma każdy, żeby chronić czyjeś pliki przed zmianą nazwy bądź usunięciem, ale żeby rozkminić jak to działa w tym konkretnym przypadku musiałbym się dłużej pobawić.
      PS. Gramatyka leży i kwiczy w tym moim wpisie, ale polska język – trudna język ;)

      • magic74

        E tam gramatyka!
        Liczą się konkrety a jak ktoś za dużo czepia się gramatyki znaczy że nic nie wie i chce jakoś też zabłysnąć.

        Dzięki powalczę z tym i ustawię tak jak piszesz
        Musze dzieciakom zrobić wspólny katalog na Muzykę i Filmy bo się dublują niepotrzebnie

        • wrzomar

          Nie wiem jak to możliwe, ale instalowałem system dosyć dawno, na 10.04 uruchomionym na vboksie umask mam 022 dla normalnego użytkownika, a na 12.04 umask ma wartość 002 dla normalnego, a 022 dla root’a – przeszukałem chyba wszystkie miejsca, gdzie można to ustawić (na 12.04) i chyba nic nie zmieniałem, 10.04 instalowałem zupełnie nic nie zmieniając, więc chyba też domyślnie tak ma. ACL również na 12.04 mi działa bez włączania go w fstab, a na 10.04 musiałem to robić – dziwne. Szukając informacji na help.ubuntu.com znalazłem fajne artykuły o uprawnieniach (fajne ze względu na linki u dołu strony – a właściwie prawie u dołu). W tym: http://brunogirin.blogspot.com/2010/03/shared-folders-in-ubuntu-with-setgid.html są instrukcje, których potrzebujesz, a to znalazłem po zauważeniu różnic w umask między różnymi wersjami (Czy ktoś mógłby to potwierdzić?) ubuntu: http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html . Sprawdzałem sticky bit i jego zachowanie różniło się trochę od setgid, setgid potomków był ustawiony, a sticky u potomków – nie, ale może coś pokręciłem. Jak chcesz, żeby coś było zrobione dobrze – zrób to sam. Dobrym pomysłem byłoby zrobienie we wspólnym katalogu struktury katalogów z poprawnie ustawionymi uprawnieniami i ACL’ami, np. Filmy, Muzyka itp. Bo jak wielu użytkowników będzie miało prawo zapisu do katalogu, to bez ustawionego sticky bitu, pliki innych użytkowników mogą zostać łatwo usunięte lub inaczej nazwane (usunąć cudzy plik można podobno przez rm -rf plik_z_sticky_bitem).

  • anonim

    Kiepski przykład, bo akurat te dwa polecenia można zastąpić jednym: chmod -R ug=rwX,o=rX /prywatny/dane