Narzędzia użytkownika

Narzędzia witryny


materialy:podstawy-administracji:uprawnienia

Uprawnienia do plików i katalogów

Wstęp

Podstawowe uprawnienia do plików i katalogów można wyświetlić w systemie Linux za pomocą jednej z podstawowych komend do wylistowania obiektów w katalogu ls z parametrem -l:

Przykład wylistowania obiektów wraz z uprawnieniami z katalogu /etc/ssh/

[root@lpi-c7 kasia]# ls -l /etc/ssh/
razem 268
-rw-------. 1 root root     242153 06-10 03:15 moduli
-rw-r--r--. 1 root root       2123 06-10 03:15 ssh_config
-rw-------. 1 root root       4442 06-10 03:15 sshd_config
-rw-r-----. 1 root ssh_keys    227 10-17 18:54 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 10-17 18:54 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys   1679 10-17 18:54 ssh_host_rsa_key
-rw-r--r--. 1 root root        382 10-17 18:54 ssh_host_rsa_key.pub

Znaki od 2-go do 10-go oznaczają uprawnienia dla danego obiektu. Są to trzy grupy znaków rwx. Każdy ze znaków r, w, x lub - w określonym miejscu oznacza określone uprawnienie lub jego brak. Każda z trzech grup odnosi się do właściciela obiektu, grupy przypisanej danemu obiektowi oraz do wszystkich pozostałych użytkowników. Dokładny opis uprawnień przedstawiony jest niżej w tym dokumencie.

Kolumny 3 i 4 wyniku komendy ls -l wyświetlają kto jest właścicielem pliku (kol. 3) oraz która grupa jest właścicielem pliku (kol. 4). Na postawie powyższego przykładu można powiedzieć, że plik właścicielem pliku /etc/ssh/ssh_host_ecdsa_key jest konto root oraz grupa ssh_keys.

Właściciele plików i katalogów

Każdy plik i katalog systemu plików Linux należy do określonego użytkownika (nazywany on jest właścicielem pliku). Każdy obiekt jest również przypisany do grupy i potocznie mówi się, że plik lub katalog należy do tej grupy (ona jest jego właścicielem).

Kolumny 3 i 4 wyniku komendy ls -l wyświetlają kto jest właścicielem pliku (kol. 3) oraz która grupa jest właścicielem pliku (kol. 4).

Każdy nowo tworzony obiekt ma automatycznie ustawianego właściciela - jest nim użytkownik, który utworzył obiekt oraz automatycznie ustawianą grupę-właściciela, którą jest podstawowa grupa do której należy użytkownik.

Przykładowo, Kasia należy do podstawowej grupy księgowi:

[kasia@lpi-c7 ~]$ id
uid=1004(kasia) gid=1005(ksiegowi) grupy=1005(ksiegowi),1006(dokumentyfirmy) 

Każdy tworzony przez nią obiekt będzie miał ustawionego właściciela kasia oraz grupę ksiegowi:

[kasia@lpi-c7 ~]$ touch nowy-plik
[kasia@lpi-c7 ~]$ mkdir nowy-katalog
[kasia@lpi-c7 ~]$ ls -ld nowy*
drwxr-xr-x. 2 kasia ksiegowi 6 11-23 18:49 nowy-katalog
-rw-r--r--. 1 kasia ksiegowi 0 11-23 18:49 nowy-plik

Zajrzyj tutaj jeśli poszukujesz informacji w jaki sposób utworzyć konta użytkowników lub zmienić przynależność użytkownika do grup.

Zmiana właściciela pliku

Zmiany właściciela dokonuje się przy pomocy komendy chown i może tego dokonać jedynie administrator - konto root. Składnia polecenia:

Składnia: chown [OPCJA]... [WŁAŚCICIEL][:[GRUPA]] PLIK...
    albo: chown [OPCJA]... --reference=PLIK_WZ PLIK...

I tak aby zmienić właściciela pliku nowy-plik na root i jednocześnie grupę na ksiegowi:

[root@lpi-c7 ~]# chown root:sshd /home/kasia/nowy-plik 
[root@lpi-c7 ~]# ls -l /home/kasia/nowy-plik 
-rw-rw-rw-. 1 root sshd 0 11-23 18:49 nowy-plik

Aby ponownie zmienić właściciela tego samego pliku ale na użytkownika kasia:

[root@lpi-c7 ~]# chown kasia /home/kasia/nowy-plik 
[root@lpi-c7 ~]# ls -l /home/kasia/nowy-plik 
-rw-rw-rw-. 1 kasia sshd 0 11-23 18:49 /home/kasia/nowy-plik

Dość wygodnym jest użycie uprawnień wzorcowych, to znaczy ustawienie właścicieli tak jak w obiekcie referencyjnym:

[root@lpi-c7 ~]# ls -ld ~kasia/nowy*
drwxr-xr-x. 2 kasia ksiegowi 6 11-23 18:49 /home/kasia/nowy-katalog
-rw-rw-rw-. 1 kasia sshd     0 11-23 18:49 /home/kasia/nowy-plik
[root@lpi-c7 ~]# chown --reference=/home/kasia/nowy-plik /home/kasia/nowy-katalog
[root@lpi-c7 ~]# ls -ld ~kasia/nowy*
drwxr-xr-x. 2 kasia sshd 6 11-23 18:49 /home/kasia/nowy-katalog
-rw-rw-rw-. 1 kasia sshd 0 11-23 18:49 /home/kasia/nowy-plik

Jeśli chcemy zmienić uprawnienia w katalogu oraz rekursywnie w plikach i podkatalogach w nim się znajdujących użyć parametru -R dla komendy chown.

Aby zmienić samą grupę, która ma być właścicielem pliku można użyć komendy chgrp (również dostępnej tylko dla root).

[root@lpi-c7 ~]# ls -ld ~kasia/nowy*
drwxr-xr-x. 2 kasia sshd 6 11-23 18:49 /home/kasia/nowy-katalog
-rw-rw-rw-. 1 kasia sshd 0 11-23 18:49 /home/kasia/nowy-plik
[root@lpi-c7 ~]# chgrp kasia ~kasia/nowy-plik 
[root@lpi-c7 ~]# ls -ld ~kasia/nowy*
drwxr-xr-x. 2 kasia sshd  6 11-23 18:49 /home/kasia/nowy-katalog
-rw-rw-rw-. 1 kasia kasia 0 11-23 18:49 /home/kasia/nowy-plik

Podstawowe uprawnienia do plików i katalogów

Opis uprawnień dla pliku

Uprawnienia dla pliku:

  • r - read - odczyt zawartości pliku.
  • w - write - modyfikacja zawartości pliku.
  • x - eXecute - uruchamianie pliku - skryptu lub pliku binarnego (uwaga: uprawnienie nie ma mocy, jeśli jednocześnie nie będzie uprawnienia odczytu - r).

Przykład najczęściej spotykanych uprawnień do plików wraz z wyjaśnieniem:

  • rw- - możliwość odczytania zawartości i modyfikacji pliku - najczęściej spotykane uprawnienia dla własnych, zwykłych, nieuruchomieniowych plików.
  • rwx - możliwość odczytania, modyfikacji i uruchamiania pliku - najczęściej spotykane uprawnienia dla własnych skryptów.
  • r-x - możliwość uruchamiania pliku (samo uprawnienie --x nie da możliwości uruchamiania pliku) - najczęściej spotkany dla plików binarnych, które użytkownik może uruchomić.
  • r-- - możliwość jedynie odczytania zawartości pliku - najczęściej spotykane uprawnienia dla niewłasnych plików nieuruchomieniowych z prawem do odczytu.
  • --- - brak uprawnień do pliku - najczęściej spotykane uprawnienia dla niewłasnych plików.

Zestawy uprawnień dla plików rzadziej spotykane:

  • -w- - możliwość modyfikacji pliku bez możliwości odczytu: można do pliku dopisać dane lub nadpisać cały plik, ale nie można zawartości odczytać.

Błędne zestawy uprawnień dla plików:

  • --x - uprawnienia uruchomienia pliku - prawo nie ma znaczenia bez uprawnienia odczytu pliku.

Opis uprawnień dla katalogu

Uprawnienia dla katalogu:

  • r - read - wylistowanie zawartości katalogu (listy nazw plików i katalogów).
  • w - write - możliwość tworzenia i kasowania obiektów znajdujących się w katalogu, uprawnienie w dla katalogu nie ma żadnej mocy bez uprawnienia x. Uwaga: dzięki uprawnieniom wx na katalogu można z niego kasować pliki do których użytkownik nie ma żadnych uprawnień na poziomie pliku a nawet pliki, które do niego nie należą.
  • x - eXecute - możliwość wylistowania uprawnień do obiektów znajdujących się w katalogu (tylko, jeśli idzie w parze z uprawnieniem r) oraz możliwość przechodzenia przez katalog do jego podkatalogów. Uprawnienie x wraz z uprawnieniem w daje możliwość kasowania obiektów znajdujących się w katalogu. Uprawnienie x wraz z uprawnieniem r daje możliwość wylistowania obiektów katalogu i ich uprawnień. Uprawnienie x należy do jednych z najważniejszych, gdyż jego brak praktycznie odcina dostęp do katalogu, do całej jego zawartości wraz z podkatalogami.

Przykład najczęściej spotykanych zestawów uprawnień do katalogu wraz z wyjaśnieniem:

  • rwx - pełne uprawnienia do katalogu - najczęściej spotykane we własnych katalogach.
  • r-x - uprawnienia do wejścia do katalogu, wylistowania jego zawartości oraz przejścia do jego podkatalogów (jeśli ich uprawnienia na to pozwalają).
  • --- - brak uprawnień do katalogu.

Rzadko spotykane zestawienia uprawnień do katalogu:

  • --x - uprawnienia pozwalające na wejście do podkatalogów, jeśli znamy ich nazwy i ich uprawnienia pozwalają na taką operację; dzięki tak ustawionym uprawnieniom nie dowiemy się jakie są obiekty w tym katalogu, ale jeśli znamy ścieżkę do istniejącego podkatalogu do którego mamy uprawnienia możemy z tego podkatalogu korzystać w ramach jego uprawnień.

Błędne zestawy uprawnień do katalogów:

  • r-- - samo uprawnienie read dla katalogu nie da nam nic poza listę obiektów, bez ich uprawnień i informacji kto jest właścicielem, potrzebne dodatkowo uprawnienie x.
  • -w- - ustawienie jedynie uprawnienia write dla katalogu nie da żadnych uprawnień do obiektów tam się znajdujących; aby mieć możliwość modyfikacji plików musi być dodatkowo nadane uprawnienie x.
  • rw- - ustawienie praktycznie nie daje żadnych uprawnień poza wylistowaniem nazw obiektów w katalogu, ale bez podania uprawnień do nich.
  • -wx - uprawnienie pozwalające na tworzenie i kasowanie plików w katalogu ale tylko wtedy, gdy dokładnie znamy ich nazwy (brak r nie pozwoli wylistować, jakie pliki aktualnie znajdują się w katalogu). Takie zestawienie nie jest błędne ale jest praktycznie niespotykane.

Wyświetlanie uprawnień

Uprawnienia do plików można wyświetlić za pomocą komendy ls -l.

[kasia@lpi-c7 ~]$ ls -l
razem 4
drwxr-x---. 3 kasia ksiegowi 52 11-23 18:04 katalog
drwxr-xr-x. 2 kasia sshd      6 11-23 18:49 nowy-katalog
-rw-rw-rw-. 1 kasia kasia     0 11-23 18:49 nowy-plik
-rw-r-----. 1 kasia ksiegowi 19 11-23 17:09 wzor

9 znaków - od 2 do 10 włącznie - określa uprawnienia dla trzech zbiorów użytkowników: właściela, grupy właściciela oraz pozostałych użytkowników.

Na podstawie pliku wzor:

  • pierwszy blok rw- oznacza uprawnienia dla właściciela pliku - w tym wypadku dla użytkownika kasia
  • drugi blok r-- oznacza uprawnienia dla grupy, która jest właścicielem pliku - w tym wypadku dla grupy ksiegowi
  • trzeci blok --- oznacza uprawnienia dla wszystkich pozostałych kont w systemie - tych, którzy nie są kasią ani nie należą do grupy ksiegowi

Podsumowując uprawnienia odnośnie pliku wzor:

  • Kasia ma uprawnienia odczytu zawartości i modyfikowania pliku.
  • Użytkownicy należący do grupy ksiegowi mają uprawnienia odczytu zawartości pliku.
  • Pozostali użytkownicy nie mają żadnych praw do pliku.

Uprawnienia do katalogu katalog wskazują, że:

  • Kasia ma pełne uprawnienia do tego katalogu.
  • Użytkownicy należący do grupy ksiegowi mogą wylistować zawartość katalogu ale nie mogą tworzyć w nim nowych plików, zmieniać nazw istniejących plików czy kasować ich.
  • Pozostali użytkownicy nie mają żadnych praw katalogu.

Zmiana uprawnień

Zmianę uprawnień można dokonać za pomocą komendy chmod.

Notacja symbliczna

chmod może przyjmować składnię symboliczną:

chmod [ugoa][+­-=][rwxst] file

u - właściciel
g - grupa
o - wszyscy inny
a - wszyscy

+ - nadanie uprawnienia
- - zdjęcie uprawniania
= - przypisanie określonego zestawu uprawnień

r - prawo read
w - prawo write
x - prawo execute
s - suid/sgid
t - sticky bit

Przykładowo, aby ustawić uprawnienia rwxrw----- dla pliku notes

[kasia@lpi-c7 ~]$ chmod u=rwx,g=rw-,o=--- notes
[kasia@lpi-c7 ~]$ ls -l notes
-rwxrw----. 1 kasia ksiegowi 53 11-23 23:55 notes

Aby dodać uprawnienia x grupie oraz r-x pozostałym użytkownikom:

[kasia@lpi-c7 ~]$ chmod g+x,o+rx notes
[kasia@lpi-c7 ~]$ ls -l notes
-rwxrwxr-x. 1 kasia ksiegowi 53 11-23 23:55 notes

Aby ustawić uprawnienia rw- wszystkim użytkownikom:

[kasia@lpi-c7 ~]$ chmod a=rw notes
[kasia@lpi-c7 ~]$ ls -l notes
-rw-rw-rw-. 1 kasia ksiegowi 53 11-23 23:55 notes

Aby zdjąć grupie uprawnienia w a pozostałym użytkownikom rw:

[kasia@lpi-c7 ~]$ ls -l notes
-rw-r-----. 1 kasia ksiegowi 53 11-23 23:55 notes

Notacja numeryczna

chmod może operować na składni numerycznej. Każdy typ uprawnienia ma określoną wartość:

  • r - 4
  • w - 2
  • x - 1

Zestaw uprawnień jest zamieniona na liczbę bedącą sumą powyższych wartości. Przykładowe zestawy:

  • rwx jest reprezentowany przez 7 (4+2+1)
  • rw- jest reprezentowany przez 6 (4+2)
  • r-- jest reprezentowany przez 4
  • r-x jest reprezentowany przez 5 (4+1)

Pełne uprawnienia widoczne w ls -l, przykładowo:

[kasia@lpi-c7 ~]$ ls -l
razem 4
-rw-r--r--. 1 kasia ksiegowi  0 11-24 00:29 dokument.txt
drwxr-xr-x. 2 kasia ksiegowi  6 11-24 00:29 katalog1
-rw-r-----. 1 kasia ksiegowi 53 11-23 23:55 notes

Można byłoby przedstawić w formie:

  • 644 (rw, r, r) dla dokument.txt
  • 755 dla katalog1
  • 640 dla notes

Za pomocą zapisu numerycznego można zmienić dość szybko uprawniania:

  • rwxrwxrwx jako 777
  • r-xr-xr-x jako 555
  • rwxr-xr-- jako 754

Przykład zastosowania:

[kasia@lpi-c7 ~]$ chmod 660 dokument.txt 
[kasia@lpi-c7 ~]$ chmod 700 katalog1
[kasia@lpi-c7 ~]$ chmod 744 notes 
[kasia@lpi-c7 ~]$ ls -l
razem 4
-rw-rw----. 1 kasia ksiegowi  0 11-24 00:29 dokument.txt
drwx------. 2 kasia ksiegowi  6 11-24 00:29 katalog1
-rwxr--r--. 1 kasia ksiegowi 53 11-23 23:55 notes

Uprawnienia przypisywane nowym plikom i katalogom

Po utworzeniu nowego pliku lub katalogu ustawiane są odpowiednie uprawnienia.

Każdy nowo tworzony plik ma automatycznie ustawianego właściciela - jest nim użytkownik, który utworzył plik. Grupą-właścicielem staje się podstawowa grupa do której należy użytkownik, który utworzył plik.

Same uprawnienia nowych obiektów zależą od aktualnie ustawionego parametru umask dla użytkownika, który tworzy nowe pliki i katalogi.

Wartość umask można wyświetlić wywołując komendę:

[kasia@lpi-c7 ~]$ umask
0022

Gdyby wartość umask byłaby równa 0000 to uprawnienia domyślne miałyby wartość:

[kasia@lpi-c7 ~]$ umask 0000
[kasia@lpi-c7 ~]$ touch plik2
[kasia@lpi-c7 ~]$ mkdir katalog2
[kasia@lpi-c7 ~]$ ls -ld *2
drwxrwxrwx. 2 kasia ksiegowi 6 11-23 23:14 katalog2
-rw-rw-rw-. 1 kasia ksiegowi 0 11-23 23:13 plik2

Powyższe pokazuje, że domyślne uprawnienia przy masce 0000 to

  • dla pliku 0666;
  • dla katalogu 0777.

Nadając odpowiednią wartość umask można ograniczyć domyślne uprawnienia.

Algorytm obniżenia uprawnień polega na wykonaniu operacji logicznej AND na wartościach binarnych:

  • negacji umask
  • domyślnych uprawnień przy umask 0000

Przykładowo, dla umask 0027:

Umask:                0027
NegUmask:             7750

Dla katalogu:
Permissions           0777
NegUmask              7750
--------------------------
AND (NewPermissions)  0750

Dla pliku:
Permissions           0666
NegUmask              7750
--------------------------
AND (NewPermissions)  0640

Na dowód:

[kasia@lpi-c7 ~]$ umask 0027
[kasia@lpi-c7 ~]$ touch plik3
[kasia@lpi-c7 ~]$ mkdir katalog3
[kasia@lpi-c7 ~]$ ls -ld *3
drwxr-x---. 2 kasia ksiegowi 6 11-23 23:19 katalog3
-rw-r-----. 1 kasia ksiegowi 0 11-23 23:19 plik3

Jeśli umask przyjął by wartość 0125 (raczej niespotykana wartość, ale przedstawiana dla demonstracji) to domyślne uprawnienia dla katalogu będą miały wartość:

Umask:                0125
NegUmask:             7652

Dla katalogu:
Permissions           0777
NegUmask              7652
--------------------------
AND (NewPermissions)  0652

Dla pliku:
Permissions           0666
NegUmask              7652
--------------------------
AND (NewPermissions)  0642
<code>

Na dowód:
<code>
[kasia@lpi-c7 ~]$ umask 0125
[kasia@lpi-c7 ~]$ touch plik4
[kasia@lpi-c7 ~]$ mkdir katalog4
[kasia@lpi-c7 ~]$ ls -ld *4
drw-r-x-w-. 2 kasia ksiegowi 6 11-23 23:22 katalog4
-rw-r---w-. 1 kasia ksiegowi 0 11-23 23:22 plik4

Domyślna wartość umask dla użytkowników w systemie jest ustawiana w skryptach logowania.

Dobieranie umask do docelowych domyślnych uprawnień

Jeśli chcemy ustawić uprawnienia domyślne przy nowo tworzonych plikach i katalogach musimy ustawić odpowiednią wartość umask. Niech pomoc w tym zakresie stanowi poniższa tabela:

Docelowe domyślne uprawnienia dla pliku Docelowe domyślne uprawnienia dla katalogu Wartość umask, która powinna być przypisana Opis
6 (rw-) 7 (rwx) 0 Nie zdejmuje uprawnień, użyj domyślnych (odczyt zapis pliku, pełne prawa na katalogu)
4 (r--) 5 (r-x) 2 Zdejmuje z domyślnych uprawnienia modyfikacji zawartości pliku i zawartości katalogu
0 (---) 1 (--x) 6 Zdejmuje z domyślnych wszystkie uprawnienia dla plików, zdejmuje wszystkie uprawnienia dla katalogów oprócz „przechodzenia”
0 (---) 0 (---) 7 Zdejmuje wszystkie uprawnienia

Inne konfiguracje uprawnień na katalogach nie są spotykane w praktyce, zatem nie ma co rozważać (chyba, że teoretycznie) ustawień umask z wartościami 1, 3, 4, 5.

Przykłady:

  • Przykład 1 (umask 002)
    • domyślne uprawnienia dla pliku to rw-rw-r--
    • domyślne uprawnienia dla katalogu to rwxrwxr-x
  • Przykład 2 (umask 027)
    • domyślne uprawnienia dla pliku to rw-r-----
    • domyślne uprawnienia dla katalogu to rwxr-x---
  • Przykład 3 (umask 277)
    • domyślne uprawnienia dla pliku to r--------
    • domyślne uprawnienia dla katalogu to r-x------

Więcej informacji odnośnie umask i kalkulacji azmiany uprawnień można znaleźć na wartościowej stronie Artura Pyszczuka

Dodatkowe uprawnienia do plików i katalogów

Sticky bit

Sticky bit obecnie jest ignorowany dla plików i ma znacznie tylko, jeśli jest przypisany dla katalogów. Nadanie katalogowi atrybutu sticky bit ogranicza uprawnienia użytkowników, aby nie mogli skasować z katalogu plików i katalogów, jeśli nie są ich właścicielami. Uwaga: nie dotyczy to właściciela katalogu dla którego przypisany jest sticky bit.

Bez sticky bit Kasia jest w stanie skasować plik /home/kasia/wspolny/plik-admina bo ma uprawnienia w do katalogu /home/kasia/wspolny/ (należy do grupy księgowi, którzy mają uprawnienia w):

[kasia@lpi-c7 ~]$ id
uid=1004(kasia) gid=1005(ksiegowi) grupy=1005(ksiegowi)
[kasia@lpi-c7 ~]$ ls -ld wspolny
drwxrwx---. 2 root ksiegowi 40 11-24 00:56 wspolny
[kasia@lpi-c7 ~]$ ls -l wspolny/
razem 0
-rw-r--r--. 1 root  root     0 11-24 00:56 plik-admina
-rw-r--r--. 1 kasia ksiegowi 0 11-24 00:51 plik-kasi
[kasia@lpi-c7 ~]$ rm wspolny/plik-admina 
rm: usunąć zabezpieczony przed zapisem pusty zwykły plik „wspolny/plik-admina”? y
[kasia@lpi-c7 ~]$ ls -l wspolny/
razem 0
-rw-r--r--. 1 kasia ksiegowi 0 11-24 00:51 plik-kasi

Jeśli do katalogu przypisany byłby sticky bit Kasia mogłaby kasować tylko swoje pliki:

[kasia@lpi-c7 ~]$ ls -ld wspolny/
drwxrwx--T. 2 root ksiegowi 48 11-24 01:00 wspolny/
[kasia@lpi-c7 ~]$ ls -l wspolny/
razem 0
-rw-r--r--. 1 root  root     0 11-24 00:59 kolejny-plik-admina
-rw-r--r--. 1 kasia ksiegowi 0 11-24 01:00 plik-kasi
[kasia@lpi-c7 ~]$ rm wspolny/kolejny-plik-admina 
rm: usunąć zabezpieczony przed zapisem pusty zwykły plik „wspolny/kolejny-plik-admina”? y
rm: nie można usunąć „wspolny/kolejny-plik-admina”: Operacja niedozwolona
[kasia@lpi-c7 ~]$ rm wspolny/plik-kasi 
[kasia@lpi-c7 ~]$ ls -l wspolny/
razem 0
-rw-r--r--. 1 root root 0 11-24 00:59 kolejny-plik-admina

SUID / SGID

SUID

Atrybut SUID (set user id) jest ustawiany zazwyczaj na pliku binarnym uruchomieniowym lub skrypcie. Plik binarny czy skrypt mogą uruchomić użytkownicy, którzy maja do tego pliku uprawnienia read i execute. SUID zmienia użytkownika w kontekście którego program ten jest uruchomiony - jest nim zawsze właściciel pliku.

Przykładowo - właścicielem pliku binarnego /usr/sbin/pobierz-dane jest konto janek, jednocześnie wszyscy użytkownicy należący do grupy analitycy mają prawo uruchamiania tego pliku. Dzięki SUID ustawionym na skrypcie cały skrypt będzie działał tak, jakby uruchamiał go Janek, niezależnie który analityk ten program uruchomi.

Podstawowym przykładem wykorzystania tego atrybutu jest program passwd. Hasła użytkowników są przechowywane w pliku /etc/shadow do którego dostęp odczyt i zapis ma jedynie root. Ze względów oczywistych nikt poza kontem root nie powinien mieć dostępu do tego pliku. Jednak każdy użytkownik może zmienić hasło w systemie używając komendy passwd z ustawionym atrybutem SUID. Jest to możliwe dzięki temu, że program binarny z SUID po uruchomieniu pracuje w kontekście administratora. Sam użytkownik nie ma dostępu do wrażliwych danych na systemie, ale ma do niego dostęp program którego używa. Programy z ustawionym SUID są najczęściej programami, które pozwalają zwykłym użytkownikom na dostęp do zasobów do których ma tylko administrator. Sam program powinien dbać o to, aby operacje na danych były wykonywane bezpiecznie (program passwd nie odczytuje haseł, nie zmienia haseł innych użytkowników, jeśli uruchamia je zwykły user).

Uwaga: Niektóre dystrybucje ignorują atrybut SUID dla skryptów ze względów bezpieczeństwa.

Aby nadać atrybut SUID należy użyć komendy chmod na przykład z argumentem u+s

root@itmz-srv05:/usr/local/bin# ls -la po*
-rwxr-x---  1 root staff   61 May 24 12:28 pobierz-dane
root@itmz-srv05:/usr/local/bin# chmod u+s pobierz-dane 
root@itmz-srv05:/usr/local/bin# ls -la po*
-rwsr-x---  1 root staff   61 May 24 12:28 pobierz-dane

root@itmz-srv05:~# ls -la `which passwd`
-rwsr-xr-x 1 root root 45396 May 25  2012 /usr/bin/passwd

Ponieważ SUID nieodpowiednio użyty może spowodować sporą lukę w systemie, należy używać go ostrożnie i tylko tam gdzie jest to niezbędne. Proszę sobie wyobrazić konsekwencje ustawienia SUID na pliku /bin/rm.

Aby znaleźć w systemie plików z ustawionym SUID można użyć komendy find z parametrem -perm -4000

find /bin -perm -4000

SGID

Innym przydatnym atrybutem, tym razem przypisywanym głównie katalogom jest SGID. Katalog z tak ustawionym atrybutem ma tą właściwość, że wszystkie nowo tworzone pliki i katalogi w tym katalogu automatycznie dziedziczą GID (ID grupy właściciela) po tym katalogu. Jeśli utworzę katalog share z ustawioną grupą-właścicielem na marketing i atrybutem SGID to wszystkie pliki i katalogi w nim tworzone będę należeć również do grupy marketing.

Aby nadać atrybut SUID katalogowi należy użyć komendy chmod z argumentem g+s

root@itmz-srv05:/home# chmod g+s wspolne
root@itmz-srv05:/home# ls -lad wspolne
drwxrws--- 2 root marketing 4096 May 24 13:39 wspolne

Aby wyszukać w systemie katalogów z takimi uprawnieniami należy użyć komendy find z parametrem -perm -2000

Notacje numeryczna i symboliczna dla atrybutów Sticky Bit, SUID oraz SGID

Tak jak uprawnienia rwx mają swoją notację numeryczną dla szybkiego ustawienia uprawnień za pomocą chmod podobnie mają atrybuty plików:

  • suid - 4
  • sgid - 2
  • sticky bit - 1

I tak nadanie uprawnień rwxr-x--- z różnymi atrybutami można nadać przez:

[root@lpi-c7 kasia]# chmod 1750 wspolny/
[root@lpi-c7 kasia]# ls -ld wspolny/
drwxr-x--T. 2 root ksiegowi 32 11-24 01:02 wspolny/

[root@lpi-c7 kasia]# chmod 2750 wspolny/
[root@lpi-c7 kasia]# ls -ld wspolny/
drwxr-s---. 2 root ksiegowi 32 11-24 01:02 wspolny/

[root@lpi-c7 kasia]# chmod 4750 wspolny/program 
[root@lpi-c7 kasia]# ls -ld wspolny/program 
-rwsr-x---. 1 root ksiegowi 0 11-24 01:26 wspolny/program

Notacja symboliczna dla atrybutów:

u+s - suid
g+s - sgid
+t - sticky bit

ACL

Jednym z największych ograniczeń podstawowego modelu uprawnień jest możliwość przypisania uprawnień jedynie dla:

  • jednego użytkownika (właściciela)
  • jednej grupy (grupy-właściciela)

Istnieje wobec powyższego problem, gdy do obiektu mają mieć dostęp na przykład dwie grupy użytkowników (choć można to obejść przez utworzenie kolejnej grupy i dopisanie do niej użytkowników z obu poprzednich). Niemożliwe jest przypisanie różnym grupom różnych uprawnień jak i różnym użytkownikom różnych uprawnień.

Rozwiązaniem jest zastosowanie ACL (Access Control List) na systemach plików Linux. ACL daje bardziej elastyczną możliwość nadawania uprawnień dowolnej liczbie grup i dowolnej liczbie użytkowników w sposób niezależny.

Aby wyświetlić aktualne uprawnienia do pliku z pomocą ACL należy użyć komendy getfacl:

[kasia@lpi-c7 ~]$ getfacl notes.txt 
# file: notes.txt
# owner: kasia
# group: ksiegowi
user::rw-
group::r--
other::r--

Nadanie lub modyfikowania uprawnień ACL wykonuje się przy pomocy komendy setfacl. Składnia:

setfacl --modify [u|g]:nazwa-usera-lub-grupy:[r|w|x|-] plik
setfacl --remove [u|g]:nazwa-uesra-lub-grupy pllik

Przykładowo, aby kontu monika dać uprawnienia odczytu i zapisu do pliku notes.txt bez modyfikowania obecnych uprawnień:

[kasia@lpi-c7 ~]$ setfacl --modify u:monika:rw notes.txt 
[kasia@lpi-c7 ~]$ getfacl notes.txt 
# file: notes.txt
# owner: kasia
# group: ksiegowi
user::rw-
user:monika:rw-
group::r--
mask::rw-
other::r--

Aby kontu magda dać uprawnienia jedynie odczytu do tego samego pliku:

[kasia@lpi-c7 ~]$ setfacl --modify u:magda:r notes.txt 
[kasia@lpi-c7 ~]$ getfacl notes.txt 
# file: notes.txt
# owner: kasia
# group: ksiegowi
user::rw-
user:monika:rw-
user:magda:r--
group::r--
mask::rw-
other::r--

Aby usunąć konto magda z ACL dla pliku notes.txt

[kasia@lpi-c7 ~]$ setfacl --remove u:magda notes.txt 
[kasia@lpi-c7 ~]$ getfacl notes.txt 
# file: notes.txt
# owner: kasia
# group: ksiegowi
user::rw-
user:monika:rw-
group::r--
group:dokumentyfirmy:r--
mask::rw-
other::r--

Aby użytkownikom grupy dokumentyfirmy nadać uprawnienia odczytu pliku notes.txt:

[kasia@lpi-c7 ~]$ setfacl --modify g:dokumentyfirmy:r notes.txt 
[kasia@lpi-c7 ~]$ getfacl notes.txt 
# file: notes.txt
# owner: kasia
# group: ksiegowi
user::rw-
user:monika:rw-
user:magda:r--
group::r--
group:dokumentyfirmy:r--
mask::rw-
other::r--

Gdy plik posiada dodatkowe uprawnienia w ACL na 11 znaku wyniku komendy ls -l pojawia się plus - +:

[kasia@lpi-c7 ~]$ ls -l notes.txt 
-rw-rw-r--+ 1 kasia ksiegowi 7 11-24 01:35 notes.txt

Uwaga: niektóre dystrybucje nie mają domyślnie zainstalowanej funkcjonalności ACL np. Debian. Aby ACL dział w Debianie 7 należy doinstalować pakiet acl:

apt-get install acl
materialy/podstawy-administracji/uprawnienia.txt · ostatnio zmienione: 2018/06/26 19:25 przez mzalewski

(C) 2017 ITMZ Mariusz Zalewski