Uprawnienia

Z Fedora Wiki

Spis treści

Wstęp

Linux, tak jak każdy inny system operacyjny pozwala na korzystanie z niego przez wielu użytkowników. W celu zwiększenia bezpieczeństwa systemu użytkownik ma dostęp tylko do jego części, np: może uruchamiać programy, ale nie może zmienić ustawień zapisanych w plikach konfiguracyjnych (w niektórych przypadkach nastąpi odmowa ich przeglądania), czy też instalować dodatkowych programów. W systemie istnieje konto super-użytkownika, identyfikowanego jako root, który posiada pełne uprawnienia administracyjne, to znaczy może zmieniać zawartość dowolnych plików, instalować i usuwać programy, dodawać i usuwać konta użytkowników, itp.
Uzyskanie takiego poziomu bezpieczeństwa jest możliwe dzięki temu, że w Linuksie wszystko jest plikiem, a każdy plik posiada ściśle określone uprawnienia definiujące kto może go edytować, przeglądać i uruchomić.

Użytkownicy i grupy

Każdy użytkownik posiada:

[user@X ~]#

Grupa to zbiór użytkowników traktowanych jako jednostka. Jeżeli grupie zostanie nadane uprawnienie do wykonywania określonej czynności, np. uruchomienia pliku, to operację tą będą mogli wykonać wszyscy użytkownicy będący członkami tej grupy.
Grupy są identyfikowane przez:

Informację o UID, GID, oraz o grupach użytkowników można uzyskać za pomocą poleceń id, groups, np:

[user@X ~]# id
uid=500(user) gid=500(user) grupy=500(user)
[user@X ~]# id root
uid=0(root) gid=0(root) grupy=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[user@X ~]# groups user
user : user 
[user@X ~]# groups root
root : root bin daemon sys adm disk wheel
Listę zdefiniowanych grup użytkowników uzyskamy poleceniem cat /etc/group.

Prawa dostępu do plików i katalogów

Właścicielowi pliku, grupom użytkowników, oraz wszystkim innym użytkownikom posiadającym konto w systemie można przyznać uprawnienia do:

Szczegółową listę uprawnień plików otrzymamy za pomocą ploecenia ls -l, lub ll, np:

[user@X ~]# ll
-rw-rw-r-- 1 user user    0 kwi  1 23:01 przykład.txt
drwxrwxr-x 2 user user 4096 kwi  1 23:00 dokumenty
lrwxrwxrwx 1 user user   12 kwi  1 23:03 dowiązanie_do_przykład.txt -> przykład.txt

Pierwszy znak oznacza typ pliku, może to być:

Następnie wypisane zostały prawa do pliku(rwx), w kolejności dla:

Jeśli któryś z użytkowników nie ma określonych uprawnień do pliku, są one oznaczone przez "-".


Trzecia i czwarta kolumna to odpowiednio:


Zgodnie z powyższymi oznaczeniami pliki przedstawione w przykładzie posiadają uprawnienia:

[user2@X ~]# rm dowiązanie_do_przykład.txt
rm: nie można usunąć `dowiązanie_do_przykład.txt': Brak dostępu

Dzieje się tak, ponieważ katalog w którym dowiązanie się znajduje, ma uprawnienia:

[user2@X ~]# ll ..
drwxrwxr-x  3 user user  4096 kwi  1 23:39 katalog

Zawartość katalogu może modyfikować tylko użytkownik user, oraz członkowie grupy user. User2 należy natomiast tylko do grupy:

[user2@X ~]# groups user2
user2 : user2


Przedstawione w przykładzie uprawnienia są domyślne dla nowych plików, katalogów i linków symbolicznych:


Jeśli zastanawialiśmy się dlaczego nie możemy przejść do katalogu /root, odpowiedź otrzymamy sprawdzając uprawnienia katalogu /root:

[root@X /]# ll
drwxr-x---  35 root   root    4096 kwi  1 23:47 root
Tylko użytkownik root i członkowie grupy root posiadają uprawnienia do przeglądania zawartości katalogu, pozostali użytkownicy systemu nie mają żadnych uprawnień (---).

Przypisywanie i zmiana uprawnień (chmod)

Do zmiany uprawnień plików i katalogów służy polecenie chmod. Uprawnienia plików można podawać w postaci kodów numerycznych, albo symboli oznaczających prawa.

Kody symboliczne uprawnień

Ogólną postać polecenia chmod można zapisać jako:

chmod zakres operator uprawnienie nazwa_pliku

Uprawnienia dla użytkownika, grup, pozostałych użytkowników systemu można nadawać za pomocą pojedynczego polecenia, opcje oddziela się przecinkiem, np:

[user@X ~]# chmod u+x,g-w,o=r nazwa_pliku

Przykłady:
Plik przykład.txt z poprzedniego rozdziału miał uprawnienia w postaci -rw-rw-r-- 1 user user.
Pod przykładowymi poleceniami podano skrócony wynik polecenia ll.

[user@X ~]# chmod o+w przykład.txt
-rw-rw-rw- 1 user user
[user@X ~]# chmod ug+x przykład.txt
-rwxrwxrw- 1 user user
[user@X ~]# chmod a+x przykład.txt
-rwxrwxrwx 1 user user
[user@X ~]# chmod go-w przykład.txt
-rwxr-xr-x 1 user user
[user@X ~]# chmod a-rwx przykład.txt
---------- 1 user user
[user@X ~]# chmod ug=rw,o=r przykład.txt
-rw-rw-r-- 1 user user

Kody numeryczne uprawnień

Uprawnienia można nadawać stosując kody numeryczne. Składnia polecenia chmod jest wówczas następująca:

chmod kod:XYZ nazwa_pliku

Podając kod należy wpisać trzycyfrową liczbę, której

Nie można opuść żadnej grupy użytkowników, dlatego też nie stosuje się tu dodawania i odejmowania uprawnień. Uprawnienia nadawane są użytkownikowi, grupie, oraz pozostałym użytkownikom systemu jednocześnie.
Stosowane oznaczenia to:

Prawa dostępu Kod numeryczny Opis uprawnień
Brak uprawnień 0 ---
Wykonanie (x) 1 --x
Zapis (w) 2 -w-
Odczyt (r) 4 r--
Łączenie uprawnień
Odczyt, wykonanie (rx) 5 r-x
Odczyt, zapis (rw) 6 rw-
Odczyt, zapis, wykonanie (rwx) 7 rwx


Przykłady:
Ponownie posłużymy się plikiem przykład.txt o uprawnieniach początkowych -rw-rw-r-- 1 user user.
Wiemy teraz, że te uprawnienia możemy zapisać numerycznie jako:

-rw-rw-r--
  |  |  |
  6  6  4

Pod przykładowymi poleceniami podano skrócony wynik polecenia ll.

[user@X ~]# chmod 666 przykład.txt
-rw-rw-rw- 1 user user
[user@X ~]# chmod 750 przykład.txt
-rwxr-x--- 1 user user
[user@X ~]# chmod 614 przykład.txt
-rw---xr-- user user
[user@X ~]# chmod 000 przykład.txt
---------- 1 user user
[user@X ~]# chmod 664 przykład.txt
-rw-rw-r-- 1 user user

Zmiana właściciela i grupy (chown,chgrp)

Polecenie chown pozwala na zmianę właściciela pliku, bądź katalogu:

chown [opcje] nazwa_użytkownika pliki 

Za pomocą chgrp zmienimy grupę do której pliki lub katalogi należą:

chgrp [opcje] nawa_grupy pliki

Grupę można zmienić także za pomocą polecenia chown, w takim przypadku składnia ma postać:

chown [opcje] nazwa_użytkownika:nawa_grupy pliki

Jeśli nie zmieniamy właściciela pliku w powyższym poleceniu można pominąć nazwę użytkownika:

chown [opcje] :nawa_grupy pliki

Podając użytkownika lub grupę, można się posłużyć odpowiednią nazwą, bądź też UID, GID.
Zmiana właściciela lub grupy może wymagać uprawnień super-użytkownika root.
Przydatne opcje obu poleceń to:

Więcej opcji jest dostępnych w manualu man chown, man chgrp.


Przykłady: Przedstawiany wcześniej plik przykład.txt należał do użytkownika o nazwie user, oraz do grupy user.
Pod przykładowymi poleceniami podano skrócony wynik polecenia ll.

[root@X ~]# chown root przykład.txt
 -rw-rw-r-- 1 root user
[root@X ~]# chgrp root przykład.txt
-rw-rw-r-- 1 root root
[root@X ~]# chown 500:500 przykład.txt
 -rw-rw-r-- 1 user user

Zarządzanie użytkownikami i grupami

Aby dodać użytkownika do istniejącej już grupy, można edytować plik /etc/group, przykładowo:

root:x:0:root
bin:x:1:root,bin,daemon
user:x:500:

Do grupy root należy tylko użytkownik root, do bin użytkownicy : root, bin, daemon, do grupy user (GID 500) należy tylko użytkownik user.

Do zarządzania użytkownikami i grupami wykorzystuje się następujące polecenia:


Zarządzanie użytkownikami



usermod - zarządzanie kontem istniejących użytkowników, stosowana składnia:

usermod [opcje] użytkownik

Niektóre z opcji:

[root@X ~]# usermod -G user user2
[root@X ~]# id user2
uid=501(user2) gid=501(user2) grupy=501(user2),500(user)

Użytkownik user2 został dodany do grupy user.

useradd - utworzenie nowego konta,

useradd [opcje] nazwa_użytkownika

userdel - usunięcie konta użytkownika,

userdel [opcje] nazwa_użytkownika


Zarządzanie grupami:



groupmod - zmienia nazwę lub GID grupy,

groupmod [opcje] grupa

groupadd - tworzy nową grupę,

groupadd [opcje] grupa

groupdel - usuwa grupę.

groupdel grupa
Info
Opis wszystkich opcji można znaleźć w manualach przedstawionych poleceń.

Suid i Sgid

Suid i Sgid to narzędzia pozwalające na uruchomienie programu z uprawnieniami właściciela pliku, bądź też grupy do której plik należy, a nie z prawami użytkownika, który program uruchamia.

Przykład:
Przyjrzyjmy się uprawnieniom programu passwd:

[user@X ~]# ll /usr/bin/passwd
-rwsr-xr-x 1 root root

Jak widać program ten ma ustawioną flagę "suid". Co to oznacza w praktyce?
W momencie uruchomienia przez użytkownika programu passwd, zostanie on uruchomiony z prawami super-użytkownika root, co umożliwi zapis pliku /etc/passwd, który w normalnych okolicznościach zwykły użytkownik może jedynie przeglądać bez możliwości edycji. Dzięki temu każdy użytkownik może zmienić swoje hasło bez logowania się na konto root (użytkownik nie zostanie nawet poinformowany o fakcie nadanie uprawnień root'a).
Na podobnej zasadzie działa sgid - uruchamiany program posiada prawa grupy do której plik należy (uprawnienia użytkownika są takie, jakie posiada użytkownik, który ten program uruchomił).

Suid i sgid ustawia się za pomocą polecenia chmod:

chmod u+s program   - ustawia suid
chmod g+s program   - ustawia sgid
chmod 4xyz program  - ustawia suid, kod numeryczny
chmod 2xyz program  - ustawia sgid, kod numeryczny
chmod 6xyz program  - ustawia suid i sgid jednocześnie, kod numeryczny
Uwaga
Flagi suid i sgid stanowią potencjalne zagrożenie dla bezpieczeństwa systemu. Powinno się je stosować tylko w uzasadnionych przypadkach.

Bit lepkości (sticky bit)

Polecenie chmod umożliwia ustawienie tzw. bitu lepkości. Jeśli program ma ustawiony bit lepkości, to po zakończeniu jego działania będzie on nadal przechowywany w pamięci komputera (co powinno przyśpieszyć jego ponownie uruchomienie). Ustawienie bitu lepkości dla pliku lub katalogu spowoduje, że tylko jego właściciel będzie mógł go usunąć. Sticky bit jest reprezentowany przez literę t po sekcji uprawnień dla pozostałych użytkowników, np:

-rwxr-xrwxt 1 root root

Do ustawienia bitu lepkości stosuje się składnię:

chmod +t nazwa_pliku     - kod symboliczny
chmod 1xyz nazwa_pliku   - kod numeryczny

Polecenie umask

Za pomocą polecenia umask można zmienić domyślne uprawnienia dla nowo tworzonych plików i katalogów. Domyślną maskę otrzymamy wydając polecenie umask bez parametrów:

[user@X ~]# umask
0002
[user@X ~]# umask -S
u=rwx,g=rwx,o=rx

Otrzymana wartość jest łączona z uprawnieniami 0666 dla plików , oraz 0777 dla katalogów. Dopiero po tej operacji otrzymuje się numeryczną wartość uprawnień nadawanych nowym plikom.
Jeśli chcemy ustalić jakie uprawnienia są nadawane za pomocą użytej maski, należy odjąć od domyślnych wartości uprawnień plików i katalogów wartość zastosowanej maski:

uprawnienia dla:       plików   katalogów
--------------------------------------------
wartość domyślna:       0666      0777
maska:                  0002      0002
--------------------------------------------
stosowane uprawnienia:  0664      0775
zapis symboliczny:     rw-rw-r-- rwxrwxr-x

Analogicznie jeśli odejmiemy od wartości domyślnych (0666,0777) stosowane uprawnienia otrzymamy wartość maski.

Przykładowa maska.

[user@X ~]# umask 0077
[user@X ~]# touch plik
[user@X ~]# mkdir katalog
[user@X ~]# ll
drwx------ 2 user user ... katalog
-rw------- 1 user user ... plik