FreeBSD ACL

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
/dev/ad0s1a    253678   35764  197620    15%    /
devfs               1       1       0   100%    /dev
/dev/ad0s1e    253678      22  233362     0%    /tmp
/dev/ad0s1f   8077406 3045460 4385754    41%    /usr
/dev/ad0s1d    253678   21048  212336     9%    /var





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
# /sbin/tunefs -a enable /dev/ad0s1f
tunefs: ACLs set
# /sbin/mount /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)




A teraz przywróć system do trybu multiuser.

# exit

To wszystko, teraz ACL działa na partycji /usr.



Hosting @mc2 || Copyright © 2018 FreeBSD - Inside. Wszelkie prawa zastrzeżone.