Uprawnienia

Z Fedora Wiki
Skocz do: nawigacji, wyszukiwania

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:

  • unikalną nazwę użytkownika, wyświetlaną np. terminalu:
[user@X ~]#
  • UID - liczbowy identyfikator użytkownika. Użytkownik jest identyfikowany w systemie nie poprzez nazwę, a przez UID.

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:

  • GID - liczbowy identyfikator grupy. Można należeć do wielu grup, domyślną jest grupa o takim samym identyfikatorze co UID. Każda grupa posiada unikalny GID.

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:

  • r - odczytu pliku, czyli przeglądania jego zawartości. W przypadku katalogów będzie to oznaczać możliwość wypisania listy plików i podkatalogów w nim umieszczonych,
  • w - zapisu pliku, czyli modyfikowanie jego zawartości. W przypadku katalogów możliwe jest tworzenie i usuwanie plików w tym katalogu,
  • x - uruchomienia pliku wykonywalnego (programu, lub skryptu). W przypadku katalogów oznacza to dostęp do listy plików w nim zapisanych, oraz możliwość przejścia do tego katalogu, np. przez polecenie cd katalog.

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ć:

  • - - zwykły plik,
  • d - katalog,
  • l - link symboliczny,
  • b - specjalny plik blokowy,
  • c - specjalny plik znakowy,
  • s - gnazdo.

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

  • właściciela pliku (user) - pierwsze trzy oznaczenia po typie pliku,
  • grupy użytkowników (group) - następne trzy oznaczenia,
  • pozostałych użytkowników systemu (others) - następne trzy oznaczenia.

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:

  • właściciel pliku (user w przykładzie),
  • grupa do której dany plik należy (grupa user w przykładzie).


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

  • przykład.txt - to zwykły plik ("-"), który użytkownik user może przeglądać i modyfikować, nie może on natomiast uruchomić tego pliku (np: gdyby to był skrypt powłoki). Identyczne uprawnienia posiada także grupa do której plik.txt należy. Pozostali użytkownicy systemu mogą jedynie przeglądać zawartość tego pliku, bez prawa jego modyfikacji i uruchomienia. Właścicielem pliku jest użytkownik user, przykład.txt należy także do grupy user,
  • dokumenty - to katalog ("d"), do którego użytkownik i członkowie grupy user posiadają pełnię praw (rwx). Pozostali użytkownicy systemu mogą przeglądać jego zawartość, oraz przechodzić do niego, nie mogą oni natomiast umieszczać, lub usuwać w nim plików,
  • dowiązanie_do_przykład.txt - to link symboliczny ("l"), do którego użytkownik, grupa do której plik należy, oraz pozostali użytkownicy posiadają pełnię praw (rwx). Wydawałoby się, że każdy użytkownik może usunąć ten plik, jednak próba takiej czynności zakończy się niepowodzeniem:
[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:

  • -rw-rw-r-- user user - dla plików,
  • drwxrwxr-x user user - dla katalogów,
  • lrwxrwxrwx user user - dla 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
  • zakres - określa komu uprawnienia będą nadawane. Stosowane symbole to:
    • a - wszyscy użytkownicy,
    • u - użytkownik, właściciel pliku,
    • g - grupa do której plik należy,
    • o - użytkownicy spoza grupy.
  • operator - sposób nadania uprawnień:
    • + - dodanie uprawnień do pliku,
    • - - usunięcie istniejących uprawnień,
    • = - przypisanie uprawnień bez względu na to jakie uprawnienia dany plik posiadał.
  • uprawnienie - prawo do odczytu, zapisu, wykonania (rwx).

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.

  • dodanie uprawnienia do zapisu dla użytkowników spoza grupy:
[user@X ~]# chmod o+w przykład.txt
-rw-rw-rw- 1 user user
  • dodanie możliwości wykonania pliku przez użytkownika i grupę:
[user@X ~]# chmod ug+x przykład.txt
-rwxrwxrw- 1 user user
  • dodanie uprawnienia wykonania pliku przez wszystkich użytkowników:
[user@X ~]# chmod a+x przykład.txt
-rwxrwxrwx 1 user user
  • odjęcie prawa do modyfikacji(zapisu) pliku przez grupę oraz użytkowników spoza grupy:
[user@X ~]# chmod go-w przykład.txt
-rwxr-xr-x 1 user user
  • usunięcie uprawnień wszystkim użytkownikom:
[user@X ~]# chmod a-rwx przykład.txt
---------- 1 user user
  • powrót do uprawnień początkowych, bez względu na obecne:
[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

  • X - oznacza prawa użytkownika (pierwsza cyfra),
  • Y - prawa grupy,
  • Z - prawa pozostałych użytkowników.

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.

  • ustawienie uprawnień do odczytu i zapisu dla wszystkich użytkowników:
[user@X ~]# chmod 666 przykład.txt
-rw-rw-rw- 1 user user
  • pełne uprawnienia dla użytkownika, możliwość odczytu i wykonania dla grupy, brak jakichkolwiek uprawnień dla pozostałych użytkowników:
[user@X ~]# chmod 750 przykład.txt
-rwxr-x--- 1 user user
  • użytkownik ma prawo odczytu i zapisu pliku, grupa może tylko go wykonać, pozostali użytkownicy mają prawo tylko do odczytu:
[user@X ~]# chmod 614 przykład.txt
-rw---xr-- user user
  • usunięcie uprawnień wszystkim użytkownikom:
[user@X ~]# chmod 000 przykład.txt
---------- 1 user user
  • powrót do uprawnień początkowych:
[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:

  • R - rekursywna zmiana właściciela lub grupy w całej hierarchii katalogów,
  • --dereference - sprawdza dowiązania symboliczne i działa na plikach, które te wskazują,

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.

  • zmiana właściciela:
[root@X ~]# chown root przykład.txt
 -rw-rw-r-- 1 root user
  • zmiana grupy:
[root@X ~]# chgrp root przykład.txt
-rw-rw-r-- 1 root root
  • zmiana właściciela i grupy jednocześnie z wykorzystaniem UID, GID:
[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:

  • -G grupa - dodaje użytkownika jako członka wymienionych grup, np:
[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.

  • -d katalog - zmienia katalog domowy użytkownika,
  • -s powłoka - zmienia domyślną powłokę użytkownika,
  • -L/-U - wyłącza/włącza konto użytkownika (brak możliwość logowania przy -L, przywrócenie logowania przy -U),

useradd - utworzenie nowego konta,

useradd [opcje] nazwa_użytkownika

userdel - usunięcie konta użytkownika,

userdel [opcje] nazwa_użytkownika
  • -r - opcja nakazuje usunięcie także katalogu domowego kasowanego 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
Tip.png
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
Warn.png
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.

  • 0077 - stosując tą maskę jedynie właściciel pliku posiada uprawnienia odczytu/zapisu. Grupa i pozostali użytkownicy nie posiadają żadnych uprawnień:
[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
Osobiste
Przestrzenie nazw

Warianty
Działania
Wiki
Nawigacja
Inne
Narzędzia