Wiersz poleceń: Uprawnienia 14


Od Redakcji: artykuł pochodzi z lipcowego wydania Linux Magazine. Kompletną listę artykułów możecie znaleźć na stronach miesięcznika.

Często nie przywiązujemy wagi do uprawnień, a szkoda, bo ich poprawne wykorzystanie to podstawa bezpiecznego systemu.
Bezpieczeństwo w systemach typu GNU / Linux opiera się na zasadzie tak zwanej dogłębnej obrony (ang. defence in depth). Według tej filozofii nie powinno się polegać na jednej metodzie zapobiegawczej, lecz na wielu różnych technikach, od uwierzytelniania haseł po zapory ogniowe i sniffery. Jednak najlepszy sposób zabezpieczania się przed intruzami jest zarazem najprostszy – mowa o uprawnieniach.

Uprawnienia to atrybuty pliku określające, co mogą z nim zrobić różne kategorie użytkowników – czy mogą go odczytywać, modyfikować lub wykonywać. Innymi słowy, uprawnienia pomagają zapewnić bezpieczeństwo i prywatność naszych danych w systemach wieloużytkownikowych. W najgorszym wypadku pozwalają uchronić pliki innych użytkowników, jeśli cracker zdobędzie dostęp do jednego z kont.

Często słyszymy, że w systemach typu GNU / Linux wszystko traktowane jest jako plik – nawet urządzenia peryferyjne. W rezultacie, jako że każdy plik ma swoje własne uprawnienia, możemy z łatwością kontrolować dostęp użytkowników do sprzętu. Na przykład w wielu dystrybucjach istnieje zasada, że jeśli chcemy użyć skanera, potrzebujemy konta użytkownika, które należy do grupy o nazwie „scanner”. Na tej samej zasadzie w starszych systemach, które kładą większy nacisk na bezpieczeństwo, musimy być superużytkownikiem, by móc zamontować DVD lub pamięć USB.

Oczywiście często nie przywiązujemy do uprawnień wielkiej wagi. Jednak, jak pokazują powyższe przykłady, mają one duże znaczenie, bez względu na to, czy jesteśmy jedynym użytkownikiem domowego komputera, czy jedną z tysiąca osób korzystających z firmowego serwera. Choć rządzące nimi zasady bywają zawiłe, umiejętność odczytywania i nadawania uprawnień jest istotnym krokiem w kierunku uzyskania lepszej kontroli nad naszym własnym systemem.

Struktura uprawnień

Uprawnienia są przypisywane trzem kategoriom użytkowników: właścicielowi, który plik stworzył lub pobrał, innym użytkownikom należącym do tej samej grupy oraz pozostałym użytkownikom systemu. W większości systemów dla komputerów osobistych nowy lub pobrany plik jest automatycznie przypisywany grupie o tej samej nazwie, co konto użytkownika. W praktyce ogranicza to liczbę kategorii do dwóch. Jednak w większych instalacjach grupa taka może składać się ze współpracowników, członków tego samego działu lub dowolnego innego zbioru osób, które potrzebują ograniczonego dostępu do danego pliku.

Dla każdej z tych kategorii istnieją trzy główne uprawnienia: odczytu, zapisu i wykonywania, z reguły przedstawiane w tej kolejności. Prawo odczytu określa, czy dana kategoria użytkowników może w ogóle przeglądać plik, a prawo zapisu oznacza, że mogą oni go edytować albo, w przypadku katalogu, dodawać lub usuwać pliki. Prawo wykonywania dotyczy przede wszystkim plików binarnych, ale w przypadku katalogu określa również kategorię użytkowników, którzy mogą do niego wejść i używać go jako bieżącego katalogu roboczego.

Pliki mogą również posiadać dodatkowe uprawnienia specjalne. Na przykład SetUserID oznacza, że uruchomiony przez dany plik proces ma te same prawa, co użytkownik. Jeśli użytkownikiem tym jest przypadkiem administrator, może to prowadzić do niebezpiecznych sytuacji – lepiej więc korzystać z tej opcji z umiarem. Z kolei SetGroupID oznacza, że proces uzyskuje te same uprawnienia, co grupa, do której należy – w przypadku katalogu wszystkie nowe pliki otrzymują takie prawa, jak grupa, do której należy dany folder, a nie twórca pliku. I wreszcie możemy nadać plikowi uprawnienia Sticky, co sprawia, że może z niego korzystać tylko dany użytkownik lub administrator.

Każde z tych praw dostępu może pozostać niesprecyzowane – obecnie dzieje się tak często w przypadku SetUserID, SetGroupID i Sticky. Jeśli znamy prawa dostępu wyłącznie z interfejsu graficznego, powinniśmy również zdawać sobie sprawę, że ich nazwy w wierszu poleceń mogą być inne.

Na przykład pod Gnome, w Nautilusie uprawnienia określane są jako „Żadne”, „Tylko do odczytu” oraz „Odczyt i zapis” dla plików, a także „Tylko wyświetlanie plików”, „Dostęp do plików” oraz „Tworzenie i usuwanie plików” dla katalogów (Rysunek 1). Natomiast Dolphin w KDE oferuje uprawnienia: „Zabronione”, „Prawo do odczytu” oraz „Prawo do zapisu i odczytu” dla plików, a także „Zabronione”, „Może zobaczyć zawartość” oraz „Może oglądać i zmieniać zawartość” dla katalogów (Rysunek 2, u góry). Takie określenia uprawnień mogą być mylące, ale to w gruncie rzeczy po prostu inne nazwy dla tych samych praw dostępu. W Dolphinie możemy zawsze wejść w okno dialogowe Zaawansowane prawa dostępu, gdzie uprawnienia określane są tak samo, jak w wierszu poleceń (Rysunek 2, na dole po lewej).


Rysunek 1: Nazwy uprawnień w Nautilusie.


Rysunek 2: Nazwy uprawnień w Dolphinie.

Opisywanie uprawnień

Jako że wpisywanie długich nazw uprawnień w wierszu poleceń byłoby problematyczne, uniksowe systemy operacyjne, takie jak GNU / Linux, posiadają dwa skrócone systemy notacji: symboliczny (inaczej tekstowy) lub absolutny (inaczej ósemkowy).

W trybie symbolicznym uprawnienia zapisujemy w postaci serii dziesięciu znaków. Pierwszy znak od lewej określa, czy dany plik jest plikiem (-), katalogiem (d) lub dowiązaniem symbolicznym (l). Następne trzy symbole to prawa dostępu właścicieli, trzy kolejne – grup, a trzy ostatnie – pozostałych użytkowników. W każdej trójce znaki od lewej do prawej wskazują na uprawnienia odczytu (r), zapisu (w) i wykonywania (x) – lub pozostawione są puste (-). W polu wykonywania możemy również nadać plikowi prawo SetUserID (s).

Taka notacja jest łatwa do odczytu. Jeśli na przykład zobaczymy uprawnienia zapisane jako drwxrw-r–, wiemy, że:

  • dany plik to katalog,
  • użytkownik ma prawa odczytu, zapisu i wykonywania,
  • grupa ma prawa odczytu i zapisu, ale nie wykonywania,
  • pozostali mają prawa odczytu, ale nie zapisu ani wykonywania.

Kiedy już zrozumiemy notację symboliczną, jej odczytywanie jest szybsze niż w przypadku pełnego zapisu nazw praw dostępu.

Tryb absolutny jest jeszcze bardziej zwięzły – w miejsce trzech znaków używa tylko jednego. W najbardziej podstawowej formie na uprawnienia absolutne składają się trzy liczby ósemkowe – po jednej dla użytkownika, grupy i pozostałych. Liczby odpowiadające prawom dostępu oblicza się, dodając wartości każdego z uprawnień z osobna: prawo odczytu ma wartość 4, prawo zapisu – 2, prawo wykonywania – 1, a brak uprawnień – 0.

Innymi słowy, wartość 0 oznacza, że kategoria użytkowników nie ma żadnych uprawnień, a plik jest dla nich niewidoczny. Wartość 6 mówi, że kategoria posiada prawa odczytu i zapisu, zaś wartość 7 – że kategorii przyznano wszystkie trzy rodzaje uprawnień.

W praktyce pliki rzadko miewają prawa dostępu o wartości 000, gdyż oznaczałoby to, że zobaczyć je może tylko administrator, nie mówiąc już o edycji czy uruchamianiu. Jeśli jednak chcielibyśmy ustawić bardzo ograniczone prawa dostępu, możemy użyć 700 (z pliku może korzystać wyłącznie dany użytkownik) lub 744 (użytkownik ma pełne uprawnienia, a grupa i pozostali mają tylko prawo odczytu).

Notacja absolutna jest czasem zapisywana z czwartym znakiem na początku. Jeśli jest to 0, nie ma to żadnego znaczenia. Czasem jednak czwarta liczba może być wykorzystywana do ustawiania specjalnych praw dostępu. Wartość 4 lub 2 wskazuje, że nadano uprawnienia UserID lub GroupID, zaś wartość 1 oznacza, że plik ma uprawnienia Sticky. Podobnie jak inne cyfry w trybie absolutnym, i ta może być sumą kilku różnych praw dostępu. Tak więc wartość 5 to jednocześnie uprawnienia UserID oraz Sticky.

Przeglądanie i zmiana uprawnień

Kiedy już poznamy dostępne uprawnienia i sposób ich zapisu, możemy zacząć z nich korzystać.

By zobaczyć uprawnienia przyznane plikowi, w wierszu poleceń powinniśmy wpisać ls -l. W efekcie otrzymamy listę plików z prawami dostępu (w notacji symbolicznej) umieszczonymi po lewej (Rysunek 3). Biorąc pod uwagę zwyczajową wszechstronność poleceń, dziwić może fakt, że nie istnieje łatwy sposób wyświetlenia za pomocą komendy ls notacji ósemkowej. Istnieją jednak skrypty, które to robią [1].

Rysunek 3: Polecenie ls -l wyświetla uprawnienia w notacji symbolicznej. Tu widzimy prawa dostępu dla plików świeżej instalacji Ubuntu Lucid Lynx.

Natomiast polecenie chmod pozwala edytować uprawnienia, w trybie zarówno absolutnym, jak i symbolicznym. Bez względu na to, który wybierzemy, warto dodać do polecenia opcję -v lub –verbose, by widzieć efekty naszych działań (Rysunek 4). Ewentualnie możemy użyć opcji -c lub –changes, by wyświetlane były wyłącznie zmiany wprowadzane przez polecenie (w obu rodzajach notacji). Jeśli pracujemy w pobliżu katalogu głównego i boimy się uszkodzić system, zmieniając niewłaściwe uprawnienia, możemy również dodać opcję –preserve-root – szczególnie jeśli korzystamy z opcji -R lub –recursive, która zmienia prawa dostępu wszystkich plików i podkatalogów w danym folderze.


Rysunek 4: Tryb absolutny to z reguły najszybszy sposób edycji uprawnień za pomocą polecenia chmod.

Bez względu na to, jaką opcję wybierzemy, korzystanie z polecenia chmod w trybie absolutnym jest bardzo proste. Można je polecić jako najwygodniejszą metodę. Wystarczy umieścić uprawnienia zapisane w notacji absolutnej po poleceniu, a następnie podać pliki, których mają one dotyczyć. Na przykład chmod -R 1764 ./Downloads oznacza, że:

  • folder /Downloads w katalogu domowym i cała jego zawartość zostanie oznaczona jako Sticky,
  • my otrzymamy pełne prawa dostępu,
  • nasza grupa otrzyma prawa odczytu i zapisu,
  • pozostali użytkownicy otrzymają prawa odczytu.

Tryb symboliczny jest nieco trudniejszy w użyciu, ale pozwala na bardziej precyzyjną edycję. Podstawowym formatem dla trybu symbolicznego w chmodzie jest: chmod [opcje] [edytowana kategoria] [ustawienia czynności] [ustawienia uprawnień] (Tabele 1-3).

chmod Znaczenie
a Wszyscy (użytkownik, grupa, inni)
g Grupa
o Inni
u Użytkownik

Tabela 1: Ustawienia kategorii w trybie symbolicznym

chmod Znaczenie
+ Dodaje lub edytuje prawo dostępu
Usuwa prawo dostępu
= Ustawia tylko określone przez nas uprawnienia i usuwa wszystkie pozostałe

Tabela 2: Ustawienia czynności w trybie symbolicznym

chmod Znaczenie
Brak uprawnień. Używany jako wypełniacz
g Uprawnienia zgodne z bieżącymi uprawnieniami grupy
o Uprawnienia zgodne z bieżącymi uprawnieniami pozostałych użytkowników
r Prawo odczytu
s Prawo SetUserID lub SetGroupID
t Prawo Sticky
u Uprawnienia zgodne z bieżącymi uprawnieniami użytkownika
w Prawo zapisu
x Prawo wykonywania

Tabela 3: Ustawienia uprawnień w trybie symbolicznym

Na przykład polecenie chmod -v a+rwx ./Pictures oznacza, że wszystkie kategorie użytkowników mają prawa odczytu, zapisu i wykonywania w katalogu /Pictures i jego zawartości. Korzystając z powyższych trzech rodzajów ustawień, możemy dowolnie modyfikować kategorię użytkowników, zakres zmian oraz rodzaj uprawnień dla danej kategorii.

Jedyną trudnością może być zapamiętanie wszystkich dostępnych możliwości. Jeśli nie korzystamy z nich na bieżąco, będziemy zapewne zmuszeni zaglądać od czasu do czasu do ściągi. Stąd przewaga trybu absolutnego – zwięzłość i prostota.

Edytując uprawnienia, zwłaszcza z konta administratora, możemy czasami chcieć zmienić właściciela lub grupę danego pliku. Służą do tego polecenia chown i chgrp. Ich format jest podobny – nazwa nowego właściciela lub grupy umieszczana jest pomiędzy podstawowym poleceniem a nazwami plików. Na przykład chown adam christmas.png czyni użytkownika adam właścicielem pliku christmas.png, natomiast chgrp adam christmas.png przypisuje christmas.png do grupy adam.

Ustawianie uprawnień domyślnych

Jeśli notacja symboliczna i absolutna wydajną nam się zbyt zawiłe, nie ma sprawy. Możemy zwyczajnie ustawić domyślny zestaw uprawnień, które będą przydzielane automatycznie. W tym celu musimy zmodyfikować polecenie umask, zmieniając jego wartość w /etc/profile lub /etc/bashrc dla wszystkich użytkowników, albo w ./bash_profile lub ./.bashrc w katalogu domowym dla bieżącego konta. Możemy ewentualnie użyć polecenia umask [ustawienie]. Jeśli zrobimy to z konta administratora, zmienimy wartość umask dla całego systemu, jeśli zaś wpiszemy polecenie z konta bieżącego użytkownika, zmodyfikujemy domyślne ustawienia tylko dla niego.

By zobaczyć bieżące ustawienia umask, powinniśmy użyć polecenia umask, by otrzymać tryb ósemkowy lub umask -S, jeśli wolimy tryb symboliczny (Rysunek 5).


Rysunek 5: Dwa różne sposoby wyświetlania wartości umask.

Z nie do końca jasnych powodów wartość umask jest dopełnieniem wartości absolutnej. Innymi słowy, jeśli wartość umask ustawiona jest na 077, powinniśmy ją odjąć od domyślnej ósemkowej wartości dla plików (666) i katalogów (777). W efekcie otrzymujemy domyślne ustawienia 600 dla plików (użytkownik ma prawa odczytu i zapisu, pozostali nie mogą ani przeglądać, ani modyfikować pliku) oraz 700 dla katalogów (użytkownik ma prawa odczytu, zapisu i wykonywania, pozostali nie mogą w ogóle pracować z plikiem).

Po wprowadzeniu zmian wszystkie nowe pliki będą korzystać z domyślnych uprawnień, bez ingerencji z naszej strony. Wyjątkiem będą pliki pobrane lub pochodzące od innych użytkowników, więc od czasu do czasu warto wykonać polecenie chmod na całym katalogu domowym, by zapewnić sobie preferowany poziom bezpieczeństwa. Ale generalnie rzecz biorąc, po ustawieniu wartości umask możemy spokojnie zająć się swoimi sprawami, pewni, że system uprawnień zapewnia nam bezpieczeństwo przed atakami intruzów i ciekawskich.

Info

Autor: Bruce Byfield

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

14 komentarzy do “Wiersz poleceń: Uprawnienia