Linux – Prawa dostępowe ACL – przykłady

W poprzednim artykule opisaliśmy listy dostępu ACL. Czas na część praktyczną.
Podczas testu korzystam z systemu Linux Ubuntu w wersji 18.04 LTS.


Na potrzeby artykułu proponuje utworzyć użytkownika test i korzystać z jego katalogu domowego – w tym przypadku będzie to /home/test
Dodajemy użytkownika

$ adduser test

Po dodaniu użytkownika przelogujemy się na niego poleceniem:

$ su test

Po przelogowaniu pozostajemy w katalogu root a chcemy pracować w katalogu domowym użytkownika więc wpisujemy w linii poleceń:

$ cd ..
$ cd home/test/


W pierwszej kolejności utwórzmy katalog o nazwie aclki, na którym będziemy pracować. Wpisz poniższe polecenie:

$ mkdir aclki

Przejdź do utworzonego katalogu poleceniem:

$ cd aclki/

Umieść w nim dwa pliki. Mogą to być pliki tekstowe zawierające choćby przykładowe ciągi znaków.

$ seq 15 >przyklad1.txt
$ seq 20 >przyklad2.txt

Powyższe polecenia utworzą pliki zapisane cyframi.
Sprawdź czy mają przypisane już jakieś listy dostępu. Wpisz polecenie:

$ ls -l

W powyższym wyniku nie widzimy by którykolwiek z plików posiadał na końcu znak plusa, co oznacza, że ACL’ka nie jest ustawiona.

Stworzymy teraz grupy oraz przypiszemy do nich użytkowników, wcześniej jednak należy przelogować się na użytkownika z właściwymi uprawnieniami:

$ su -


Grupę dodajemy poprzez polecenie groupadd:

$ sudo groupadd dyrekcja
$ sudo groupadd ksiegowosc

Następnie dodamy użytkownika bocian, który zostanie przypisany do grupy dyrekcja:

$ useradd bocian -m -G dyrekcja
$ passwd bocian

Parametr -m utworzy automatycznie katalog domowy użytkownika
Dodajmy kolejnego użytkownika, kawka:

$ useradd kawka -m -G ksiegowosc
$ passwd kawka

kolejnym niech będzie sowa, która jest w dyrekcji oraz zna się na księgowości w związku z czym przypiszemy ją do obu grup:

$ useradd sowa -m -G dyrekcja,ksiegowosc
$ passwd sowa

Przetestujmy teraz ACLkę. Wcześniej zalogujemy się na użytkownika test:

$ su test

Jeśli nie znajduje się we właściwym katalogu należy przejść do home/test/aclki
Nadajemy prawa np. zapisu użytkownikowi bocian do drugiego pliku. Posłuży nam do tego polecenie setfacl

$ setfacl -m u:bocian:w przyklad2.txt

Przeanalizujmy powyższe polecenie.

Parametr -m służy do dodawania lub modyfikacji wpisu, u: to użytkownik, :w określa jakie prawo nadajemy. W tym przypadku jest to write – prawo zapisu


Sprawdźmy teraz czy faktycznie zostały wprowadzone jakieś zmiany.

$ ls -l

Jak widać na powyższym obrazie został dodany symbol plus (oznaczony w czerwonej ramce) w pliku przyklad2.txt, czyli została utworzona lista dostępu.
Wyświetlimy listę dostępu dla tego pliku poleceniem getfacl

$ getfacl przyklad2.txt

Jak widać na powyższym znajduje się tam wpis dotyczący użytkownika bocian z prawami zapisu.



UWAGA – bardzo istotną kwestią jest to, że użytkownika, który znajduje się na liście ACL nie obowiązują już żadne inne wpisy, a jedynie te podane na liście. W tym przypadku tylko i wyłącznie jest możliwy zapis, pomimo tego, że użytkownik należy do grupy posiadającej prawa zarówno do odczytywania jak i zapisywania.

Sprawdźmy zatem czy faktycznie tak jest. Przelogujemy się na użytkownika bocian:

$ su bocian

Następnie wejdźmy do katalogu home/test/aclki/ i wyświetlmy jego zawartość:

$ ls -l

Zobaczmy czy uda się wyświetlić plik przykład2.txt:

$ vim przyklad2.txt

Jak widać zawartość się nie wyświetliła a Vim poinformował nas o braku dostępu.
By wyjść z vim’a wpisujemy:

$ :q [enter]

Co się w takim razie stanie w przypadku drugiego pliku, któremu nie zmieniliśmy uprawnień?

 $ vim przyklad1.txt

Vim wyświetlił zawartość z jednoczesną informacją [readolny] zgodną z uprawnieniami pliku, stało się tak, ponieważ dla niego nie przydzieliliśmy list dostępu.
Skoro użytkownik bocian ma nadane prawa zapisu do pliku przyklad2.txt spróbujmy coś zapisać:

$ seq 4 >> przyklad2.txt

Polecenie nie wyrzuciło błędów.
Możemy sprawdzić czy faktycznie tak się stało. Wychodzimy z użytkownika bocian

$ exit

Przechodzimy do użytkownika test i właściwego katalogu, wyświetlamy vim’em plik przyklad2.txt. Powinny być widoczne dopisane 4 cyfry na końcu pliku, jak na poniższym screenie.

ACL dla GRUPY

W podobny sposób jak w przypadku użytkowników przydzielamy grupy do list. Zamieniamy jedynie parametr u na g (grupa).
Będąc na użytkowniku test wpisz:

$ setfacl -m g:dyrekcja:r przyklad1.txt
$ setfacl -m g:ksiegowosc:w przyklad1.txt
$ setfacl -m g::0 przyklad1.txt

Przydzieliliśmy grupie dyrekcja prawo zapisu do pliku przyklad1.txt oraz księgowości prawo odczytu. Ostatni wpis g::0 spowoduje, że wszystkie grupy, które nie zostały zadeklarowane na liście ACL zostaną pozbawione wszelkich praw.
Sprawdźmy:

$ getfacl przyklad1.txt

Powinniśmy otrzymać wynik jak na poniższym obrazie

W celu weryfikacji przelogujemy się na użytkownika bocian należącego do grupy dyrekcja. Powinien posiadać uprawnienia zgodne z grupą, czyli prawo do odczytu. Nie zapomnijmy przejść do właściwego katalogu. Następnie spróbujmy wyświetlić i zapisać coś w pliku przyklad1.txt

$ su bocian

Przy próbie dopisania kolejnych pozycji do pliku poleceniem

$ seq 3 >> przyklad1.txt

otrzymujemy błąd permission denided. Natomiast próba odczytu vim’em wykonuje się bez najmniejszego problemu, przy czym od razu otrzymamy komunikat, że posiadamy jedynie prawo do odczytu pliku.

Możemy teraz przetestować użytkownika kawka, który przypisany jest do grupy ksiegowosc mającej nadane prawa jedynie do zapisu.
Próba odczytu vim’em pliku kończy się błędem permission denided

Zapis natomiast powinien przejść bez problemu:

$ seq 8 >> przyklad1.txt

Ostatni z użytkowników, sowa, należy do obu grup w związku z czym powinien mieć dostęp zarówno do odczytu jak i zapisu do pliku.
Zalogujemy się na niego, nie zapominając o przejściu do właściwego katalogu.

$ su sowa
$ cd ..
$ cd home/test/aclki

Następnie wyświetlimy i edytujemy plik przyklad1.txt

$ vim przyklad1.txt

Dopisujemy cokolwiek, a następnie by wyjść z zapisaniem wpisujemy:

$ :wq [enter]

Wszystko powinno przejść bez najmniejszego problemu.

Pozostała nam ostatnia część, czyli uprawnienia domyślne przypisane do katalogu. Tworzymy je, dodając parametr -d. Należy pamiętać, że ustawienie tego parametru spowoduje odziedziczenie po nim uprawnień dla elementów w nim zawartych.
Będąc na użytkowniku test, w katalogu aclki utworzymy kolejny podkatalog domyslne:

$ mkdir domyslne

Przypisujemy do list ACL:

$ setfacl -d -m u:sowa:rw domyslne/
$ setfacl -d -m g:dyrekcja:rwx domyslne/

Dla dyrekcji dodaliśmy kolejny parametr x oznaczający, że grupa oprócz zapisywania i odczytywania również ma prawo do wykonywania plików.
Sprawdźmy jak wygląda w tej chwili lista dla katalogu:

$ getfacl domyslne/

W wyniku widzimy dodatkowy opis w postaci słów default, zgodny z przypisanymi uprawnieniami. Sprawdźmy tworząc w katalogu domyślne dwa pliki:

$ cd domyslne
$ touch plik1.txt plik2.txt
$ ls -l

Zostały utworzone dwa pliku z przypisanymi od razu ACL’kami.
Sprawdźmy jeden z plików jakie prawa zostały nadane:

$ getfacl plik1.txt

Widać, że prawa zostały nadane zgodnie z prawami katalogu.
W tym artykule to już wszystko, ale proponujemy byś sam sprawdził jakie możliwości dają listy ACL. Skorzystaj z naszych serwerów VPS Classic.

Zachęcamy do regularnego odwiedzania naszego blogu.