Prawa w Linuksie (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Cześć wszystkim. To tłumaczenie artykułu z książki RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 i EX300.

Od siebie: Mam nadzieję, że artykuł będzie przydatny nie tylko dla początkujących, ale także pomoże bardziej doświadczonym administratorom uporządkować swoją wiedzę.

No to zaczynajmy.

Prawa w Linuksie (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Aby uzyskać dostęp do plików w systemie Linux, używa się uprawnień. Te uprawnienia są przypisywane trzem podmiotom: właścicielowi pliku, właścicielowi grupy oraz innemu podmiotowi (czyli wszystkim innym). W tym artykule dowiesz się, jak stosować uprawnienia.

Artykuł zaczyna się od przeglądu podstawowych pojęć, następnie omawia specjalne uprawnienia (Special permissions) i listy kontroli dostępu (ACL). Na koniec artykułu zostanie omówione konfigurowanie domyślnych praw dostępu przez umask, a także zarządzanie rozszerzonymi atrybutami użytkownika.

Zarządzanie własnością plików

Zanim omówisz uprawnienia, musisz znać rolę właściciela pliku i katalogu. Własność plików i katalogów jest kluczowa dla pracy z uprawnieniami. W tej sekcji najpierw dowiesz się, jak możesz zobaczyć właściciela. Następnie poznasz sposób zmiany właściciela grupy i użytkownika dla plików oraz katalogów.

Wyświetlanie właściciela pliku lub katalogu

W systemie Linux każdy plik i każdy katalog mają dwóch właścicieli: użytkownika i właściciela grupy.

Ci właściciele są ustalani przy tworzeniu pliku lub katalogu. Użytkownik, który tworzy plik, staje się jego właścicielem, a pierwotna grupa, do której należy ten sam użytkownik, także staje się właścicielem tego pliku. Aby określić, czy masz jako użytkownik prawa dostępu do pliku lub katalogu, powłoka sprawdza ich posiadanie.

Dzieje się to w następującej kolejności:

  1. Powłoka sprawdza, czy jesteś właścicielem pliku, do którego chcesz uzyskać dostęp. Jeśli jesteś tym właścicielem, otrzymujesz uprawnienia i powłoka przestaje sprawdzać.
  2. Jeśli nie jesteś właścicielem pliku, powłoka sprawdzi, czy jesteś członkiem grupy, która ma uprawnienia do tego pliku. Jeśli jesteś członkiem tej grupy, otrzymujesz dostęp do pliku z uprawnieniami, które zostały ustalone dla grupy, a powłoka przestaje sprawdzać.
  3. Jeśli nie jesteś ani użytkownikiem, ani właścicielem grupy, otrzymujesz prawa innych użytkowników (Other).

Aby zobaczyć aktualne przypisania właściciela, możesz użyć polecenia ls -l. To polecenie pokazuje użytkownika i właściciela grupy. Poniżej możesz zobaczyć ustawienia właściciela dla katalogów w katalogu /home.

[root@server1 home]# ls -l
total 8
drwx------. 3  bob            bob            74     Feb   6   10:13 bob
drwx------. 3  caroline       caroline       74     Feb   6   10:13 caroline
drwx------. 3  fozia          fozia          74     Feb   6   10:13 fozia
drwx------. 3  lara           lara           74     Feb   6   10:13 lara
drwx------. 5  lisa           lisa           4096   Feb   6   10:12 lisa
drwx------. 14 user           user           4096   Feb   5   10:35 user

Za pomocą polecenia ls możesz wyświetlić właściciela plików w danym katalogu. Czasami przydatne może być uzyskanie listy wszystkich plików w systemie, których właścicielem jest dany użytkownik lub grupa. Aby to zrobić, możesz użyć find. Argument find -user może być użyty do tego celu. Na przykład, poniższe polecenie pokazuje wszystkie pliki, których właścicielem jest użytkownik linda:

find / -user linda

Możesz również użyć find aby znaleźć pliki, których właścicielem jest dana grupa.

Na przykład, poniższe polecenie wyszukuje wszystkie pliki należące do grupy users:

find / -group users

Zmiana właściciela

Aby zastosować odpowiednie uprawnienia, pierwszą rzeczą, którą należy wziąć pod uwagę, jest własność. Do tego służy polecenie chown. Składnia tego polecenia jest prosta do zrozumienia:

chown kto co

Na przykład, poniższe polecenie zmienia właściciela katalogu /home/account na użytkownika linda:

chown linda /home/account

Zespół chown ma kilka opcji, z których jedna jest szczególnie przydatna: -R. Możesz się domyślić, co robi, ponieważ ta opcja jest także dostępna dla wielu innych poleceń. Umożliwia to rekurencyjne ustawienie właściciela, co pozwala na ustawienie właściciela bieżącego katalogu oraz wszystkiego, co się w nim znajduje. Poniższe polecenie zmienia właściciela dla katalogu /home i wszystkiego, co się pod nim znajduje, na użytkownika linda:

Obecnie właściciele wyglądają tak:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa    lisa    62 Sep 25 21:42 lisa

Wykonaj:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

Teraz użytkownik lisa stał się właścicielem katalogu account:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa    62 Sep 25 21:42 lisa

Zmiana właściciela grupy

Istnieją dwa sposoby zmiany właściciela grupy. Możesz to zrobić, używając chown, ale istnieje specjalna komenda o nazwie chgrp, która wykonuje tę pracę. Jeśli chcesz użyć komendy chown, użyj . lub : przed nazwą grupy.

Następna komenda zmienia właściciela grupy w /home/account na grupę account:

chown .account /home/account

Możesz używać chown do zmiany właściciela użytkownika i/lub grupy na kilka sposobów. Oto kilka przykładów:

  • chown lisa myfile1 ustawia użytkownika lisa jako właściciela pliku myfile1.
  • chown lisa.sales myfile ustawia użytkownika lisa jako właściciela pliku myfile, a także ustawia grupę sales jako właściciela tego samego pliku.
  • chown lisa:sales myfile to samo, co poprzednia komenda.
  • chown .sales myfile ustawia grupę sales jako właściciela pliku myfile bez zmiany właściciela użytkownika.
  • chown :sales myfile to samo, co poprzednia komenda.

Możesz użyć polecenia chgrp, aby zmienić właściciela grupy. Rozważmy następujący przykład, w którym możesz użyć chgrp aby ustawić grupę sales jako właściciela katalogu account:

chgrp .sales /home/account

Jak w przypadku chown, możesz użyć opcji -R z chgrp, a także rekurencyjnie zmieniać właściciela grupy.

Zrozumienie domyślnego właściciela

Mogłeś zauważyć, że gdy użytkownik tworzy plik, stosowane jest domyślne przypisanie właściciela.
Użytkownik, który tworzy plik, automatycznie staje się właścicielem tego pliku, a podstawowa grupa tego użytkownika automatycznie staje się właścicielem tego pliku. Zwykle jest to grupa wskazana w pliku /etc/passwd jako podstawowa grupa użytkownika. Jednak jeśli użytkownik jest członkiem wielu grup, może zmienić swoją efektywną grupę podstawową.

Aby wyświetlić aktualną efektywną grupę podstawową, użytkownik może użyć komendy groups:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Jeśli aktualny użytkownik linda chce zmienić efektywną grupę podstawową, użyje komendy newgrp, za którą następuje nazwa grupy, którą chce ustawić jako nową efektywną grupę podstawową. Po użyciu komendy newgrp grupa podstawowa będzie aktywna, dopóki użytkownik nie wprowadzi komendy exit lub nie wyloguje się.

Poniżej pokazano, jak użytkownik linda używa tej komendy, co powoduje, że grupą podstawową stała się grupa sales:

lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1

Po zmianie aktywnej grupy głównej wszystkie nowe pliki utworzone przez użytkownika będą miały tę grupę jako właściciela grupy. Aby powrócić do domyślnego ustawienia grupy głównej, użyj exit.

Aby móc korzystać z polecenia newgrp, użytkownik musi być członkiem grupy, którą chce użyć jako główną. Ponadto hasło grupowe może być używane dla grupy za pomocą polecenia gpasswd. Jeśli użytkownik użyje polecenia newgrp, ale nie jest członkiem docelowej grupy, powłoka prosi o hasło grupy. Po wprowadzeniu poprawnego hasła grupowego nowa efektywna grupa główna zostanie ustawiona.

Zarządzanie głównymi uprawnieniami

System uprawnień Linux został wynaleziony w latach 70-tych. Ponieważ potrzeby obliczeniowe były wówczas ograniczone, podstawowy system uprawnień był dość ograniczony. System ten wykorzystuje trzy uprawnienia, które można stosować do plików i katalogów. W tej sekcji dowiesz się, jak korzystać z tych uprawnień i je zmieniać.

Rozumienie uprawnień do odczytu, zapisu i wykonywania

Trzy podstawowe uprawnienia pozwalają ci czytać, zapisywać i wykonywać pliki. Efekt tych uprawnień różni się w zależności od zastosowania do plików lub katalogów. W przypadku pliku uprawnienie do odczytu daje ci prawo do otwarcia pliku w celu odczytu. Oznacza to, że możesz przeczytać jego zawartość, ale także, że twój komputer może otworzyć plik, aby coś z nim zrobić.

Plik wykonywalny, który potrzebuje dostępu do biblioteki, musi mieć na przykład dostęp do odczytu tej biblioteki. Oznacza to, że uprawnienie do odczytu jest najważniejszym uprawnieniem potrzebnym do pracy z plikami.

W przypadku katalogu odczyt pozwala wyświetlić zawartość tego katalogu. Należy pamiętać, że to uprawnienie nie pozwala na odczyt plików w katalogu. System uprawnień Linux nie zna dziedziczenia, a jedynym sposobem na odczytanie pliku jest skorzystanie z uprawnień do odczytu dla tego pliku.

Jak pewnie się domyślasz, uprawnienie do zapisu, jeśli dotyczy pliku, pozwala na zapis do pliku. Innymi słowy, umożliwia zmianę zawartości istniejących plików. Jednak nie pozwala na tworzenie lub usuwanie nowych plików ani na zmianę uprawnień do pliku. Aby to zrobić, musisz nadać uprawnienie do zapisu katalogowi, w którym chcesz utworzyć plik. W katalogach to uprawnienie również pozwala na tworzenie i usuwanie nowych podkatalogów.

Uprawnienie do wykonania to coś, czego potrzebujesz, aby wykonać plik. Nigdy nie jest ono ustawiane domyślnie, co sprawia, że Linux jest praktycznie całkowicie odporny na wirusy. Tylko ktoś z prawami zapisu do katalogu może stosować uprawnienie do wykonania.

Poniżej podsumowano użycie podstawowych uprawnień:

Prawa w Linuksie (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Użycie chmod

Aby zarządzać prawami, używa się polecenia chmod. Stosując chmod możesz ustawiać uprawnienia dla użytkownika (user), grupy (group) i innych (other). Możesz używać tego polecenia w dwóch trybach: trybie względnym i trybie bezwzględnym. W trybie bezwzględnym używa się trzech cyfr do ustawiania podstawowych uprawnień.

Prawa w Linuksie (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Przy ustawianiu uprawnień oblicz wartość, której potrzebujesz. Jeśli chcesz ustawić odczyt, zapis i wykonanie dla użytkownika, odczyt i wykonanie dla grupy oraz odczyt i wykonanie dla innych w pliku /somefile, używasz następującego polecenia chmod:

chmod 755 /somefile

Gdy używasz chmod w ten sposób, wszystkie bieżące uprawnienia zostaną zastąpione ustawionymi przez ciebie uprawnieniami.

Jeśli chcesz zmienić uprawnienia w odniesieniu do bieżących uprawnień, możesz użyć chmod w trybie względnym. Używając chmod w trybie względnym, pracujesz z trzema wskaźnikami, aby wskazać, co chcesz zrobić:

  1. Najpierw wskazujesz, dla kogo chcesz zmienić uprawnienia. Możesz wybrać pomiędzy użytkownikiem (u), grupą (g) i innymi (o).
  2. ). Następnie używasz operatora, aby dodać lub usunąć uprawnienia z bieżącego trybu lub ustawić je bezwzględnie.
  3. Na końcu używasz r, w i x, aby wskazać, jakie uprawnienia chcesz ustawić.

W trybie względnym możesz pominąć część „komu”, aby dodać lub usunąć uprawnienie dla wszystkich obiektów. Na przykład ta komenda dodaje uprawnienie do wykonania dla wszystkich użytkowników:

chmod +x somefile

Pracując w trybie względnym, możesz także używać bardziej zaawansowanych komend. Na przykład ta komenda dodaje uprawnienie do zapisu dla grupy i usuwa odczyt dla innych:

chmod g+w,o-r somefile

Podczas korzystania z chmod -R o+rx /data ustawiasz uprawnienie do wykonania dla wszystkich katalogów oraz dla plików w katalogu /data. Aby ustawić uprawnienie do wykonania tylko dla katalogów, a nie dla plików, użyj chmod -R o+ rX /data.

Wielka litera X zapewnia, że pliki nie otrzymają uprawnienia do wykonania, jeśli plik już nie ustawił uprawnienia do wykonania dla niektórych obiektów. To sprawia, że X jest bardziej sensownym sposobem zarządzania uprawnieniami do wykonania; unikniesz nadawania tego uprawnienia plikom, gdzie nie jest ono wymagane.

Zaawansowane uprawnienia

Oprócz podstawowych uprawnień, o których właśnie przeczytałeś, w systemie Linux istnieje również zestaw zaawansowanych uprawnień. Nie są to te uprawnienia, które ustalasz domyślnie, ale czasami stanowią przydatne uzupełnienie. W tej sekcji dowiesz się, czym są i jak je skonfigurować.

Zrozumienie zaawansowanych uprawnień SUID, GUID i sticky bit

Istnieją trzy zaawansowane uprawnienia. Pierwszym z nich jest uprawnienie do ustawiania identyfikatora użytkownika (SUID). W niektórych szczególnych przypadkach możesz zastosować to uprawnienie do plików wykonywalnych. Domyślnie użytkownik uruchamiający plik wykonywalny uruchamia go z własnymi uprawnieniami.

Dla zwykłych użytkowników zazwyczaj oznacza to, że korzystanie z programu jest ograniczone. Jednak w niektórych przypadkach użytkownik potrzebuje specjalnych uprawnień, aby wykonać określone zadanie.

Rozważmy na przykład sytuację, gdy użytkownik musi zmienić hasło. W tym celu użytkownik musi zapisać swoje nowe hasło w pliku /etc/shadow. Jednak ten plik jest niedostępny do zapisu dla użytkowników, którzy nie mają uprawnień root:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

Zezwolenie SUID oferuje rozwiązanie tego problemu. W narzędziu /usr/bin/passwd to zezwolenie jest stosowane domyślnie. Oznacza to, że podczas zmiany hasła użytkownik tymczasowo zyskuje uprawnienia roota, co pozwala mu na zapisywanie w pliku /etc/shadow. Możesz zobaczyć zezwolenie SUID w ls -l jak s miejscu, gdzie zazwyczaj spodziewasz się zobaczyć x dla uprawnień użytkowników:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd

Zezwolenie SUID może wydawać się przydatne (i w niektórych przypadkach rzeczywiście tak jest), ale jednocześnie jest potencjalnie niebezpieczne. Przy niewłaściwym zastosowaniu można nieumyślnie przyznać uprawnienia roota. Dlatego zalecam korzystanie z niego tylko z maksymalną ostrożnością.

Większości administratorów nigdy nie będzie musiało go używać; zobaczysz je tylko w niektórych plikach, w których system operacyjny musi ustawić je domyślnie.

Drugim specjalnym zezwoleniem jest identyfikator grupy (SGID). To zezwolenie ma dwa efekty. Gdy jest zastosowane do pliku wykonywalnego, nadaje użytkownikowi, który go wykonuje, uprawnienia właściciela grupy tego pliku. W ten sposób SGID może wykonywać mniej więcej to samo co SUID. Jednak SGID jest rzadko używane w tym celu.

Podobnie jak w przypadku zezwolenia SUID, SGID jest stosowane do niektórych plików systemowych jako ustawienie domyślne.

Gdy jest zastosowane do katalogu, SGID może być przydatne, ponieważ można je używać do ustawienia domyślnego właściciela grupy dla plików i podkatalogów tworzonych w tym katalogu. Domyślnie, gdy użytkownik tworzy plik, jego efektywna grupa podstawowa jest ustawiana jako właściciel grupy tego pliku.

Nie zawsze jest to bardzo przydatne, zwłaszcza że użytkownicy Red Hat/CentOS mają jako grupę podstawową grupę o tej samej nazwie, co użytkownik, i w której użytkownik jest jedynym członkiem. Zatem domyślnie pliki, które tworzy użytkownik, będą miały ten sam dostęp do grupy.

Wyobraź sobie sytuację, w której użytkownicy linda i lori pracują w księgowości i są członkami grupy accountDomyślnie ci użytkownicy są członkami prywatnej grupy, której są jedynymi członkami. Jednak obaj użytkownicy są członkami grupy account, ale także jako członkowie grupy drugorzędnej.

Sytuacja domyślna jest taka, że gdy którykolwiek z tych użytkowników tworzy plik, podstawowa grupa staje się właścicielem. Dlatego domyślnie linda nie ma dostępu do plików utworzonych przez lori i odwrotnie. Jeśli jednak stworzysz wspólny katalog grupy (na przykład /groups/account) i upewnisz się, że uprawnienie SGID jest zastosowane do tego katalogu, a konto grupy jest ustawione jako właściciel grupy tego katalogu, wszystkie pliki utworzone w tym katalogu i wszystkich jego podkatalogach również otrzymują grupę account jako domyślnego właściciela grupy.

Z tego powodu uprawnienie SGID jest bardzo przydatnym uprawnieniem do ustawienia w katalogach wspólnych grup.

Uprawnienie SGID pojawia się w wyniku ls -l jak s w pozycji, gdzie zwykle znajduje się uprawnienie do wykonania grupy:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

Trzecim z specjalnych uprawnień jest sticky bit. To uprawnienie jest przydatne do ochrony plików przed przypadkowym usunięciem w środowisku, w którym kilku użytkowników ma prawa do zapisu w tym samym katalogu. Jeśli sticky bit jest zastosowany, użytkownik może usunąć plik tylko wtedy, gdy jest właścicielem pliku lub katalogu, w którym plik się znajduje. Z tego powodu jest on stosowany jako domyślne uprawnienie dla katalogu /tmp i może być również przydatny dla katalogów wspólnych grup.

Bez sticky bit, jeśli użytkownik może tworzyć pliki w katalogu, może również usuwać pliki z tego katalogu. W środowisku grupowym publicznym może to być irytujące. Wyobraź sobie użytkowników lindę i lori, którzy obaj mają prawa do zapisu w katalogu /data/account i otrzymują te uprawnienia dzięki uczestnictwu w grupie account. Dlatego linda może usuwać pliki utworzone przez lori i odwrotnie.

Kiedy zastosujesz sticky bit, użytkownik może usuwać pliki tylko wtedy, gdy spełniony jest jeden z następujących warunków:

  • Użytkownik jest właścicielem pliku;
  • Użytkownik jest właścicielem katalogu, w którym znajduje się plik.

Podczas korzystania z ls -l, możesz zobaczyć sticky bit jako t na pozycji, w której zwykle widzisz uprawnienia do wykonania dla innych:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

Zastosowanie specjalnych uprawnień

Aby zastosować SUID, SGID i bit sticky, możesz również użyć chmod. SUID ma wartość liczbową 4, SGID ma wartość liczbową 2, a bit sticky ma wartość liczbową 1.

Jeśli chcesz zastosować te uprawnienia, musisz dodać czterocyfrowy argument do chmod, której pierwsza cyfra odnosi się do specjalnych uprawnień. Poniższy wiersz, na przykład, doda uprawnienia SGID do katalogu i ustawi rwx dla użytkownika oraz rx dla grupy i innych:

chmod 2755 /somedir

To dość niepraktyczne, jeśli musisz sprawdzić aktualne uprawnienia, które są ustawione, zanim przejdziesz do chmod w trybie absolutnym. (Ryzykujesz nadpisanie uprawnień, jeśli tego nie zrobisz.) Dlatego zalecam pracę w trybie względnym, jeśli musisz zastosować jakiekolwiek z specjalnych uprawnień:

  1. Dla SUID użyj chmod u+s.
  2. Dla SGID użyj chmod g+s.
  3. Dla bitu sticky użyj chmod +t, a następnie nazwę pliku lub katalogu, dla którego chcesz ustawić uprawnienia.

W tabeli podsumowano wszystko, co ważne do wiadomości na temat zarządzania specjalnymi uprawnieniami.

Prawa w Linuksie (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Przykład pracy z specjalnymi prawami

W tym przykładzie używasz specjalnych uprawnień, aby członkowie grupy mogli łatwiej wymieniać się plikami w katalogu wspólnej grupy. Przypisujesz bit ID ustawionego identyfikatora grupy oraz bit sticky i widzisz, że po ich ustawieniu dodawane są funkcje, które ułatwiają współpracę członków grupy.

  1. Otwórz terminal, w którym jesteś użytkownikiem linda. Utworzenie użytkownika można zrealizować poleceniem useradd linda, dodaj hasło passwd linda.
  2. Utwórz w katalogu głównym katalog /data i podkatalog /data/sales poleceniem mkdir -p /data/sales. Wykonaj cd /data/sales, aby przejść do katalogu sales. Wykonaj touch linda1 i touch linda2, aby utworzyć dwa puste pliki, których właścicielem jest linda.
  3. Wykonaj su – lisa aby przełączyć bieżącego użytkownika na użytkownika lisa, który również jest członkiem grupy sales.
  4. Wykonaj cd /data/sales a z tego katalogu wykonaj ls -l. Zobaczysz dwa pliki, które zostały utworzone przez użytkownika linda i należą do grupy linda. Wykonaj rm -f linda*. To usunie oba pliki.
  5. Wykonaj touch lisa1 i touch lisa2, aby utworzyć dwa pliki, które należą do użytkownika lisa.
  6. Wykonaj su – aby podnieść swoje uprawnienia do poziomu root.
  7. Wykonaj chmod g+s,o+t /data/sales, aby ustawić bit identyfikatora grupy (GUID) oraz bit sticky w katalogu wspólnej grupy.
  8. Wykonaj su — linda. Następnie wykonaj touch linda3 i touch linda4. Teraz powinieneś zobaczyć, że dwa utworzone przez Ciebie pliki należą do grupy sales, która jest właścicielem katalogu /data/sales.
  9. Wykonaj rm -rf lisa*. Bit sticky zapobiega usunięciu tych plików przez użytkownika linda, ponieważ nie jesteś właścicielem tych plików. Zauważ, że jeśli użytkownik linda jest właścicielem katalogu /data/sales, nadal może usunąć te pliki!

Zarządzanie ACL (setfacl, getfacl) w Linuxie

Nawet jeśli rozszerzone uprawnienia, o których mowa powyżej, dodają użyteczną funkcjonalność do tego, jak Linux obsługuje uprawnienia, nie pozwala to na udzielanie uprawnień więcej niż jednemu użytkownikowi lub grupie w jednym pliku.

Listy kontroli dostępu oferują tę funkcję. Ponadto pozwalają administratorom ustawiać domyślne uprawnienia w skomplikowany sposób, w którym ustalone uprawnienia mogą różnić się w różnych katalogach.

Zrozumienie ACL

Chociaż podsystem ACL dodaje doskonałe funkcje do Twojego serwera, ma jedną wadę: nie wszystkie narzędzia go obsługują. W związku z tym możesz stracić ustawienia ACL przy kopiowaniu lub przenoszeniu plików, a oprogramowanie do tworzenia kopii zapasowych może nie wykonać kopii zapasowej ustawień ACL.

Narzędzie tar nie obsługuje ACL. Aby upewnić się, że ustawienia ACL nie zostaną utracone podczas tworzenia kopii zapasowej, użyj star zamiast tar. star działa z tymi samymi parametrami co tar; po prostu dodaje wsparcie dla ustawień ACL.

Możesz także wykonać kopię zapasową ACL za pomocą getfacl, które można przywrócić za pomocą polecenia setfacl. Aby wykonać kopię zapasową, użyj getfacl -R /directory > file.acls. Aby przywrócić ustawienia z pliku kopii zapasowej, użyj setfacl —restore=file.acl.

Brak wsparcia niektórych narzędzi nie powinien być problemem. Listy ACL są często stosowane w katalogach jako środek strukturalny, a nie do poszczególnych plików.
Dlatego ich będzie niewiele, a tylko kilka, zastosowanych w odpowiednich miejscach systemu plików. Z tego powodu, przywrócenie pierwotnych list ACL, z którymi pracowałeś, jest stosunkowo łatwe, nawet jeśli twoje oprogramowanie do tworzenia kopii zapasowych ich nie obsługuje.

Przygotowanie systemu plików do ACL

Przed rozpoczęciem pracy z ACL może być konieczne przygotowanie systemu plików do obsługi ACL. Ponieważ metadane systemu plików muszą być rozszerzone, nie zawsze domyślnie obsługują ACL w systemie plików. Jeśli podczas konfigurowania list ACL dla systemu plików pojawia się komunikat „operacja niedozwolona”, prawdopodobnie w twoim systemie plików brakuje wsparcia dla ACL.

Aby to naprawić, musisz dodać opcję acl mount w pliku /etc/fstab, aby system plików był montowany z domyślnym wsparciem dla ACL.

Zmiana i przeglądanie ustawień ACL za pomocą setfacl i getfacl

Aby ustawić ACL, potrzebujesz komendy setfacl. Aby zobaczyć aktualne ustawienia ACL, potrzebujesz getfacl. Komenda ls -l nie pokazuje żadnych istniejących ACL; pokazuje tylko + po liście uprawnień, co wskazuje, że listy ACL są stosowane również do pliku.

Zanim skonfigurujesz listy ACL, zawsze warto pokazać aktualne ustawienia ACL za pomocą getfacl. Poniżej na przykładzie możesz zobaczyć aktualne uprawnienia, tak jak pokazano za pomocą ls -l, a także tak jak pokazano z getfacl. Jeśli spojrzysz wystarczająco uważnie, zobaczysz, że pokazane informacje są dokładnie takie same.

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

W wyniku wykonania komendy getfacl poniżej widać, że uprawnienia zostały pokazane dla trzech różnych obiektów: użytkownika, grupy i innych. Teraz dodajmy ACL, aby nadać grupie sprzedaży prawa do odczytu i wykonania. Komenda do tego to setfacl -m g:sales:rx /dir. W tej komendzie -m określa, że obecne ustawienia ACL muszą być zmienione. Po tym g:sales:rx informuje komendę, aby ustawiła ACL do odczytu i wykonania (rx) dla grupy (g) sales. Poniżej możesz zobaczyć, jak wygląda komenda oraz wyjście komendy getfacl po zmianie obecnych ustawień ACL.

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

Teraz, gdy rozumiesz, jak ustawić grupową ACL, łatwo zrozumieć ACL dla użytkowników i innych użytkowników. Na przykład, polecenie setfacl -m u:linda:rwx /data przyznaje uprawnienia użytkownikowi linda w katalogu /data, nie czyniąc go właścicielem ani nie zmieniając przypisania aktualnego właściciela.

Zespół setfacl ma wiele możliwości i opcji. Jedna opcja jest szczególnie ważna, parametr -R. Jeśli jest używana, opcja ta ustawia ACL dla wszystkich plików i podkatalogów, które obecnie istnieją w katalogu, w którym ustawiasz ACL. Zawsze zaleca się stosowanie tej opcji podczas zmiany list ACL dla istniejących katalogów.

Praca z domyślną ACL

Jedną z zalet korzystania z list ACL jest to, że można przyznawać uprawnienia wielu użytkownikom lub grupom w katalogu. Kolejną zaletą jest to, że można włączyć dziedziczenie, pracując z domyślną ACL.

Ustawiając domyślną ACL, określisz uprawnienia, które będą przypisane do wszystkich nowych elementów tworzonych w katalogu. Pamiętaj, że domyślna ACL nie zmienia uprawnień istniejących plików i podkatalogów. Aby je zmienić, musisz dodać i zwykłą ACL!

To ważne do wiedzenia. Jeśli chcesz użyć ACL do skonfigurowania dostępu wielu użytkowników lub grup do tego samego katalogu, musisz ustawić ACL dwukrotnie. Najpierw użyj setfacl -R -m, aby zmienić ACL dla bieżących plików. Następnie użyj setfacl -m d:, aby zająć się wszystkimi nowymi elementami, które również zostaną utworzone.

Aby ustawić domyślną ACL, musisz po prostu dodać opcję d po opcji -m (kolejność ma znaczenie!). Dlatego użyj setfacl -m d:g:sales:rx /data, jeśli chcesz, aby grupa sprzedaży miała prawo do odczytu i wykonania wszystkiego, co kiedykolwiek zostanie utworzone w katalogu /data.

Kiedy używasz list domyślnych ACL, może być również przydatne ustawić ACL dla innych. Zwykle nie ma to dużego sensu, ponieważ możesz również zmieniać uprawnienia dla innych, używając chmod. Jednak czego nie możesz zrobić za pomocą chmod, aby wskazać uprawnienia, które mają być przyznane innym użytkownikom dla każdego nowego pliku, który kiedykolwiek zostanie utworzony. Jeśli chcesz, aby inni nie mieli żadnych uprawnień do czegokolwiek utworzonego w /data, na przykład użyj setfacl -m d:o::- /data.

ACL i zwykłe uprawnienia nie zawsze są dobrze zintegrowane. Mogą wystąpić problemy, jeśli zastosujesz domyślne ACL do katalogu, a następnie dodasz elementy do tego katalogu i spróbujesz zmienić zwykłe uprawnienia. Zmiany, które są stosowane do zwykłych uprawnień, nie będą dobrze odzwierciedlone w przeglądzie ACL. Aby uniknąć problemów, najpierw ustaw zwykłe uprawnienia, a następnie ustanów domyślne ACL (i potem staraj się ich nie zmieniać ponownie).

Przykład zarządzania rozszerzonymi uprawnieniami za pomocą ACL

W tym przykładzie kontynuujesz pracę z katalogami /data/account i /data/sales, które utworzyłeś wcześniej. W poprzednich przykładach upewniłeś się, że grupa sales ma uprawnienia do /data/sales, a grupa account ma uprawnienia do /data/account.

Najpierw upewnij się, że grupa account ma uprawnienia do odczytu w katalogu /data/sales, a grupa sales ma uprawnienia do odczytu w katalogu /data/account.

Następnie ustawiasz domyślne listy ACL, aby upewnić się, że dla wszystkich nowych plików poprawnie ustawione są uprawnienia dla wszystkich nowych elementów.

  1. Otwórz terminal.
  2. Wykonaj setfacl -m g:account:rx /data/sales i setfacl -m g:sales:rx /data/account.
  3. Wykonaj getfacl, aby upewnić się, że uprawnienia zostały ustawione tak, jak chciałeś.
  4. Wykonaj setfacl -m d:g:account:rwx,g:sales:rx /data/sales, aby ustawić domyślne ACL dla katalogu sales.
  5. Dodaj domyślne ACL dla katalogu /data/account, używając setfacl -m d:g:sales:rwx,g:account:rx /data/account.
  6. Upewnij się, że ustawienia ACL są aktywne, dodając nowy plik do /data/sales. Wykonaj touch /data/sales/newfile i wykonaj getfacl /data/sales/newfile , aby sprawdzić bieżące uprawnienia.

Ustalanie domyślnych uprawnień za pomocą umask

Powyżej dowiedziałeś się, jak pracować z domyślnymi ACL. Jeśli nie używasz ACL, istnieje opcja powłoki, która określa domyślne uprawnienia, które otrzymasz: umask (maskę odwrotną). W tej sekcji dowiesz się, jak zmienić domyślne uprawnienia za pomocą umask.

Prawdopodobnie zauważyłeś, że kiedy tworzysz nowy plik, są ustawiane pewne domyślne uprawnienia. Te uprawnienia są określane przez ustawienia. umaskTen parametr powłoki stosuje się do wszystkich użytkowników podczas logowania do systemu. W parametrze umask używana jest wartość numeryczna, która jest odejmowana od maksymalnych uprawnień, które mogą być automatycznie ustawione dla pliku; maksymalne ustawienie dla plików wynosi 666, a dla katalogów 777.

Jednakże niektóre wyjątki dotyczą tej zasady. Możesz znaleźć pełny przegląd ustawień umask w tabeli poniżej.

Z cyfr używanych w umask, jak w przypadku argumentów numerycznych dla polecenia chmod, pierwsza cyfra odnosi się do uprawnień użytkownika, druga cyfra odnosi się do uprawnień grupy, a ostatnia odnosi się do domyślnych uprawnień ustawionych dla innych. Wartość umask domyślnie wynosi 022, co daje 644 dla wszystkich nowych plików i 755 dla wszystkich nowych katalogów tworzonych na twoim serwerze.

Pełny przegląd wszystkich wartości numerycznych umask i ich wyników znajduje się w tabeli poniżej.

Prawa w Linuksie (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Prosty sposób, aby zobaczyć, jak działa parametr umask, wygląda następująco: zacznij od domyślnych uprawnień dla pliku ustawionym na 666 i odejmij umask, aby uzyskać obowiązujące uprawnienia. Zrób to samo dla katalogu i jego domyślnych uprawnień 777.

Istnieją dwa sposoby na zmianę ustawienia umask: dla wszystkich użytkowników i dla poszczególnych użytkowników. Jeśli chcesz ustawić umask dla wszystkich użytkowników, musisz upewnić się, że parametr umask jest brany pod uwagę przy uruchamianiu plików środowiska powłoki, jak podano w /etc/profile. Odpowiednie podejście polega na stworzeniu skryptu powłoki o nazwie umask.sh w katalogu /etc/profile.d i określeniu umask, którego chcesz użyć w tym skrypcie powłoki. Jeśli umask w tym pliku zostanie zmieniony, zostanie zastosowany do wszystkich użytkowników po zalogowaniu się na serwer.

Alternatywą dla ustawienia umask przez /etc/profile i powiązane pliki, które stosuje się do wszystkich użytkowników logujących się do systemu, jest zmiana ustawień umask w pliku o nazwie .profile, który jest tworzony w katalogu domowym każdego użytkownika.

Ustawienia zastosowane w tym pliku dotyczą tylko pojedynczego użytkownika; dlatego jest to dobry sposób, jeśli potrzebujesz większej szczegółowości. Osobiście lubię tę funkcję, aby zmienić domyślną wartość umask dla użytkownika root na 027, podczas gdy zwykli użytkownicy mają umask domyślnie 022.

Praca z rozszerzonymi atrybutami użytkownika

To jest końcowa sekcja na temat uprawnień w Linuxie.

Podczas pracy z uprawnieniami zawsze istnieje powiązanie między obiektem użytkownika lub grupy a uprawnieniami, które te obiekty użytkownika lub grupy mają do pliku lub katalogu. Alternatywną metodą ochrony plików na serwerze Linux jest praca z atrybutami.
Atrybuty działają niezależnie od użytkownika, który uzyskuje dostęp do pliku.

Podobnie jak w przypadku ACL, dla atrybutów pliku może być konieczne włączenie parametru mount.

To jest opcja user_xattr. Jeśli otrzymujesz komunikat „operacja nie jest wspierana” podczas pracy z rozszerzonymi atrybutami użytkownika, upewnij się, że parametry mount w pliku /etc/fstab.

Wiele atrybutów jest udokumentowanych. Niektóre atrybuty są dostępne, ale jeszcze nie zaimplementowane. Nie używaj ich; nie przyniosą ci niczego.

Poniżej przedstawiono najbardziej przydatne atrybuty, które możesz zastosować:

A Ten atrybut zapewnia, że czas dostępu do pliku nie zmienia się.
Zazwyczaj za każdym razem, gdy plik jest otwierany, czas dostępu do pliku musi być zapisywany w metadanych pliku. Negatywnie wpływa to na wydajność; dlatego dla plików, do których regularnie się uzyskuje dostęp, atrybut A może być użyty do wyłączenia tej funkcji.

a Ten atrybut pozwala na dodawanie, ale nie usuwanie pliku.

c Jeśli korzystasz z systemu plików, który obsługuje kompresję na poziomie wolumenu, ten atrybut pliku zapewnia, że plik zostanie skompresowany przy pierwszym włączeniu mechanizmu kompresji.

D Ten atrybut zapewnia, że zmiany w plikach są zapisywane na dysku natychmiastowo, a nie najpierw w pamięci podręcznej. Jest to przydatny atrybut dla ważnych plików bazy danych, który zapewnia, że nie zostaną one utracone między pamięcią podręczną pliku a dyskiem twardym.

d Ten atrybut gwarantuje, że plik nie zostanie zapisany w kopiach zapasowych, gdzie używana jest narzędzie do zrzucania.

I Ten atrybut włącza indeksowanie dla katalogu, w którym jest włączony. Zapewnia to szybszy dostęp do plików w prymitywnych systemach plików, takich jak Ext3, które nie używają bazy danych B-tree do szybkiego dostępu do plików.

i Ten atrybut sprawia, że plik staje się niezmienny. W związku z tym nie można wprowadzać do niego zmian, co jest przydatne dla plików, które wymagają dodatkowej ochrony.

j Ten atrybut zapewnia, że w systemie plików ext3 plik jest najpierw zapisywany w dzienniku, a następnie - w blokach danych na dysku twardym.

s Nadpisz bloki, w których plik był zapisany, zerami po jego usunięciu. Gwarantuje to, że odzyskanie pliku jest niemożliwe po jego usunięciu.

u Ten atrybut zachowuje informacje o usunięciu. Pozwala to na opracowanie narzędzia, które działa z tymi informacjami w celu odzyskania usuniętych plików.

Jeśli chcesz zastosować atrybuty, możesz użyć polecenia chattr. Na przykład, użyj chattr +s somefile, aby zastosować atrybuty do somefile. Chcesz usunąć atrybut? Użyj wtedy chattr -s somefile, a zostanie on usunięty. Aby uzyskać przegląd wszystkich atrybutów obecnie stosowanych, użyj polecenia lsattr.

Podsumowanie

W tym artykule dowiedziałeś się, jak pracować z uprawnieniami. Przeczytałeś o trzech podstawowych uprawnieniach, rozszerzonych uprawnieniach oraz jak stosować listy ACL w systemie plików. Dowiedziałeś się również, jak używać parametru umask do stosowania domyślnych uprawnień. Na końcu tego artykułu dowiedziałeś się, jak użyzać rozszerzonych atrybutów użytkownika, aby wprowadzić dodatkowy poziom bezpieczeństwa systemu plików.

Jeśli podobał Ci się ten przekład, proszę napisz o tym w komentarzach. Będzie to większa motywacja do tworzenia użytecznych przekładów.

W artykule poprawiłem niektóre błędy typograficzne i gramatyczne. Zmniejszyłem niektóre obszerne akapity na mniejsze dla wygody czytania.

Zamiast „Tylko ktoś z prawami administracyjnymi w katalogu może zastosować zezwolenie na wykonanie.” poprawiłem na „Tylko ktoś z prawami zapisu w katalogu może zastosować zezwolenie na wykonanie.”, co będzie bardziej poprawne.

Dziękuję za uwagi berez.

Zamieniłem:
Jeśli nie jesteś właścicielem użytkownika, powłoka sprawdzi, czy jesteś członkiem grupy, która również nazywa się grupą pliku.

Na:
Jeśli nie jesteś właścicielem pliku, powłoka sprawdzi, czy jesteś członkiem grupy, która ma uprawnienia do tego pliku. Jeśli jesteś członkiem tej grupy, otrzymujesz dostęp do pliku z uprawnieniami, które zostały ustalone dla grupy, a powłoka przestaje sprawdzać.

Dziękuję za uwagę CryptoPirate

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster