ACL - co to jest
W systemach uniksowych / linuksowych prawa dostępu do pliku czy katalogu są podzielone na 3 kategorie:
- Właściciel pliku/katalogu
- Grupa
- Pozostali
Każdej z tych kategorii można przypisać tylko 3 prawa dostępu:
Jak widać system ten jest prosty - wręcz bardzo prosty. Pomimo tego że takie było założenie, aby prawa dostępu były proste (co ułatwiało audyt, czyli sprawdzenie ich poprawności), obecnie w wielu sytuacjach są one nie wystarczające, lub też znacznie komplikujące życie.
Zalety ACL
Naszczęście zauważono iż taki system w niektórych zastosowaniach jest niewystarczający i powstał standart POSIX.1e określający mechanizm ACL - Access Control List. Pozwala on na przypisanie wielu użytkowników lub grup do danego pliku/katalogu i określenie odzielnych uprawnień dla każego z nich. Dzięki temu administrator czy użytkownik nie są ograniczeni do trzech podstawowych kategorii. Pozwala to na lepsze zarządzanie uprawnieniami.
Weźmy przykładowo taki plik:
-rw-r----- 1 userblog groupblog 976 May 7 17:39 plik
Jego właścicielem jest użytkownik userblog, przypisana do niego grupa to groupblog, rozmiar pliku wynosi 976 bajtów i został utworzony 7 maja o 17:39. Uprawnienia dla właściciela pliku (rw-) pozwalają na jego odczyt i zapis, zaś grupa (r–) może tylko odczytać ten plik. Pozostali użytkownicy (—) nie mają żadnych praw do niego.
Gdyby użytkownik userblog chciał nadać prawa użytkownikowi alfa do odczytu i zapisu a użytkownikowi beta do odczytu i wykonywania a cały czas uniemożliwić innym użykownikom dostęp do pliku - było by to nie możliwe. W przypadku nadania odpowiednich ACL listing tego pliku się odrobine zmieni:
-rw-r-----+ 1 userblog groupblog 976 May 7 17:39 plik
Zwróć uwagę na plus pojawiający się po uprawnieniach - oznacza on że plik ma zdefiniowaną ACL. Oto jak ona wygląda:
#file:plik
#owner:userblog
#group:groupblog
user::rw-
user:alfa:rw-
user:beta:r-x
group::r--
other::---
Jak widać pojawiły się wpisy dotyczące nowych użytkowników. Gdyby nie ACL taki problem byłby nie do obejścia.
Access Control List niosą ze sobą jednak pewne problemy.
Problemy związane z wykorzystaniem ACL
Pierwszym i podstawowym problemem związanym z Access Listami jest backup. Nie wszystkie narzędzia kopiują je poprawnie - chociażby podstawowy GNU tar. Powoduje to iż dane zarchiwizowane narzędziem które nie sprawdza ACL po odzyskaniu nie będą ich zawierać. Może to skutecznie utrudnić życie administratorom systemów, jeżeli będą chcieli je odzyskać “empirycznie”. Jeżeli chodzi o narzędzia które obsługują ACL to polecam: Rdiff-backup, dump, star (S tar)
Drugim problemem jest wcześniej wspomniany audyt uprawnień. Access Control List pozwalają na praktycznie dowolne definiowanie list dostępu. Ponieważ nie są one wyświetlane w standardowym listingu katalogu, łatwo je pominąć co może prowadzić do ujawnienia danych. Dodatkowo standart POSIX.1e wspiera tzn dziedziczenie uprawnień czyli ich przejmowanie z nadrzędnych katalogów, co może utrudnić ich sprawdzenie.
Trzeci problem to sposób pisania oprogramowania. Wielu programistów zamiast spróbować zapisać plik, najpierw sprawdza uprawnienia ręcznie. Stwarza to sytuację w której plik może być udostępniony do zapisu poprzez Access Liste natomiast jego natywne uprawnienia na to nie pozwalają. Jeżeli programista ręcznie sprawdza (po prawach uniksowych) czy plik można zapisać okaże się że nie, podczas gdy fizycznie jest to możliwe. O ile w przypadku własnych programów łatwo można je przerobić o tyle aplikacje zewnętrzne mogą wymagać dużych patchy.
Czwartym problemem jest dostępność obsługi ACLi. O ile są one dostępne na Linuksie, FreeBSD czy Solarisie to w innych systemach może ona nie być wprowadzona. Trzeba to wziąć pod uwagę projektując systemy multiplatformowe.
Wnioski
Osobiście testowałem ACL na FreeBSD 5.x oraz FreeBSD 6.x (na systemie plików UFS2 ). Znacznie on uprościł implementacje kilku funkcji, ponieważ mogliśmy udostępnić zapis czy odczyt różnych plików bez uciekania się do trików z sudo czy natywnymi modułami kernela modyfikującymi kontrolę dostępu (jednym z takich modułów jest dazuko).
Jedyny problem jaki się pojawił to archiwizacja - gdyby nie jeden z administratorów który ucześniczył w projekcie nie zapytał:
Czy jesteś pewien że dodatkowe atrybuty filesystemu lądują w zwykłym tarze ?
to pewnie do dziś byśmy spokojnie spali w przeświadczeniu że kopia zapasowa danych jest kompletna.
Jest to napewno mechanizm który warto poznać. Czy używać ? Moim zdaniem tak, jednak należy się nauczyć zwracać uwagę na “+” przy listowaniu katalogu i sprawdzić czy Twoje narzędzia do archiwizacji danych obsługują ACLe.