187
Rozdzia³ 9. ¨ Prawa dostępu do plików i katalogów 187
Tim Parker
W tym rozdziale:
u Posiadanie plików i katalogów
u Ustawienia zmiennej UMASK
u Modyfikowanie praw dostępu do plików
u Modyfikowanie praw dostępu do katalogów
Dla kogoś, kto dopiero zaczyna pracę z systemem Linux, prawa dostępu do plików i katalogów mogą wydawać się co najmniej niezrozumiałe. Wynika to głównie z faktu, że jest wokół nich mnóstwo niedopowiedzeń. Warto jednak poświęcić chwilę czasu i przestudiować dokładniej ten rozdział, ponieważ temat nie jest szczególnie trudny do zrozumienia.
Widziałeś już, że po wydaniu polecenia ls –l na ekranie pojawia się prócz nazw plików spora ilość informacji. Spójrzmy na przykład:
-rwxr-xr-x 2 reksio users 4512 May 9 09:20 ksiazka1-rwxr-xr-x 2 reksio users 5727 May 9 09:22 ksiazka
Można w nim wyróżnić siedem kolumn zawierających różne dane. Są to, od lewej do prawej:
u prawa dostępu (wyjaśnimy je za chwilę),
u ilość dowiązań,
u identyfikator użytkownika posiadającego dany plik (w tym przypadku reksio),
u identyfikator grupy posiadającej dany plik (w tym przypadku users),
u rozmiar pliku w bajtach,
u data utworzenia pliku,
u nazwa pliku.
W tym rozdziale skoncentrujemy się na prawach dostępu, właścicielu oraz grupie posiadającej plik.
Każdy plik i katalog w systemie Linux ma swojego właściciela i grupę, która go posiada, oraz zestaw praw dostępu. Modyfikowanie tych atrybutów powoduje, że do plików ma dostęp więcej lub mniej osób. Prawa dostępu określają też, czy plik może zostać wykonany jako polecenie.
Domyślnie właścicielem pliku jest użytkownik, który go utworzył – jego identyfikator wyświetlany jest w trzeciej kolumnie wyprowadzanej zawartości katalogu. Grupa, do której należał on w momencie tworzenia pliku, jest wyświetlana w czwartej kolumnie (o grupach jeszcze nie mówiliśmy; grupa to po prostu pewna liczba identyfikatorów użytkowników, którym nadano jedną „etykietkę”, by łatwiej można było kontrolować dostęp do plików i katalogów). Bycie właścicielem pliku pozwala zmieniać prawa dostępu do niego i identyfikator właściciela. Jeśli zmienisz identyfikator właściciela na inny niż swój, najprawdopodobniej nie będziesz mógł już więcej zmieniać atrybutów pliku.
Identyfikatory właścicieli plików ustalane są podczas ich tworzenia. Pliki systemowe należą do użytkowników takich jak, root, uucp czy bin. Nie powinieneś tego zmieniać, nawet jeśli jesteś zalogowany jako root. Ustawienia te określane są w chwili instalacji systemu, a ich zmiana może uniemożliwić dostęp do plików.
Choć zmiana właściciela plików systemowych jest czasem kusząca, może to spowodować poważne problemy z programami, które uruchamiane są przez zwykłych użytkowników i potrzebują czytać z plików o zmienionych atrybutach. W większości przypadków programy takie blokują się lub kończą działanie. Zmieniaj identyfikator właściciela pliku tylko wtedy, gdy jesteś pewien, że są one zwykłymi plikami użytkowników.
Aby zmienić właściciela pliku, możesz użyć polecenia chown (ang. change ownership), którego składnia jest następująca:
chown <właściciel> <nazwa_pliku>
gdzie właściciel jest identyfikatorem nowego właściciela pliku. Możesz również używać symboli wieloznacznych, jak * czy ?, by zmieniać identyfikatory właścicieli całych grup plików.
W poniższym przykładzie zmieniony (na reksio) został właściciel pliku mojplik:
darkstar:~$ ls –l mojplik-rw-r--r-- 1 burek users 114 Dec 8 14:31 mojplikdarkstar:~$ chown reksio mojplikdarkstar:~$ ls –l mojplik
-rw-r--r-- 1 reksio users 114 Dec 8 14:31 mojplik
Zanim nastąpi zmiana identyfikatora właściciela pliku, Linux sprawdzi, czy w systemie istnieje odpowiedni użytkownik. Po zmianie może się okazać, że nie masz odpowiednich praw dostępu by zrobić z plikiem cokolwiek innego, bądź więc ostrożny. Aby zmodyfikować plik z poprzedniego przykładu lub zmienić jego właściciela z powrotem na burek, musisz zalogować się jako reksio lub root (albo użyć polecenia su).
Choć Linux pokazuje identyfikator właściciela pliku, w rzeczywistości zapamiętuje on jego numer identyfikacyjny. Wynika to z faktu, iż z punktu widzenia systemu łatwiej jest operować na identyfikatorach liczbowych, niż nazwach użytkowników.
Czasem w systemie można znaleźć pliki, których właścicielami są nie istniejący użytkownicy. Ma to miejsce zwykle wtedy, gdy administrator usuwa konto użytkownika, a jego pliki pozostają w systemie (w chwili usunięcia konta Linux nie przegląda automatycznie struktury katalogów, nie jest zatem w stanie zmienić właściciela takich plików). W takim przypadku tylko użytkownik root może zmienić właściciela pliku.
Pliki (oraz użytkownicy) należą do grup. Grupy są użyteczne głównie w większych systemach; może się zdarzyć, że nigdy nie będziesz potrzebował wykorzystywać możliwości wynikających z ich stosowania. Jest to jednak bardzo wygodny sposób zapewniania odpowiednich praw dostępu więcej niż jednemu użytkownikowi, ale nie wszystkim. Przykładowo, użytkownicy pracujący nad określonym projektem mogą należeć do grupy projekt. Pliki używane przez całą grupę będą również należeć do tej grupy, co daje tym użytkownikom określone prawa dostępu.
W skład grup wchodzą na ogół użytkownicy powiązani ze sobą określonymi relacjami. W powyższym przykładzie relację taką tworzy projekt opracowywany przez członków grupy; do jednej grupy mogą też należeć pracownicy danego wydziału, osoby wykonujące określone zadania (administratorzy, programiści itp.), lub też zespoły użytkowników w dużej sieci.
Przez cały czas jesteś członkiem jednej grupy. Gdy się logujesz, zostajesz przypisany do swojej grupy domyślnej, która jest ustalana przez administratora w chwili tworzenia Twojego konta. Możesz należeć do wielu różnych grup, ale w danym momencie możesz być zalogowany tylko do jednej z nich. Jeśli chcesz zmienić grupę, do której aktualnie jesteś przypisany, użyj polecenia newgrp. Na przykład, jeśli jesteś członkiem grup users oraz programmers i potrzebujesz zmienić grupę, do której jesteś aktualnie przypisany, na programmers, ponieważ daje Ci to uprawnienia do uruchamiania kompilatora, powinieneś wydać polecenie:
newgrp programmers
Linux nie umożliwia ustalenia wprost, do której grupy jesteś aktualnie przypisany. Możesz to zrobić, zapisując jakiś plik, a potem sprawdzając, do jakiej grupy on należy. Jeśli spróbujesz zmienić grupę na taką, do której nie należysz, Linux powie Ci tylko:
darkstar:~$ newgrp programmersnewgrp: Sorry
Wiesz już, jak zmienić właściciela pliku. Możesz też zmienić grupę, do której plik należy; aby to zrobić, nie musisz do niej należeć, ale musisz być właścicielem pliku. Przed wykonaniem tej operacji Linux sprawdza, czy grupa docelowa istnieje w systemie.
Polecenie służące do zmiany przynależności pliku do grupy to chgrp, a jego składnia jest podobna do składni polecenia chown:
chgrp <grupa> <nazwa_pliku>
Przykładowo, jeśli chcesz zmienić identyfikator grupy posiadającej plik ksiazka na autorzy, powinieneś wpisać:
$ ls –l ksiazka–rwxr-xr-x 2 burek users 4512 May 9 09:20 ksiazka$ chgrp autorzy ksiazka$ ls –l ksiazka–rwxr-xr-x 2 burek autorzy 4512 May 9 09:20 ksiazka
Można również, podobnie jak w przypadku polecenia chown, używać symboli wieloznacznych:
$ ls –l ksiazka*–rwxr-xr-x 2 burek users 4512 May 9 09:20 ksiazka1–rwxr-xr-x 2 burek users 4618 May 9 09:21 ksiazka2–rwxr-xr-x 2 burek users 4512 May 10 11:45 ksiazka3$ chown reksio ksiazka*$ ls –l ksiazka*–rwxr-xr-x 2 reksio users 4512 May 9 09:20 ksiazka1–rwxr-xr-x 2 reksio users 4618...
Wolf-1