Prawa dostępu
W systemie wielodostępnym potrzebne jest narzędzie, które zapewnić powinno ład i porządek. Narzędziem tym są prawa dostępów do plików i katalogów.
W Linuksie (UNIX-ie) wyróżniamy trzy rodzaje praw dostępu do pliku:
prawo czytania (r - read)
prawo pisania (w - write)
prawo wykonywania (x - execute)
Powyższe prawa w stosunku każdego pliku (katalogu) są niezależnie nadawane w trzech kategoriach:
prawa właściciela pliku
prawa użytkowników należących do określonej grupy
prawa pozostałych użytkowników
Każdy plik (katalog) ma swojego właściciela indywidualnego (najczęściej jest to użytkownik, który utworzył plik) oraz właściciela zbiorowego (grupę). Właściciel pliku jest automatycznie członkiem grupy (czasami jest to grupa jednoosobowa). Pozostałym użytkownikom, również mogą być przypisane określone prawa do danego pliku.
Wyjątkowym użytkownikiem jest root, który posiada wszystkie prawa dostępu do każdego pliku. Ponadto może je zawsze zmienić, nawet gdy nie jest właścicielem pliku. W odniesieniu do konkretnego pliku określony użytkownik może posiadać dane prawo dostępu lub też nie. Posiadanie prawa:
czytania - umożliwia otwieranie pliku i przeglądanie jego zawartości
pisania - umożliwia otwieranie pliku i modyfikację jego zawartości
wykonywania - umożliwia wykonywanie programu (jeżeli jest to plik binarny) lub skryptu powłoki
Aby usunąć plik, musimy mieć prawo pisania do katalogu, w którym ten plik się znajduje.
Prawa dostępu do pliku
$ pwd
/home/crash1
[crash1@linux crash1]$ ls -F
kat2/ mojplik1 mojplik2
[crash1@linux crash1]$ ls -l
total 3
drwxrwxr-x 2 crash1 crash1 1024 Apr 1 12:10 kat2
-rw-rw-r-- 1 crash1 crash1 11 Apr 2 22:10 mojplik1
-rw-rw-r-- 1 crash1 crash1 6 Apr 6 22:11 mojplik2
[crash1@linux crash1]$ _
Polecenie ls z opcją -l oferuje nam informację o prawach dostępu do pliku. Pierwszy znak wiersza określa typ pliku. I tak "d" oznacza katalog (directory), a znak minus "-" plik zwykły.
Kolejne dziewięć znaków należy odbierać jako trzy trójki znaków. Pierwsza trójka określa prawa dostępu dla właściciela pliku, druga dla grupy (użytkowników), trzecia dla pozostałych użytkowników. Każda trójka określa kolejno trzy prawa: czytania (r - read), pisania (w - write) i wykonywania (x - execute). Minus w miejscu odpowiadającym określonemu prawu oznacza brak tego prawa.
Użytkownik dysponuje tylko jednym zestawem uprawnień do pliku. Jeżeli jest właścicielem pliku dysponuje tylko i wyłącznie zestawem praw właściciela, mimo, że jest także członkiem grupy i zalicza się także do pozostałych użytkowników. Jeżeli nie jest właścicielem, ale jest członkiem grupy, będzie dysponował tylko zestawem uprawnień grupy, mimo, że zalicza się przecież także do pozostałych użytkowników. Jeżeli nie jest ani właścicielem, ani członkiem grupy, będzie dysponował tylko zestawem praw pozostałych użytkowników.
Zgodnie ze zdrowym rozsądkiem, właściciel pliku powinien dysponować najszerszymi prawami do niego i najczęściej tak jest. W ogólności zależy to jednak od zdefiniowania zestawów uprawnień i w szczególnych sytuacjach może się tak zdarzyć, że właściciel będzie maił mniejsze prawa niż grupa, czyli pozostali użytkownicy.
Wróćmy teraz do wiersza z listingu - polecenia ls -l. Następne pola z prawami dostępu to liczba określająca liczbę sztywnych dowiązań do pliku. Kolejne pole to nazwa właściciela pliku. W następnym polu umieszczona jest nazwa grupy. Następnie mamy liczbę określającą długość pliku w bajtach, a za nią pole podające datę (miesiąc, dzień, godzina : minuta) utworzenia lub modyfikacji pliku. Ostatnie pole zawiera nazwę pliku. W naszym przypadku nazwa użytkownika i grupy są takie same. Wynika to z faktu, że nie zajmowaliśmy się porządkowaniem i tworzeniem grup w systemie. Przy zakładanie konta passwd użytkownika crash1 automatycznie została utworzona grupa o tej nazwie. Użytkownik crash1 jest zatem jedynym członkiem grupy crash1.
Reszta oznaczeń typu pliku stosowane w poleceniu ls:
- plik zwykły
d katalog
b plik specjalny (blokowy)
c plik specjalny (znakowy)
` gniazdo
p łącze nazwane (FIFO)
l dowiązanie miękkie (symboliczne)
W szczególności polecenie ls -l zastosować możemy do pojedynczego pliku, na przykład pliku specjalnego (blokowego) hdc:
$ ls -l /dev/hdc
brw-rw---- 1 root disk 22, 0 Mar 5 2000 /dev/hdc
[crash1@linux crash1]$ _
Widzimy tutaj pewną różnicę w podaniu daty. Pojawiła się dodatkowo liczba "22". Określająca numer programu obsługi.
$ cd /home/crash2
bash: /home/crash2: Permission danied
[crash1@linux crash1]$ ls -l /home
total 2
drwx------ 6 crash1 crash1 1024 Apr 1 12:10 crash1
drwx------ 5 crash2 crash2 11 Apr 2 22:10 crash2
[crash1@linux crash1]$ _
Widzimy, że do katalogu /home/leszek2 wszelkie prawa posiada tylko właściciel crash2. Grupa i pozostali użytkownicy nie posiadają tu żadnych praw.
$ su
Password:
[root@linux crash1]# cd /home/crash2
[root@linux crash2]# exit
exit
[crash1@linux crash1]$ _
Jak należało się spodziewać, ograniczenia wynikające z praw dostępu nie dotyczą root-a. Można powiedzieć, że do każdego pliku root posiada pełny zestaw (rwx) praw.
Zmieniamy prawa dostępu (zapis oktalny chmod)
Prawa dostępu nie są nadane raz na zawsze. Możemy je zmieniać. Zmiany praw dostępu do pliku (poleceniem chmod) może dokonać jedynie jego właściciel bądź administrator (root). Inną metodą wpływu na dostępność pliku jest zmiana jego właściciela bądź grupy (polecenia chown i chgrp).
Zapis praw:
rwx--x-wx
możemy przedstawić jako: 111001011
Jedynka oznacza tutaj istnienie (nadanie) prawa, a zero cofnięcie (brak) prawa. Zapis powyższy jest zapisem pozycyjnym. Możemy mówić tutaj o bitach (pozycjach dwójkowych) określających prawa w poszczególnych trójkach. Pierwszy, najbardziej znaczący bit w trójce określa prawa czytania (r), drugi prawo pisanie (w), a trzeci wykonywania (w).
Liczbę binarną, czyli zapisaną w systemie dwójkowym 111001011 możemy przedstawić w postaci oktalnej (system ósemkowy) jako 713. W tym zapisie pierwsza cyfra oktalna (7) określa prawa właściciela, druga cyfra oktalna (1) prawa grupy, a trzecia (3) dotyczy praw pozostałych użytkowników. Zmiana z postaci binarnej na oktalną (i odwrotnie) polega na niezależnym przyporządkowaniu każdej trójce binarnej cyfry oktalnej:
000 = 0 (żadnych praw ---)
001 = 1 (tylko wykonywanie --x)
010 = 2 (tylko pisanie -w-)
011 = 3 (pisanie i wykonywanie -wx)
100 = 4 (tylko czytanie r--)
101 = 5 (czytanie i wykonywanie r-x)
110 = 6 (czytanie i pisanie rw-)
111 = 7 (wszystkie prawa rwx)
Przykładowo -x-rwx---, czyli 010111000 binarnie to {010}{111}{000}, czyli 270 oktalnie. Zapis oktalny jest zwięzły, a jednocześnie czytelny, co pozwala szybko ocenić, jakie prawa nadajemy właścicielowi, jakie grupie, a jakie pozostałym użytkownikom.
Cały ta notacja dotycząca praw jest w szczególności wykorzystywana przez chmod:
$ cd /home/crash1
[crash1@linux crash1]$ ls -l mojplik1
-rw-rw-r-- 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ chmod 777 mojplik1
[crash1@linux crash1]$ ls -l mojplik1
-rwxrwxrwx 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ chmod 000 mojplik1
[crash1@linux crash1]$ ls -l mojplik1
---------- 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ _
W powyższym przykładzie najpierw nadaliśmy plikowi mojplik1 wszystkie możliwe prawa (777) dla wszystkich, a następnie cofnęliśmy (000) wszystkim wszystkie możliwe prawa. Nie dotyczy to oczywiście root-a. Ale dotyczy jak najbardziej właściciela pliku. Właściciel pliku, który odebrał sobie wszystkie prawa do niego dopóki pozostaje właścicielem pliku może je sobie przywrócić.
Zmieniamy prawa dostępu (zapis symboliczny chmod)
Polecenie chmod obsługuje nie tylko oktalny, ale również symboliczny zapis nadawania (cofania) praw.
Zapis symboliczny jest jednak bardziej kłopotliwy i łatwiej w nim o pomyłki. W zapisie oktalnym jednoznacznie określamy, jakie prawa będzie ostatecznie posiadał plik. W zapisie symbolicznym stosujemy mechanizm "plus-minus", co oznacza, że możemy nadawać (+) lub cofać (-) określone z wybranego zestawu prawa. Na podstawie takiego zapisu nic nie możemy powiedzieć o ostatecznych prawach dostępu do pliku, jeżeli nie znamy również ich postaci przed zmianą. Zobaczymy to na przykładzie, nadając, po czym cofając pozostałym użytkownikom prawo pisania i czytania. Następnie nadamy i cofniemy wszystkim wszystkie prawa:
$ ls -l mojplik1
-rw-rw-r-- 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ chmod o+rw mojplik1
[crash1@linux crash1]$ ls -l mojplik1
-rw-rw-rw- 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ chmod o-rw mojplik1
[crash1@linux crash1]$ ls -l mojplik1
-rw-rw---- 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ chmod a+rwx mojplik1
[crash1@linux crash1]$ ls -l mojplik1
-rwxrwxrwx 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ chmod a-rwx mojplik1
[crash1@linux crash1]$ ls -l mojplik1
---------- 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ _
Jak łatwo zauważyć litera o (others) w opcji wskazuje, komu nadajemy (cofamy) prawa. W tym przypadku dotyczy to pozostałych użytkowników. Litera a (all) jest domyślna i dotyczy wszystkich naraz. Dla grupy użyjemy g (group), a właściciela u (user).
Przywróćmy teraz plikowi mojplik1 pierwotne prawa dostępu:
[crash1@linux crash1]$ chmod u+rw,g+rw,o+r mojplik1
[crash1@linux crash1]$ ls -l mojplik1
-rw-rw-r-- 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ _
Tworzymy i usuwamy dowiązania
Dowiązanie to pierwszym przybliżeniu nic innego, jak inna nazwa pliku. W szczególności dowiązanie może pozwolić nam zastąpić długą, pełną ścieżkę dostępu do pliku kilkuliterowym skrótem, na przykład:
$ cd /
[crash1@linux /]$ cat mojplik1
cat: mojplik1: No such file or directory
[crash1@linux /]$ cat /home/crash1/mojplik1
Cos zapisane w pliku
[crash1@linux /]$ su
Password:
[root@linux /]# ln /home/crash1/mojplik1 skrszt
[root@linux /]# ln -s /home/crash1/mojplik1 skrsym
[root@linux /]# exit
exit
[crash1@linux /]$ cat skrszt
Cos zapisane w pliku
[crash1@linux /]$ cat skrsym
Cos zapisane w pliku
[crash1@linux /]$ ls -l skrszt skrsym /home/leszek1/mojplik1
-rw-rw-r-- 2 crash1 crash1 11 Apr 1 12:10 /home/leszek1/mojplik1
lrwxrwxrwx 1 root root 22 Apr 1 12:10 skrsym -> /home/leszek1/mojplik1
-rw-rw-r-- 2 crash1 crash1 11 Apr 1 12:10 skrszt
[crash1@linux /]$ su
Password:
[root@linux /]$ rm skrszt skrsym
rm: remove 'skrszt'? y
rm: remove 'skrsym'? y
[root@linux /]$ exit
exit
[crash1@linux /]$ cd ~
[crash1@linux crash1]$ _
Do pełnej ścieżki dostępu do pliku mojplik1 utworzyliśmy tu dwa dowiązania: sztywne (ln) i symboliczne (ln -s). Dowiązania utworzył a później usunoł root, ponieważ zwykły użytkownik crash1 (sprawdźmy to: ls -la /) ma tylko prawo czytania i wykonywania do katalogu głównego /, a to za mało. Aby utworzyć (usunąć) plik znajdujący się w danym katalogu, należy mieć do tego katalogu prawo pisania. Natomiast sama modyfikacja zawartości istniejącego już pliku jest możliwa, gdy posiadamy prawo pisania do pliku, ale nie koniecznie od katalogu.
Zwróćmy uwagę czym różni się dowiązanie sztywne od symbolicznego w zakresie praw dostępu i właścicieli. Dowiązanie sztywne zachowuje pełne prawa dostępu i właścicieli oryginału. Dowiązanie symboliczne oferuje pełne prawa wszystkim, a jego właścicielem jest ten co je utworzył.
Dowiązania (łączniki) dzielimy na sztywne (ln) i miękkie, inaczej zwane symbolicznymi (ln -s). Usunięcie dowiązanie dokonujemy poleceniem rm. Różnica pomiędzy dowiązaniem sztywnym a symbolicznym nie sposób wyjaśnić bez wprowadzenia pojęcia i-węzła (ang. inode), będącego strukturą, w której jądro przechowuje informacje o pliku. Każdy plik ma dokładnie jeden unikatowy i-węzeł. Każdą nazwę pliku skojarzoną wprost z i-węzłem nazywamy dowiązaniem sztywnym, często dowiązaniem (ang. link). Zatem każdy plik ma co najmniej jedno sztywne dowiązanie, gdyż musi mieć co najmniej jedną nazwę. Tak naprawdę, nazwa potrzebna jest tylko człowiekowi. System identyfikuje pliki w oparciu o niepowtarzalny (wewnątrz konkretnego systemu plików) numer i-węzła. I-węzeł nie przechowuje nazwy pliku. Do przechowywania nazwy pliku służą katalogi.
Dowiązanie symboliczne to skojarzenie nazwy pliku z nie z jego i-węzłem, lecz z istniejącą już nazwą (ściślej: ścieżka dostępu) pliku.
$ cd /home/leszek1
[crash1@linux crash1]$ ln mojplik1 nowyszt
[crash1@linux crash1]$ ln -s mojplik1 nowysym
[crash1@linux crash1]$ ls -li
total 4
89652 drwxrwxr-x 2 crash1 crash1 1024 Apr 1 12:10 kat2
32847 -rw-rw-r-- 2 crash1 crash1 11 Apr 1 10:10 mojplik1
32848 -rw-rw-r-- 1 crash1 crash1 6 Apr 1 10:11 mojplik2
32846 lrwxrwxrwx 1 crash1 crash1 8 Apr 1 12:11 nowysym -> mojplik1
32847 -rw-rw-r-- 2 crash1 crash1 11 Apr 1 10:10 nowyszt
[crash1@linux crash1]$ _
Do pliku mojplik1 utworzyliśmy dwa dowiązania: jedno sztywne (nowyszt) i jedno symboliczne (nowysym). Przy okazji poznaliśmy nową opcję -i polecenia ls, uwidaczniającą numery i-węzłów poszczególnych plików (są to pięciocyfrowe liczby na początku każdego wiersza). Porównajmy wiersz mojplik1 z wierszem nowyszt. Są one identyczne. Zwróćmy uwagę na te same numery i-węzłów i identyczne prawa dostępu. Dla odmiany porównajmy teraz wiersz mojplik1 z nowysym. Różnica jest widoczna. Nowysym posiada inny numer i-węzła oraz inne, pełne prawa dostępu, tylko jedno dowiązanie, inną długość i datę utworzenia lub modyfikacji. Można go traktować jak zupełnie inny plik. O tym, że jest to dowiązanie symboliczne, informuje nas litera "l" umieszczona przed prawami dostępu oraz strzałka wskazująca na mojplik1, czyli obiekt, do którego utworzone jest dowiązanie symboliczne.
Zmienimy teraz nazwę pliku mojplik1 i zobaczymy co się stanie:
$ cat mojplik
Cos zapisane w pliku
[crash1@linux crash1]$ cat nowyszt
Cos zapisane w pliku
[crash1@linux crash1]$ cat nowysym
Cos zapisane w pliku
[crash1@linux crash1]$ mv mojplik inny
[crash1@linux crash1]$ ls
inny kat2 mojplik2 nowysym nowyszt
[crash1@linux crash1]$ cat inny
Cos zapisane w pliku
[crash1@linux crash1]$ cat nowyszt
Cos zapisane w pliku
[crash1@linux crash1]$ cat nowysym
cat: nowysym: No such file or directory
[crash1@linux crash1]$ _
Efekt był możliwy do przewidzenia. Dowiązanie sztywne związane z "fizycznym" plikiem (i-węzłem) 32847 nie zareagowało na zmianę nazwy mojplik1 na inny. Natomiast dowiązanie symboliczne po zmianie nazwy trafia "w próżnię", gdyż nazwa mojplik1 już nie istnieje. To co tutaj jest wadą dowiązania symbolicznego, w innych sytuacjach okazać się może zaletą:
$ cat mojplik1
pusty
[crash1@linux crash1]$ mv mojplik2 mojplik1
[crash1@linux crash1]$ cat mojplik1
pusty
[crash1@linux crash1]$ cat nowysym
pusty
[crash1@linux crash1]$ _
Nie można mówić o przewadze dowiązania sztywnego nad symbolicznym, raczej o ich cechach, które mogą być wykorzystywane w konkretnych sytuacjach. Na zakończenie przywróćmy sytuację początkową:
$ mv mojplik1 mojplik2
[crash1@linux crash1]$ mv inny mojplik1
[crash1@linux crash1]$ rm nowysym nowyszt
[crash1@linux crash1]$ _
Ograniczenia dowiązania sztywnego
Przygotujmy sformatowaną (fdformat) na niskim poziomie dyskietkę i wykonajmy:
$ su
Password:
[root@linux crash1]# /sibn/mke2fs /dev/fd0 1440
...
...
Writinf superblocks and filesystems accounting information: done
[root@linux crash1]# mount -t ext2 /dev/fd0 /mnt/floppy
[root@linux crash1]# df
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/hda1 479096 233627 220725 51% /
/dev/fd0 1390 13 1305 1% /mnt/floppy
[root@linux crash1]# chmod 777 /mnt/floppy
[root@linux crash1]# ls -ld /mnt/floppy
drwxrwxrwx 3 root root 1024 Apr 1 12:10 /mnt/floppy
[root@linux crash1]# exit
exit
[crash1@linux crash1]$ cp mojplik1 /mnt/floppy
[crash1@linux crash1]$ ls /mnt/floppy
lost+found mojplik1
[crash1@linux crash1]$ ln /mnt/floppy/mojplik1 sztywny
ln: cannot create hard link 'sztywny' to '/mnt/floppy/mojplik1': Invalid cross-device link
[crash1@linux crash1]$ ln -s /mnt/floppy/mojplik1 symbol
[crash1@linux crash1]$ ls
kat2 mojplik1 mojplik2 symbol
[crash1@linux crash1]$ cat symbol
Cos zapisane w pliku
[crash1@linux crash1]$ su
Password:
[root@linux crash1]# umount /mnt/floppy
[root@linux crash1]# exit
exit
[crash1@linux crash1]$ ca symbol
cat: symbol: No such file or directory
[crash1@linux crash1]$ rm symbol
[crash1@linux crash1]$ _
Jak widać dowiązanie sztywne nie może być założone pomiędzy dwoma różnymi systemami pików - w tym przypadku między ext2 na dyskietce /dev/fd0 a partycją dysku twardego /dev/hda1. Przez różne systemy plików nie należy rozumieć jedynie różnych fizycznie nośników. Różne (czyli odrębne) będą także systemy plików założone niezależnie na różnych partycjach tego samego (fizycznie) dysku twardego. Przy czym mogą być one jak najbardziej tego samego typu (np. ext2).
Jak pamiętamy dowiązanie sztywne jest bezpośrednim odwołaniem się do numeru i-węzła pliku. Numery i-węzłów są jednak unikatowe tylko wewnątrz danego (jednego) systemu plików, gdyż nie byłoby możliwe jednoznaczne przyporządkowanie nazwy do fizycznego pliku.
Dowiązanie symboliczne (miękkie) nie posiada takich ograniczeń, bo odwołuje się tylko do już istniejącej nazwy (ścieżki dostępu) pliku, a nie do jego i-węzła.
Zmieniamy właściciela pliku
Tylko administrator może przenieść własność pliku na innego użytkownika:
$ ls -l /home
total 2
drwx------ 6 crash1 crash1 1024 Apr 1 12:10 crash1
drwx------ 5 crash1 crash1 1024 Apr 1 12:10 crash2
[crash1@linux crash1]$ chmod 777 mojplik ../crash1
[crash1@linux crash1]$ ls -ld mojplik1 ../crash1
drwxrwxrwx 6 crash1 crash1 1024 Apr 1 12:10 ../crash1
-rwxrwxrwx 6 crash1 crash1 1024 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ su -l crash2
Password:
[crash2@linux crash2]$ chown crash2 ../crash1/mojplik1
chown: ../crash1/mojplik1: Operation not permitted
[crash2@linux crash2]$ exit
[crash1@linux crash1]$ chown crash2 mojplik1
chown: mojplik1: Operation not permitted
[crash1@linux crash1]$ su
Password:
[root@linux crash1]# chown crash2 mojplik1
[root@linux crash1]# ls -l mojplik1
-rwxrwxrwx 6 crash2 crash1 1024 Apr 1 12:10 mojplik1
[root@linux crash1]# chown crash1 mojplik1
[root@linux crash1]# exit
[crash1@linux crash1]$ chmod 700 ../crash1
[crash1@linux crash1]$ chmod 664 mojplik1
[crash1@linux crash1]$ ls -ld mojplik1 ../crash1
drwx------ 6 crash1 crash1 1024 Apr 1 12:10 ../crash1
-rw-rw-r-- 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]$ _
Najpierw sprawdziliśmy prawa dostępu do katalogów crash1 i crash2. Następnie nadaliśmy plikowi mojplik1 i katalogowi crash1, w którym on się znajduje wszystkie prawa dla wszystkich (777), tak aby prawa dostępu nie ograniczały nas w działaniach. Teraz na chwilę staliśmy się użytkownikiem crash2 i spróbowaliśmy stać się właścicielem pliku mojplik1. Okazało się to niemożliwe. Również sam właściciel (crash1) nie mógł przenieść własności pliku mojplik1 na użytkownika crash2. Tylko administrator (root) może zmienić właściciela pliku mojplik1. Zauważamy, że właściciel grupowy nie uległ zmianie.
Na koniec przywróciliśmy stan praw dostępu i własności, jaki miał miejsce przed eksperymentem. Przy okazji poznaliśmy nową opcję -d polecenia ls, pozwalającą na traktowanie katalogu jak zwykłego pliku (tzn. nie wyświetlanie jego zawartości). Ponadto w zapisie poleceń posłużyliśmy się uniwersalnym dwukropkowym (..) aliasem katalogu rodzicielskiego (tzn. bezpośrednio wyższego), którym w tym przypadku był /home.
Poznaliśmy też ogólniejszą składnię polecenia su oraz jego opcję -l, która pozwala w tym przypadku na automatyczne przejście do katalogu domowego docelowego użytkownika (tutaj crash2).
Zmieniamy grupę pliku
Aby zmienić grupę pliku musimy być albo administratorem, albo właścicielem pliku i jednocześnie członkiem grupy, od której chcemy plik przypisać. Należy pamiętać, że dany użytkownik może należeć jednocześnie do wielu grup.
$ su
Password:
[root@linux crash1]# /usr/sbin/usermod -G crash2 crash1
[root@linux crash1]# exit
exit
[crash1@linux crash1]# logout
Red Hat Linux relase 5.2 (Apollo)
Kernel 2.0.36 on an i586
linux login: crash1
Password:
Last login: Tue Apr 1 13:43:34 on tty1
[crash1@linux crash1]# chgrp crash2 mojplik1
[crash1@linux crash1]# ls -l mojplik1
-rw-rw-r-- 1 crash1 crash2 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]# chgrp crash1 mojplik1
[crash1@linux crash1]# ls -l mojplik1
-rw-rw-r-- 1 crash1 crash1 11 Apr 1 12:10 mojplik1
[crash1@linux crash1]# _
Najpierw administrator za pomocą polecenia usrmod (służącego do modyfikacji kont użytkowników) przypisał użytkownika crash1 do grupy crash2. Polecenie to spowodowało modyfikację pliku /etc/group. Plik /etc/passwd został bez zmian (wpisany tam jest GID "inicjacyjnej" grupy użytkownika crash1). Zawartość obu plików możemy obejrzeć poleceniami cat /etc/passwd i /etc/group. Użytkownik crash1 należy teraz do dwóch grup: pierwszej i nadal jednoosobowej crash1 i do crash2 razem z użytkownikiem crash2.
Aby funkcjonować w systemie jako członek nowo przypisanej mu grupy crash2, użytkownik crash1 musiał ponownie się zalogować. Teraz mógł już swobodnie (poleceniem chgrp) zmienić grupę pliku mojplik1 na crash2, a następnie z powrotem na crash1.
8