Prawa dostępu do plików
Standardowe prawa dostępu do plików i katalogów w Linux’ie każdy zna. Wyświetlamy je poleceniem “ls -l”, ustawiamy poleceniem “chmod” podając albo całą maskę, albo dodając i odejmując poszczególne przywileje. Jednak jak wiele z Was słyszało o, i umie używać ACL?
ACL, czyli Advanced Control List, to rozszerzone prawa dostępu do plików i katalogów. To co wprowadzają dodatkowo względem standardowych praw, to między innymi to że pozwalają ustawić określone prawa dla poszczególnych użytkowników, a nie tylko właściciela, grup i pozostałych.
Zanim zaczniemy zabawę z prawami, przede wszystkim należy:
- sprawdzić czy nasza partycja wspiera ACL; poleceniem “mount” sprawdzamy z jakimi opcjami została zamontowana i jeśli wśród nich niema opcji “acl” to przemontowujemy ją (np. mount -o remount,acl /home) i dodajemy odpowiednią flagę do /etc/fstab, żeby nie musieć tego robić po każdym uruchomieniu komputera
- zaopatrzyć się w narzędzia do obsługi zaawansowanych praw dostępu; paczka z reguły nazywa się “acl”
Po tym, możemy przejść do zabawy:
Stwórzmy przykładowy plik o nazwie test. “ls -l test” powie nam jakie są standardowe prawa dostępu, ale nic więcej, bo i na razie nic ponad to nie ma. Gdyby było, to “ls -l test” wyświetli plusa żeby poinformować o dodatkowych parametrach:
-rw-rw-r--+ 1 piotrek piotrek 0 May 17 16:59 test
Do wyświetlania uprawnień ACL służy komenda “getfacl”. Wynik tego polecenia dla standardowych plików wygląda np. tak:
piotrek@hurricane ~ $ getfacl test # file: test # owner: piotrek # group: piotrek user::rw- group::rw- other::r--
Tutaj chyba wszystko jest jasne. Dodajmy więc jakieś “niestandardowe” prawa:
setfacl -m user:nobody:rw test
Powyższe polecenie dodaje do naszego pliku dostęp dla user’a “nobody” z prawami do odczytu i zapisu. W tej chwili wygląda to tak:
piotrek@hurricane ~ $ getfacl test # file: test # owner: piotrek # group: piotrek user::rw- user:nobody:rw- group::rw- mask::rw- other::r--
Po zmianie praw dodatkowo pojawił się wpis zatytułowany “mask”. Maska jest ponad uprawnieniami użytkowników i grupy, i definiuje jakie są efektywne prawa dla tych kategorii. Jeśli zmodyfikujemy maskę na bardziej restrykcyjną niż prawa danej kategorii zostaniemy o tym poinformowanie przez program:
piotrek@hurricane ~ $ setfacl -m mask:r test piotrek@hurricane ~ $ getfacl test # file: test # owner: piotrek # group: piotrek user::rw- user:nobody:rw- #effective:r-- group::rw- #effective:r-- mask::r-- other::r--
Żeby odebrać komuś specyficzne prawa i przywrócić go do stanu w którym podlega zwykłym prawom wykonujemy:
piotrek@hurricane ~ $ setfacl -x nobody test piotrek@hurricane ~ $ getfacl test # file: test # owner: piotrek # group: piotrek user::rw- group::rw- mask::rw- other::r--
Jak można zauważyć poza usunięciem definicji dla użytkownika “nobody” zmieniła się też maska. Dlatego właśnie maskę najlepiej jest ustawiać na końcu.
Ode mnie to tyle. Więcej oczywiście w man’ach powyższych aplikacji, fragmencie z SUSE Linux Administration Guide i obszerny opis tutaj.
czemu nie:)