FreeBSD ACL
Wpisany przez crash poniedziałek, 17 października 2005 19:05
Pięć lat temu (wow, to było tak dawno ?), napisałam artykuł: "Zrozumieć prawa dostępu w Unix'ie".
Od tego momentu w FreeBSD zaimplementowano coś co sie nazywa ACL (Access Control List).
ACL'e pojawiły sie w BSD jako część projektu TrustedBSD. Tak jak nazwa wskazuje dali użytkownikom doskonalszy dostęp nad prawami dostępu.
Dlaczego powinienem używać ACL ?
- ACL nie zmieniaja standartowych praw dostępu w Unix'ie czyli (r)ead, (w)rite, e(x)ecute
- Dają lepszą kontrolę nad plikami niż tylko te dla których są przypisane.
Mały przykład, jako zwykły użytkownik, stwórz plik o nazwie <i>test</i> w tymczasowym katalogu.
% touch /tmp/test % ls -l /tmp/test -rw-r--r-- 1 dru dru 0 Jul 26 15:43 /tmp/test |
Wybrałam ten katalog ponieważ wszyscy użytkownicy maja prawa zapisu do tego katalogu i jest to dobre miejsce do testowania praw dostępu. Jednak nie trzymaj tam żadnych ważnych plików, ponieważ mogą one zniknąć, w zależności jak administrator systemu ustawił czyszczenie tego katalogu!
W tym przykładzie, właścicielem pliku jest dru, posiada prawa rw ( zapis, odczyt ), grupa dru posiada dostęp do czytania ' r ' oraz inni posiadają prawo czytania ' r '. Zauważ że przy tworzeniu użytkownika w FreeBSD, dostajesz możliwość wyboru nazwy grupy np. nazwa twojego użytkownika.
Teraz przypuśćmy, że potrzebuję dać prawa zapisu dla użytkowników ' rob ' i ' toby '. W bieżącej postaci, mogą oni jedynie otworzyć go w edytorze, ale nie maja praw aby zapisać czegokolwiek do tego pliku.
Zanim użyjemy ACL, powstaje podstawowy dylemat, zmodyfikowania grupy.
Mogłabym, na przykład, poprosić administratora systemu aby dodał użytkowników ' rob ' i ' toby ' do grupy ' dru '. Wtedy można użyć chmod do dodania praw zapisu dla grupy. To jest lepsze rozwiązanie niż danie praw zapisu dla ' other ', ponieważ każdy w systemie miałby dostęp do zapisu tego pliku.
Alternatywnie, administrator systemu może ostrożnie zaplanować, którzy użytkownicy potrzebuja dostęp do pliku a następnie stworzyć odpowiednia grupę. Następnie przypisać grupę do danego pliku.
Jednak, żaden system nie jest doskonały. Po pierwsze, bedzie to wkurzalo administratora, ponieważ bedzie do dla niego badzo kłopotliwe aby modyfikować ciągle prawa do plików.
Dalej, rozważmy inny scenariusz. Przypuśćmy ze dru, rob i tobby należą do nowo powstałej grupy ' workgroup '. Wszyscy ci trzej użytkownicy mogą zapisywać do wszystkich plików które maja przypisaną grupę ' workgroup '. Ale co, jeżeli dru chce aby rob mial zapis do jednego z tych plików ale aby nie mógł toby ?
W tym momencie zaczyna sie komplikować. Na szczęście z pomocą przychodzi ACL. Bez prośby administratora o tworzenie nowych grup lub użycia ' chgrp ', dru może łatwo zdecydować kto może mieć prawa do plików.
Ten artykuł pokaże ci, w jaki sposób administrator systemu może łatwo przystosować FreeBSD do obsługi ACL. Tak więc ja zademonstruje narzedzie graficzne, które pozwoli twoim użytkownikom łatwo kontrolować ACL na ich plikach. Końcowo, pokażę ci w jaki sposób stworzyć kopię zapasową ACL'i.
Przygotowanie systemu
Jeżeli używasz FreeBSD 5.1 lub nowszych, ACL jest wspomagane i wbudowane w system oraz w system plików UFS2.
( Jeżeli używasz wcześniejszych wersji FreeBSD, przeczytaj artykuł Daniela Harris'a )
Zaczynając, musisz zdecydować jedynie na której partycji(-ach) chciałbyś używać ACL.
# df Filesystem 1K-blocks Used Avail Capacity Mounted on |
W moim systemie, chcę włączyć ACL jedynie dla użytkowników, tak więc skonfiguruję partycję ' /usr '.
FreeBSD Handbook wyjaśnia zalety używania komendy <i>tunefs</i> aby włączyć ACL. Wada tego jest taka, iż należy uruchomić system w trybie single-user i odmontować system plików. Wybierz odpowiednią porę kiedy użytkowników jest najmniej oraz wykonaj:
# shutdown now Enter full pathname of shell or RETURN for /bin/sh: # /sbin/umount /usr |
Użyj komendy ' df ', aby niepomylić nazwy użądzenia na którym chcesz włączyć ACL.
Następnie zobacz czy działa.
# /sbin/mount /dev/ad0s1a on / (ufs, local) devfs on /dev (devfs, local) /dev/ad0s1e on /tmp (ufs, local, soft-updates) /dev/ad0s1f on /usr (ufs, local, soft-updates, acls) /dev/ad0s1d on /var (ufs, local, soft-updates) |
# exit
To wszystko, teraz ACL działa na partycji /usr.