ACL dla plików i katalogów w Ubuntu
Unixowy system uprawnień dla plików i katalogów został naprawdę dobrze przemyślany i świetnie się sprawdza. Każdy jednak prędzej czy później może trafić na sytuację, w której możliwość stosowania rozszerzonych uprawnień dałaby znacznie większą swobodę i wygodę.
Kogo temat może zainteresować?
Wydaje mi się, że użytkownicy zwykłych desktopów nie będą ACL’i potrzebować. Jeśli jednak jakiś developer umieszcza przykładowo serwer z repozytorium u siebie albo jest administratorem jakiegoś serwera – myślę, że warto się zapoznać z poniższą tematyką.
Krok po kroku
Access Control Lists (ang. ACL), czyli listy kontroli dostępu są w jądrze Ubuntu wkompilowana domyślnie już od jakiegoś czasu. Niewiele stoi zatem nam na przeszkodzie, aby aktywnie zacząć z nich korzystać. ACL należy traktować jako rozszerzenie Unixowego systemu uprawnień plików i katalogów, dlatego zestaw komend takich jak chown czy chmod nadal obowiązuje.
Czego zatem potrzebujemy? Musimy uświadomić nasz system, że będziemy wykorzystywać ACL’e dla konkretnych systemów plików. No i przede wszystkim – musimy mieć narzędzia do zarządzania ACL’ami oraz wiedzieć, jak się ich używa
Zatem po kolei.
Sprawdźmy, czy mamy narzędzia do obsługi ACL’i. Narzędzia nazywają się setfacl, getfacl oraz chacl.
desktop repos # getfacl Program getfacl nie jest obecnie zainstalowany. Można go zainstalować wpisując: apt-get install acl getfacl: command not found desktop repos #
Więc go sobie instalujemy:
sudo aptitude install acl
Spróbujmy ustawić jakąś rozszerzoną listę dostępu. Przejdźmy do katalogu domowego, załóżmy katalog test oraz nadajmy uprawnienia rwx użytkownikowi nobody.
cd mkdir test setfacl -R -m u:nobody:rwX test setfacl: test: Operation not supported
Komunikat Operation not supported oznacza nic innego jak brak obsługi ACL w systemie plików. Jeśli nasz katalog domowy znajduje się na odrębnym systemie plików home, możemy aktywować obsługę ACL komendą:
sudo mount -o remount,acl /home
Teraz ustawianie rozszerzonych uprawnień powinno już działać. Ponowne wydanie komendy setfacl nie powinno już zwrócić błędu.
Przy okazji, możemy zobaczyć jak wyglądają uprawnienia naszego katalogu:
nme@desktop ~ $ setfacl -R -m u:nobody:rwX test nme@desktop ~ $ ls -lad test/ drwxrwxr-x+ 2 nme nme 4096 2009-12-30 14:29 test/ nme@desktop ~ $ getfacl test # file: test # owner: nme # group: nme user::rwx user:nobody:rwx group::r-x mask::rwx other::r-x
Warto zwrócić uwagę na uprawnienia zwracane komendą ls -l: drwxrwxr-x+ – na końcu listy uprawnień znajduje się znak + oznaczający rozszerzone informacje. Takie uprawnienia możliwe są do odczytu za pośrednictwem getfacl co też uczyniłem powyżej. Wynik komendy jest dość czytelny.
Wracając do wydanej komendy:
setfacl -R -m u:nobody:rwX test
Co po naszemu brzmi – rekursywnie zmodyfikuj uprawnienia dla użytkownika nobody dla katalogu test ustawiając uprawnienia rwx dla katalogów i rw dla plików.
Dziecinne proste. Rozbudujmy komendę:
setfacl -Rm u:nobody:rwX,d:u:nobody:rwX test
(pierwsza część jest tak naprawde zbędna, ponieważ uprawnienia dla użytkownika już ustawiliśmy, ale chciałem przedstawić sposób w jaki możemy łączyć uprawnienia w obrębie jednej komendy)
d:u:... można zapisać również jako default:u:... co oznacza, że dla nowo zakładanych plików/katalogów, takie atrybuty mają być domyślnie dodawane.
Ważna sprawa, na koniec
Aby używać list dostępu, aktywowaliśmy opcję acl poprzez przemontowanie systemu pliku. Niestety, po restarcie, system plików nie będzie już obsługiwał list dostępu.
Co zatem zrobić?
Jeśli chcemy, aby nasz system plików pamiętał o tym, że ma obsługiwać rozszerzone listy dostępu, w pliku /etc/fstab należy to zaznaczyć, acl jako opcję dla naszego systemu plików:
/dev/mapper/desktop-home /home ext3 defaults,acl 0 2
Więcej informacji, wraz z przykładami znaleźć możecie na stronach manuala komend do obsługi acl które przedstawiłem w tym tekscie.
