Zarządzanie listą kontroli dostępu - ACL

RedHat 6.x / CentOS 6.x

Poza standardowym systemem przyznawania dostępów do plików opartym o właściciela oraz grupę, w systemach rodziny RedHat zaimplementowana jest również inna metoda.
Access Control List (ACL) umożliwia nam gradację dostępów do zasobów dla poszczególnych użytkowników czy kilku grup, na różnych poziomach uprzywilejowania.

Weryfikacja ACL

Do weryfikacji przydzielonych już uprawnień posłuży nam komenda:

[root@centos67 mnt]# getfacl test_acl.txt
# file: test_acl.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

Zwrócone informace mówią nam, że właścicielem pliku jest root, grupą również root, oraz, że właściciel posiada uprawnienia "rw" do tego pliku, a grupa i pozostali jedynie "r". Nie widzimy tu informacji o żadnych dodatkowych uprawnieniach, które mogły by być nadane dla pliku.
Widok ten jednak zmienia się po dodaniu uprawnień:

[root@centos67 mnt]# getfacl test_acl.txt
# file: test_acl.txt
# owner: root
# group: root
user::rw-
user:test:rw-
group::r--
group:test2:r-x
mask::rwx
other::r--

Jak łatwo zauważyć, teraz, poza domyślnymi uprawnieniami, przybyły nam dodatkowe pozycje. Widzimy, że teraz, poza użytkownikiem root, dostęp w trybie "rw" ma również użytkownik test, a także, że grupa test2 posiada uprawnienia typu "rx".Co prawda wartości uprawnień możemy zweryfikować jedynie podglądając je poprzez getfacl, ale przydzielenie uprawnień objawi się nam w systemie w jeszcze jeden, charakterystyczny, i widoczny na pierwszy rzut oka sposób:

[root@centos67 mnt]# ll
-rw-rwxr--+ 1 root root     0 Sep  9 17:28 test_acl.txt

W ostatnim polu określającym uprawnienia dla pliku pojawił się nam "+". Jest to znak, którego szukamy.

Operowanie na uprawnieniach ACL

Nadawanie uprawnień dla użytkowników i grup stanowi efektywny sposób kontroli dostępu do plików w naszym systemie. Samo dodanie będziemy realizowali poprzez polecenie, o następującej składni:

[root@centos67 mnt]# setfacl -m u:test:rw test_acl.txt

Polecenie jest skonstruowane wg zasady:
* -m - modyfikacja wpisu (dodanie lub zmiana parametrów dostępu)
* rodzaj:nazwa:uprawnienia - rodzajem może być u (user), g (group), o (other) lub m (mask). W przypadku opcji u i g w sekcji "nazwa" możemy podać nazwę konkretnego użytkownika lub grupy, a uprawnienia to zwyczajne uprawnienia "rwx".

Zgodnie z tą zasadą powyższa komenda spowoduje modyfikację (-m) wpisu dla użytkownika (u) o nazwie test, przydzielając mu uprawnienia "rw" do pliku test_acl.txt.

Usuwanie uprawnień specjalnych możemy zrealizować na dwa sposoby. Jeśli chcemy usunąć uprawnienia przyznane konkretnemu userowi lub grupie, skorzystamy z opcji:

[root@centos67 mnt]# setfacl -x u:test test_acl.txt

Oczywiście sekcja u:test będzie wyznacznikiem tego, co zostanie usunięte.
Możemy również wyczyścić całą tablicę ACL, usuwając wszystkie przyznane uprawnienia:

[root@centos67 mnt]# setfacl -b test_acl.txt

Maska i uprawnienia default

Poza przydzielaniem konkretnych uprawnień konkretnym userom czy grupom, mamy również możliwość określenia maski dostępu do pliku. Maska taka ma na celu określenie maksymalnych uprawnień, jake ktokolwiek zdefiniowany poprzez ACL może uzyskać.
Należy pamiętać, że maska nadpisuje uprawnienia przyznane indywidulanie.
Np. jeśli dla użytkownika określono poprzez ACL dostęp typu "rx", ale maska zawiera jedynie flagi "rw", oznaczać to będzie, że ten użytkownik będzie miał przyznany jedynie dostęp "r", ponieważ maskowanie nie dopuszcza wykonywania pliku. Jednym zdaniem, użytkownik ma takie uprawnienia acl, które zawarte są w masce pliku.
Maskę zdefiniujemy w następujący spsób:

[root@centos67 mnt]# setfacl -m m:r test_acl.txt

Spostrzegawczy zauważą, że po dodaniu uprawnień dla użytkownika, w getfacl dla naszego pliku pozycja mask: pojawia się automatycznie. Jeśli nie zmienimy jej ręcznie, będzie ona zawierać wszystkie uprawnienia, jakie przydzieliliśmy przez ACL-e.

Drugą właściwością jaką możemy określić, jest wartość default. Wartość ta, ustawiona dla katalogu spowoduje, iż wszystkie pliki tworzone w takim katalogu będą posiadać uprawnienia określone jako default.
Istotną rzeczą jest fakt, iż nadanie tych uprawnień nie będzie miało wpływu na uprawnienia istniejących już w katalogu plików, a jedynie na nowo utworzone.

Deklarowanie wartości, jako domyślnej odbywa się poprzez dodanie parametru d: na początku opcji acl, czyli przykładowo:

[root@centos67 mnt]# setfacl -m d:g:test2:rw /mnt/

Od tej pory, wszystkie pliki tworzone w katalogu /mnt będą posiadały acl group:test2:rw.

Troubbleshooting

Próba dodania nowych ACL-i kończy się informacją:

[root@centos67 mnt]# setfacl -m u:test2:rwx dd.sh
setfacl: dd.sh: Operation not supported

Należy zweryfikować, czy filesystem na którym próbujemy dodać acl-e posiada dodaną w opcjach mountowania obsługę tej funkcji:

[root@centos67 mnt]# mount
...
/dev/mapper/vg_luks-test on /mnt type ext2 (rw)
...

Widać powyżej, że filesystem jest zamountowany jedynie z opcją rw.
Aby umożliwić nadanie uprawnień przez acl-e musimy przemountować go z odpowiednią opcją:

[root@centos67 mnt]# mount -o remount,acl /mnt/
[root@centos67 mnt]# mount
/dev/mapper/vg_luks-test on /mnt type ext2 (rw,acl)

Działanie to nie jest permanentne i po restarcie systemu alc-e znów nie będą działać. Aby to zmienić należy dodać odpowiedni wpis przy naszym punkcie mountowania w /etc/fstab

[root@centos67 mnt]# vi /etc/fstab
/dev/mapper/vg_luks-test /mnt ext2 rw,acl 0 0

Brak komentarzy:

Prześlij komentarz