Gentoo Logo

Konfiguracja OpenAFS w Gentoo

Spis treści:

1.  Przegląd

O dokumencie

Dokument opisuje wszystkie potrzebne kroki, jakie należy przedsięwziąć by zainstalować serwer OpenAFS w Gentoo Linux. Niektóre części dokumentu zostały zaczerpnięte z AFS FAQ oraz przewodnika "IBM Quick Beginnings guide on AFS". Nie wyważamy otwartych drzwi. :)

Czym jest AFS?

AFS jest rozproszonym systemem plików, który umożliwia współpracującym komputerom (zarówno klientom jak i serwerom) efektywnie współdzielić zasoby dyskowe przez sieć lokalną (LAN) jak i rozległą (WAN). Klienci posiadają pamięć podręczną na często używane obiekty (pliki), by móc szybko się do nich odwoływać.

AFS oparty jest na rozproszonym systemie plików "Andrew File System", nad którym pracowano w Centrum Technologii Informacyjnej na Uniwersytecie Carnegie-Mellon (CMU). "Andrew" było nazwą projektu badawczego na CMU, nadaną na cześć założycieli uniwersytetu. Po założeniu Transarc i tym, gdy AFS stał się produktem, "Andrew" został zarzucony, by zasygnalizować, że AFS wyszedł poza ramy projektu badawczego i stał się wspieranym, produkcyjnym systemem plików. Jednakże istniała znaczna liczba komórek, które swój system plików miały zakorzeniony jako /afs. W tamtym okresie zmiana punktu zaczepienia systemu plików była nietrywialnym przedsięwzięciem, więc by uchronić przed zmianami wczesne ośrodki korzystające AFS, AFS pozostało nazwą i punktem zaczepienia systemu plików.

Czym jest komórka AFS?

Komórka AFS to zbiór serwerów zgrupowanych administracyjnie i prezentujący się jako jeden spójny system plików. Zazwyczaj jest to zbiór komputerów wykorzystujący tę samą domenę internetową (np. gentoo.org). Użytkownicy logują się na maszyny klienckie AFS, które w ich imieniu żądają informacji i plików z serwerów należących do komórki. Użytkownicy nie wiedzą, na której maszynie znajduje się plik do którego próbują się odwołać. Nawet nie zauważą, że serwer będzie przenoszony w inne miejsce, gdyż każdy wolumin może być replikowany i przenoszony na inne serwery, bez potrzeby powiadamiania użytkownika. Pliki są zawsze dostępne. Jest to taki podrasowany NFS :)

Jakie korzyści płyną z używania AFS?

Mocne strony AFS to możliwość cache'owania (po stronie klienta, zazwyczaj od 100M do 1GB), funkcje bezpieczeństwa (bazowany na Kerberos 4, ACL), prostota adresowania (mamy po prostu jeden system plików), skalowalność (w razie potrzeby możliwość dodawania kolejnych serwerów do komórki), protokoły komunikacyjne.

Gdzie można uzyskać więcej informacji?

Lektura AFS FAQ.

Strona główna OpenAFS, www.OpenAFS.org.

AFS był początkowo rozwijany przez Transarc, które obecnie należy do IBM. Więcej informacji o AFS można znaleźć na stronie Transarc.

Jak diagnozować problemy?

OpenAFS posiada wspaniały mechanizm logowania. Jednakże zgodnie z domyślnymi ustawieniami, logi wędrują do odrębnych lokalizacji zamiast do mechanizmów logowania systemowego, które mamy w naszym systemie. Jeśli chcemy, by serwery korzystały z systemowych mechanizmów logowania, to używamy opcji -syslog dla wszystkich komend bos.

2.  Aktualizacja ze starszych wersji

Wprowadzenie

Ta część dokumentu opisuje proces aktualizacji OpenAFS do wersji 1.4.0 i nowszych (lub 1.2.x zaczynając od 1.2.13. Druga opcja nie zostanie opisana szczegółowo, w związku z tym, że znakomita większość użytkowników i tak wybierze 1.4 ze względu na obsługę jąder 2.6, dużych plików i naprawę wielu błędów poprzednich wydań.

Jeśli dopiero co został zainstalowany OpenAFS w wersji 1.4, można spokojnie pominąć ten rozdział. Jeśli jest to jednak aktualizacja, należy dokładnie go przeczytać. Skrypt zawarty w ebuildzie został zaprojektowany tak, aby możliwe było szybkie zainstalowanie nowej wersji i ponowne uruchomienie. Nie usunie on żadnych plikow konfiguracyjnych ani skryptów startowych. Nie zmieni automatycznie konfiguracji uruchamiania systemu, aby używała nowych skryptów. Warto również zauważyć, że nowsze jądra i stare wersje OpenAFS mogą prowadzić do poważnych błędów. Dlatego naprawdę warto dokonać tej aktualizacji.

Uwaga: Ten rozdział został napisany z myślą o wielu różnych konfiguracjach. Możliwe jest jednak, że użytkownik dokonał takich zmian, że opisane tu procedury nie będą miały dla niego żadnego zastosowania. Doświadczeni użytkownicy mogą wybrać z poniższych działań te, które dotyczą ich systemu. Natomiast użytkownicy, którzy nie dokonywali zbyt wielu zmian w konfiguracji, będą narażeni na mniejszą ilość problemów.

Różnice pomiędzy wersjami

W przeszłości OpenAFS korzystał z pewnego schematu nazewnictwa podobnego do tego, z jakiego korzystali ludzie z laboratoriów IBM TransArc. W związku z tym stare instalacje OpenAFS wciąć te schematy wykorzystują. Nowsze wersje są zgodne ze standardem FHS i korzystają ze standardowych ścieżek systemu Linux. Poniższa tabela zawiera zestawienie różnic pomiędzy oboma standardami.

Katalog Wykorzystanie Standard Transarc Domyślnie Gentoo
viceetcdir konfiguracja klienta /usr/vice/etc $(sysconfdir)/openafs /etc/openafs
bez nazwy binaria brak $(bindir) /usr/bin
afsconfdir konfiguracja serwera /usr/afs/etc $(sysconfdir)/openafs/server /etc/openafs/server
afssrvdir wewnętrzne binaria /usr/afs/bin (servers) $(libexecdir)/openafs /usr/libexec/openafs
afslocaldir status serwera /usr/afs/local $(localstatedir)/openafs /var/lib/openafs
afsdbdir Bazy danych Auth/serverlist/... /usr/afs/db $(localstatedir)/openafs/db /var/lib/openafs/db
afslogdir Logi /usr/afs/logs $(localstatedir)/openafs/logs /var/lib/openafs/logs
afsbosconfig Overseer config $(afslocaldir)/BosConfig $(afsconfdir)/BosConfig /etc/openafs/BosConfig

Są również inne niejasności, jak na przykład binaria umieszczane w katalogu /usr/vice/etc w standardzie Transarc. Powyższa lista nie jest dokładna. Jest raczej próbą krótkiego podsumowania najbardziej kluczowych pozycji.

W związku ze zmianami ścieżek, domyślne miejsce cache zmieniło się z /usr/vice/cache na /var/cache/openafs.

Co więcej skrypty startowe zostały podzielone na dwie grupy, te dla serwera i te dla klienta. Kiedyś był po prostu skrypt /etc/init.d/afs, teraz są dwa, /etc/init.d/openafs-client i /etc/init.d/openafs-server. Tak samo pliki konfiguracyjne z /etc/conf.d/afs zostały podzielone na /etc/conf.d/openafs-client i /etc/conf.d/openafs-server. Opcje w pliku, które /etc/conf.d/afs posiadały możliwość włączenia dla klienta i serwera zostały wyłączone.

Kolejna zmiana w skrypcie startowym jest taka, że nie sprawdza on już konfiguracji cache na dysku. Starsze wersje domagały się osobnej partycji ext2 zamontowanej w /usr/vice/cache, co powodowało szereg problemów:

  • Chociaż to bardzo rozsądne rozwiązanie, posiadanie cache na osobnej partycji nie powinno być obowiązkowe. Nowa konfiguracja jest w porządku, dopóki ilość miejsca ustawiona w /etc/openafs/cacheinfo jest naprawdę dostępna dla cache. Dlatego nie ma żadnych większych problemów z ustawieniem cache tak, aby znajdowało się na partycji głównej.
  • Niektórzy korzystali z miękkich dowiązań wskazujących na prawdziwe miejsce przechowywania cache. Skrypt startowy nie działał wtedy dobrze, ponieważ taka lokacja nie była wyświetlana w /proc/mounts.
  • Wiele osób woli ext3 od ext2. Oba systemy plików mogą być używane dla cache. Nie działa żaden inny system plików (Jeśli cache będzie ustawiony na partycję, na przykład, reiserfs, pojawi się ostrzeżenie, a potem seria błędów).

Migracja na nowe ścieżki

Przede wszystkim, instalacja nowej wersji OpenAFS nie usunie żadnych starych plików konfiguracyjnych. Skrypt został zaprojektowany tak, że nie zmienia żadnych plików już obecnych w systemie. Zatem jeśli nawet konfiguracja była całkowicie zmieniona przez użytkownika, były w niej pomieszane nowe i stare ścieżki, skrypt wciąż nie przysporzy żadnych problemów. Jeśli zostanie wykryte, że w systemie wciąż działa serwer OpenAFS, instalacja zostanie przerwana, zapobiegając możliwym uszkodzeniom bazy danych.

Istnieje jednak pewien problem. W Internecie krąży kilka ebuildów, które wyłączają domyślną ochronę jaką Gentoo zapewnia dla /etc. Te ebuildy nie były nigdy dostarczane jako część Gentoo. Przed przystąpieniem do dalszej pracy warto sprawdzić zmienną CONFIG_PROTECT_MASK za pomocą następującego polecenia:

Listing 2.1: Checking your CONFIG_PROTECT_MASK

# emerge info | grep "CONFIG_PROTECT_MASK"
CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/texmf/web2c /etc/env.d"

Nic co jest w ebuildzie nie powinno nawet dotknąć plików wewnątrz /etc/afs. Aktualizacja usunie natomiast cały katalog z poprzednią instalacją OpenAFS. Pliki ze zmiennej CONFIG_PROTECT_MASK, które należą do starej instalacji przestaną istnieć.

Każdy użytkownik, który zmieniał konfigurację ręcznie, za pomocą dowiązań symbolicznych (np. kierując /usr/afs/etc do /etc/openafs) będzie miał możliwość korzystania z nowej wersji z użyciem starych plików konfiguracyjnych. W takim przypadku nie dojdzie do żadnego prawdziwego przejścia na nowe ścieżki a wyczyszczenie starej instalacji OpenAFS zepsuje wszystko.

Teraz, gdy już wiemy mniej więcej co nie powinno się zdarzyć, warto dowiedzieć się co stanie się na pewno:

  • /usr/afs/etc zostanie skopiowane do /etc/openafs/server
  • /usr/vice/etc zostanie skopiowane do /etc/openafs
  • /usr/afs/local zostanie skopiowane do /var/lib/openafs
  • /usr/afs/local/BosConfig zostanie skopiowane do /etc/openafs/BosConfig, a wszystkie wystąpienia /usr/afs/bin/ zostaną zastąpione przez /usr/libexec/openafs, /usr/afs/etc przez /etc/openafs/server, a /usr/afs/bin (bez / na końcu jak wcześniej) przez /usr/bin
  • /usr/afs/db zostanie skopiowane do /var/lib/openafs/db
  • Plik konfiguracyjny /etc/conf.d/afs zostanie skopiowany do /etc/conf.d/openafs-client, ponieważ wszystkie stare opcje dotyczą jedynie klienta.

Aktualizacja właściwa

W poprzednich rozdziałach wyjaśniliśmy co się stanie. Jeśli wciąż chcesz to zrobić, do roboty.

Rozpoczynamy proces aktualizacji.

Jeśli serwer wciąż działa, trzeba go teraz wyłączyć.

Listing 2.2: Zatrzymywanie serwera OpenAFS

# /etc/init.d/afs stop

A teraz aktualizacja.

Listing 2.3: Aktualizacja!

# emerge -u openafs

Ponowne uruchamianie OpenAFS

Zaczynamy od wyłączenia serwera.

Listing 2.4: Zatrzymywanie serwera po aktualizacji

# /etc/init.d/afs stop

Czas, kiedy serwer jest wyłączony powinien być możliwie krótki. Dlatego warto go od razu uruchomić ponownie.

Listing 2.5: Ponowne uruchamianie serwera OpenAFS

# /etc/init.d/openafs-server start

Można sprawdzić czy serwer działa prawidłowo za pomocą następującego polecenia:

Listing 2.6: Sprawdzanie serwera OpenAFS

# /usr/bin/bos status localhost -localauth

Przed ponownym uruchomieniem klientów OpenAFS, należy spędzić chwilę sprawdzając ustawienia cache. Są one zależne od /etc/openafs/cacheinfo. Aby ponownie uruchomić klienty, należy wpisać:

Listing 2.7: Ponowne uruchamianie klientów po aktualizacji

# /etc/init.d/openafs-client start

Sprzątanie po aktualizacji

Przed przystąpieniem do czyszczenia, należy się upewnić, że serwer działa bez problemów i że został ponownie uruchomiony (w innym wypadku stara instalacja może wciąż działać).

Ważne: Należy się upewnić, że nie używa się /usr/vice/cache dla cache na dysku jeśli ma być skasowane /usr/vice!

Można bezpiecznie usunąć następujące katalogi:

  • /etc/afs
  • /usr/vice
  • /usr/afs
  • /usr/afsws

Następujące pliki nie są już potrzebne?

  • /etc/init.d/afs
  • /etc/conf.d/afs

Listing 2.8: Usuwanie starych plików

# tar czf /root/oldafs-backup.tgz /etc/afs /usr/vice /usr/afs /usr/afsws
# rm -R /etc/afs /usr/vice /usr/afs /usr/afsws
# rm /etc/init.d/afs /etc/conf.d/afs

Jeśli wcześniej korzystano z ebuildów =openafs-1.2.13 lub =openafs-1.3.85, należy usunąć również następujące pliki:

  • /etc/init.d/afs-client
  • /etc/init.d/afs-server
  • /etc/conf.d/afs-client
  • /etc/conf.d/afs-server

Zmiany w skryptach startowych

W tym momencie większość użytkowników ma system skonfigurowany tak, aby automatycznie uruchamiał serwer i klienta OpenAFS przy starcie. Ci, którzy nie mają takiej konfiguracji mogą pominąć ten rozdział. Jeśli system był wcześniej skonfigurowany tak, aby uruchamiał te skrypty, teraz trzeba skonfigurować go ponownie, gdyż skrypty te się zmieniły.

Listing 2.9: Ponowna konfiguracja skryptów startowych OpenAFS

# rc-update del afs default
# rc-update add openafs-client default
# rc-update add openafs-server default

Jeśli jest to aktualizacja z =openafs-1.2.13 lub =openafs-1.3.85, konieczne będzie usunięcie afs-client i afs-server z domyślnego poziomu uruchomieniowego zamiast afs.

Problemy, czyli co robić kiedy automatyczna aktualizacja zawiedzie

Przede wszystkim nie panikować. Nie doszło do straty żadnych danych ani plików konfiguracyjnych. Trzeba przeanalizować sytuację, a następnie zgłosić błąd na stronie bugs.gentoo.org z jak największą ilością informacji.

Jeśli pojawią się problemy z uruchomieniem klienta, można zdiagnozować problem w następujący sposób.

  • Należy uruchomić dmesg. To tam są wysyłane informacje o błędach klienta.
  • Następnie należy sprawdzić /etc/openafs/cacheinfo. Powinien mieć on postać: /afs:{path to disk cache}:{number of blocks for disk cache}. Domyślnie cache znajduje się w /var/cache/openafs.
  • Należy również sprawdzić wyjście lsmod w poszukiwaniu linii zaczynających się od słowa openafs.
  • pgrep afsd powie czy afsd działa czy nie
  • cat /proc/mounts powinien wskazywać, że /afs jest zamontowane

Jeśli pojawią się problemy z uruchomieniem serwera, poniższe wskazówki mogą pomóc:

  • pgrep bosserver mówi o tym czy overseer jest uruchomiony czy nie. Jeśli jest uruchomiony więcej niż jeden, coś musiało pójść źle. W takim wypadku należy zamknąć serwer OpenAFS za pomocą polecenia bos shutdown localhost -localauth -wait, sprawdzić rezultat tej czynności za pomocą bos status localhost -localauth, zabić wszystkie pozostałe procesy overseer, a następnie sprawdzić czy nie działa już żaden proces serwera (ls /usr/libexec/openafs wyświetli ich listę). Następnie należy wpisać /etc/init.d/openafs-server zap w celu zresetowania statusu serwera i /etc/init.d/openafs-server start, aby go ponownie uruchomić.
  • Jeśli korzysta się z systemu logowania OpenAFS (co jest domyślnym ustawieniem), należy sprawdzić /var/lib/openafs/logs/*. Jeśli natomiast korzysta się z sysloga, należy sprawdzić logi systemowe w celu uzyskania informacji na temat tego co mogło źle pójść.

3.  Dokumentacja

Pobieranie dokumentacji AFS

Istnieje możliwość uzyskania oryginalnej dokumentacji IBM AFS. Jest bardzo dobrze napisana i naprawdę należy się z nią zapoznać, jeśli myślimy o administrowania serwerem AFS.

Listing 3.1: Instalacja afsdoc

# emerge app-doc/afsdoc

Istnieje również możliwość korzystania z dokumentacji dostarczanej wraz z OpenAFS. Jest ona instalowana, gdy włączona jest flaga doc. Dokumentacja znajduje się w katalogu /usr/share/doc/openafs-*/. W momencie pisania tego tekstu, dokumentacja ta była wciąż w fazie tworzenia. Z czasem jednak na pewno pojawią się tam opisy najnowszych funkcji, które nie zostały opisane w dokumentacji AFS IBM-a.

4.  Instalacja klienta

Budowanie klienta

Listing 4.1: Instalacja OpenAFS

# emerge net-fs/openafs

Po zakończonej sukcesem kompilacji, możemy kontynuować.

Prosty sposób na instalację klienta globalnego

Jeśli nie jest się częścią komórki, którą zamierza się przeglądać i jeśli chce się po prostu przejrzeć wszystkie dostępne globalnie zasoby OpenAFS, nie trzeba zmieniać żadnej konfiguracji. Wystarczy po prostu uruchomić /etc/init.d/openafs-client.

Łączenie się z konkretną komórką OpenAFS

Dostęp do konkretnej komórki wymaga tylko kilku drobnych zmian w konfiguracji.

Po pierwsze trzeba zaktualizować /etc/openafs/CellServDB dodając serwery baz danych dla danej komórki. Zwykle informacji o nich dostarcza administrator.

Po drugie, aby móc zalogować się do komórki, należy wpisać jej nazwę w pliku /etc/openafs/ThisCell.

Listing 4.2: Dostosowanie CellServDB i ThisCell

CellServDB:
>netlabs        #Cell name
10.0.0.1        #storage

ThisCell:
netlabs

Ostrzeżenie: Przy edycji CelLServDB nie należy używać znaków tabulacji (zamiast nich, spacje), gdyż klient prawdopodobnie nie zadziała poprawnie.

Wpis CellServDB informuje klienta o tym z którymi komórkami chce się skontaktować. Wpis ThisCell jest jasny. Zwykle używa się tu unikalnej nazwy organizacji. Można też wpisać nazwę swojej domeny.

Później wystarczy uruchomić /etc/init.d/openafs/client i użyć klog, aby się autoryzować i zacząć używać komórki. Automatyczne logowanie omówimy za chwilę.

Konfiguracja cache

Uwaga: Niestety klient AFS potrzebuje partycji ext2/3 na swój cache. Wciąż występują problemy z innymi systemami plików (szczególnie z reiserfs).

Cache może znajdować się zarówno w już istniejącym systemie plików (jeśli jest to ext2/3) lub na osobnej, stworzonej tylko w tym celu partycji. Domyślna lokacja dla cache to /var/cache/openafs, ale można ją zmienić edytując /etc/openafs/cacheinfo. Standardowy rozmiar dla cache to 200 MB, ale więcej miejsca na pewno nie zaszkodzi.

Uruchamianie AFS podczas rozruchu systemu

Następujące komendy utworzą odpowiednie dowiązania, tak by klient AFS uruchamiał się podczas rozruchu systemu.

Ostrzeżenie: Jeśli próbujemy uruchamiać klienta AFS, to powinniśmy posiadać w domenie działający serwer AFS. W przeciwnym razie, system nie uruchomi się przed upływem limitu czasu odpowiedzi od serwera AFS. (zazwyczaj jest to całkiem długi czas...)

Listing 4.3: Dodawanie afs do domyślnego poziomu uruchamiania

# rc-update add openafs-client default

5.  Instalacja serwera

Budowanie serwera

Uwaga: Wszystkie polecenia należy wpisywać w jednej linii. W tym tekście są czasami zawinięte dla zwiększenia ich czytelności.

Następujące komendy zainstalują binaria niezbędne do uruchomienia serwera i klienta AFS.

Listing 5.1: Instalacja OpenAFS

# emerge net-fs/openafs

Uruchamianie serwera AFS

Zaczynamy od wpisania bosserver żeby uruchomić serwer Basic Overseer (BOS), który monitoruje i kontroluje inne procesy serwera AFS na maszynie z serwerem. Możemy myśleć o tym jak o rozruchu systemu. Dodajemy flagę -noauth by wyłączyć autoryzację, gdyż jeszcze nie dodaliśmy użytkownika z prawami administratora.

Ostrzeżenie: Wyłączenie autoryzacji likwiduje bezpieczeństwo komórki. Wszystkie kolejne kroki muszą być wykonane w nieprzerwanym ciągu i nie można zostawić maszyny bez nadzoru, do czasu restartu serwera BOS z włączoną autoryzacją. Przynajmniej tyle mówi dokumentacja AFS :)

Listing 5.2: Inicjalizacja serwera Basic OverSeer

# /usr/afs/bin/bosserver -noauth &

Sprawdzamy czy serwer BOS utworzył pliki /etc/openafs/server/CellServDB i /etc/openafs/server/ThisCell.

Listing 5.3: Check if CellServDB and ThisCell are created

# ls -al /etc/openafs/server/
-rw-r--r--    1 root     root           41 Jun  4 22:21 CellServDB
-rw-r--r--    1 root     root            7 Jun  4 22:21 ThisCell

Definiowanie nazwy komórki i przynależności dla procesu serwera

Przypisujemy komórce nazwę.

Ważne: Istnieją pewne ograniczenia co do formatu nazwy. Dwa z najważniejszych ograniczeń to to, że nazwa nie może mieć więcej niż 64 znaki ani zawierać wielkich liter. Należy pamiętać, że nazwa komórki pojawi się w katalogu /afs, więc możemy chcieć wybrać krótsze nazwy.

Uwaga: W poniższej i każdej kolejnej instrukcji w tym podręczniku, wpis <server name> należy zastąpić pełną złożoną nazwą komputera (np. afs.gentoo.org) na którym instalujemy, zaś zmienną <cell name> zastępujemy przez pełną nazwę komórki (np. gentoo).

Nazwę komórki ustawiamy wydając polecenie bos setcellname:

Listing 5.4: Ustawienie nazwy komórki

# bos setcellname <serwer> <komórka> -noauth

Uruchamianie procesu serwera bazy danych

Następnie używamy komendy bos create do utworzenie wpisów w pliku /etc/openafs/BosConfig, dla czterech procesów serwerów baz danych. Te cztery procesy działają tylko na maszynach serwerowych.

kaserver Authentication Server zarządza bazą danych uwierzytelniania. Może zostać zastąpiony przez demona Kerberos 5. Jeśli koś zechce wypróbować takie rozwiązanie to proszony jest o zaktualizowanie tego dokumentu :)
buserver Backup Server zarządza bazą kopii zapasowych (Backup Database)
ptserver Protection Server zarządza bazą bezpieczeństwa (Protection Database)
vlserver Volume Location Server zarządza bazą z informacjami o woluminach (VLDB - Volume Location Database). Bardzo ważny :)

Listing 5.5: Tworzenie wpisów dla procesów bazodanowych

# bos create <nazwa serwera> kaserver \
simple /usr/libexec/openafs/kaserver \
-cell <cell name> -noauth
# bos create <nazwa serwera> buserver \
simple /usr/libexec/openafs/buserver \
-cell <cell name> -noauth
# bos create <nazwa serwera> ptserver \
simple /usr/libexec/openafs/ptserver \
-cell <cell name> -noauth
# bos create <nazwa serwera> \
vlserver simple /usr/libexec/openafs/vlserver \
-cell <cell name> -noauth

Działanie wszystkich serwerów możemy zweryfikować wydając polecenie bos status:

Listing 5.6: Sprawdzanie działania wszystkich serwerów

# bos status <server name> -noauth
Instance kaserver, currently running normally.
Instance buserver, currently running normally.
Instance ptserver, currently running normally.
Instance vlserver, currently running normally.

Inicjalizowanie bezpieczeństwa komórki

Teraz zajmiemy się inicjalizowaniem mechanizmów bezpieczeństwa komórki. Zaczniemy od utworzenia następujących dwóch wpisów w bazie zawierającej dane uwierzytelniające (Authentication Database): główne konto administracyjne, nazwane zgodnie z konwencją admin oraz wpis dla procesów serwera AFS, zwany afs. Żaden użytkownik nie legitymuje się tożsamością afs, za wyjątkiem usługi TGS serwera uwierzytelniającego (Ticket Granting Service - usługa przydzielania biletów), która wykorzystuje to konto do szyfrowania biletów serwera, przyznawanych klientom AFS. Przypomina to bardzo Kerberosa :)

Uruchamianie tryby interaktywnego kas.

Listing 5.7: Uruchamianie trbu interaktywnego

# /usr/afs/bin/kas -cell <cell name> -noauth
ka> create afs
initial_password:
Verifying, please re-enter initial_password:
ka> create admin
initial_password:
Verifying, please re-enter initial_password:
ka> examine afs

User data for afs
key (0) cksum is 2651715259, last cpw: Mon Jun  4 20:49:30 2001
password will never expire.
An unlimited number of unsuccessful authentications is permitted.
entry never expires.  Max ticket lifetime 100.00 hours.
last mod on Mon Jun  4 20:49:30 2001 by <none>
permit password reuse
ka> setfields admin -flags admin
ka> examine admin

User data for admin (ADMIN)
key (0) cksum is 2651715259, last cpw: Mon Jun  4 20:49:59 2001
password will never expire.
An unlimited number of unsuccessful authentications is permitted.
entry never expires.  Max ticket lifetime 25.00 hours.
last mod on Mon Jun  4 20:51:10 2001 by <none>
permit password reuse
ka>

Użytkownika admin dodajemy do /etc/openafs/server/UserList przez wydanie komendy bos adduser.

Listing 5.8: Dodawanie użytkownika admin do UserList

# bos adduser <server name> admin -cell <cell name> -noauth

Klucz szyfrujący dla serwera AFS definiujemy w pliku /etc/openafs/server/KeyFile wywołując komendę bos addkey.

Uwaga: Na pytanie o podanie klucza podajemy hasło, które wprowadziliśmy przy tworzeniu konta afs przy użyciu kas.

Listing 5.9: Wprowadzanie hasła

# bos addkey  <server name> -kvno 0 -cell <cell name> -noauth
input key:
Retype input key:

Wydajemy polecenie pts createuser, by dla użytkownika admin utworzyć wpis w bazie bezpieczeństwa (Protection Database).

Uwaga: Serwer ochrony (Protection Server) standardowo przypisuje użytkownikowi admin AFS UID 1, gdyż jest to pierwszy użytkownik jakiego tworzymy. Jeśli lokalny plik haseł (/etc/passwd lub analogiczny) już zawiera wpis admin, który posiada inny UID, to używamy opcji -id do utworzenia odpowiadającego UID-a.

Listing 5.10: Tworzenie wpisu dla użytkownika bazodanowego w bazie bezpieczeństwa (Protection Database)

# /usr/afs/bin/pts createuser -name admin -cell <cell name> [-id <AFS UID>] -noauth

Wydajemy komendę pts adduser, by dodać użytkownika admin do grupy system:administrators, zaś polecenia pts membership, by zweryfikować przynależność.

Listing 5.11: Przypisanie użytkownika admin do grupy administrators i weryfikacja

# pts adduser admin system:administrators -cell <cell name> -noauth
# pts membership admin -cell <cell name> -noauth
Groups admin (id: 1) is a member of:
system:administrators

Prawidłowe ponowne uruchamianie serwera AFS

W tym momencie prawidłowa autoryzacja jest możliwa i serwer OpenAFS może się normalnie uruchomić. Dla prawidłowej autoryzacji należy również uruchomić klienta OpenAFS. Opis jego konfiguracji znajduje się w poprzednim rozdziale.

Listing 5.12: Wyłączanie bosserver

# bos shutdown <server name> -wait -noauth
# killall bosserver

Listing 5.13: Prawidłowe uruchomienie serwera i klientaOpenAFS

# /etc/init.d/openafs-server start
# /etc/init.d/openafs-client start

Listing 5.14: Dodawanie serwera AFS na domyślny poziom uruchomieniowy

# rc-update add openafs-server default

Listing 5.15: Uzyskiwanie tokenu jako zwykły użytkownik

# klog admin

Uruchamianie serwera plików, woluminów i serwera Salvager

Uruchamiamy proces fs, który składa się z serwera plików, serwera woluminów i serwera Salvager (procesy fileserver, volserver i salvager).

Listing 5.16: Uruchamianie procesu fs

# bos create <server name> fs fs /usr/libexec/openafs/fileserver /usr/libexec/openafs/volserver /usr/libexec/openafs/ salvager -cell <cell name> -noauth

Sprawdzamy czy wszystkie procesy działają.

Listing 5.17: Sprawdzanie działania wszystkich procesów

# bos status <server name> -long -noauth
Instance kaserver, (type is simple) currently running normally.
Process last started at Mon Jun  4 21:07:17 2001 (2 proc starts)
Last exit at Mon Jun  4 21:07:17 2001
Command 1 is '/usr/libexec/openafs/kaserver'

Instance buserver, (type is simple) currently running normally.
Process last started at Mon Jun  4 21:07:17 2001 (2 proc starts)
Last exit at Mon Jun  4 21:07:17 2001
Command 1 is '/usr/libexec/openafs/buserver'

Instance ptserver, (type is simple) currently running normally.
Process last started at Mon Jun  4 21:07:17 2001 (2 proc starts)
Last exit at Mon Jun  4 21:07:17 2001
Command 1 is '/usr/libexec/openafs/ptserver'

Instance vlserver, (type is simple) currently running normally.
Process last started at Mon Jun  4 21:07:17 2001 (2 proc starts)
Last exit at Mon Jun  4 21:07:17 2001
Command 1 is '/usr/libexec/openafs/vlserver'

Instance fs, (type is fs) currently running normally.
Auxiliary status is: file server running.
Process last started at Mon Jun  4 21:09:30 2001 (2 proc starts)
Command 1 is '/usr/libexec/openafs/fileserver'
Command 2 is '/usr/libexec/openafs/volserver'
Command 3 is '/usr/libexec/openafs/salvager'

Następne kroki zależą od tego czy kiedykolwiek uruchamialiśmy w obrębie komórki serwer plików AFS:

Jeśli instalujemy po raz pierwszy serwer AFS w komórce, to tworzymy pierwszy wolumin AFS, root.afs.

Uwaga: Zamiast "partition name" wstawiamy nazwę jednej z partycji serwera AFS na danej maszynie. Każdy system plików zamontowany jako /vicepx, gdzie x należy do a-z, będzie traktowany i wykorzystywany jako partycja AFS. Każdy system plików jest tu dobry, w przeciwieństwie do cache klienta, gdzie można skorzystać tylko z ext2 i ext3. Drobna porada: Serwer sprawdza każdy punkt montowania /vicepx, aby ustalić czy jest tam zamontowany jakiś system plików. Jeśli nie, nie będzie próbował z niego skorzystać. Można zmienić to zachowanie dodając plik o nazwie AlwaysAttach w tym katalogu.

Listing 5.18: Tworzenie woluminu root.afs

# vos create <server name> <partition name> root.afs -cell <cell name> -noauth

Jeśli istnieją maszyny z serwerem plików AFS oraz woluminy w komórce, to wydajemy polecenia vos sncvldb oraz vos syncserv, by zsynchronizować VLDB (baza danych woluminów) ze stanem woluminów na lokalnej maszynie. W efekcie wszystkie niezbędne dane zostaną skopiowane na nowy serwer.

Jeśli polecenia zakończy się komunikatem "partition /vicepa does not exist on the server", to musimy się upewnić, że partycja jest montowana przed uruchomieniem serwerów OpenAFS lub montujemy katalog i ponownie uruchamiamy procesy używając bos restart <server name> -all -cell <cell name> -noauth.

Listing 5.19: Synchronizacja VLDB

# vos syncvldb <server name> -cell <cell name> -verbose -noauth
# vos syncserv <server name> -cell <cell name> -verbose -noauth

Uruchamianie fragmentów serwera update

Listing 5.20: Uruchamianie serwera update

# bos create <server name> \
upserver simple "/usr/libexec/openafs/upserver \
-crypt /etc/openafs/server -clear /usr/libexec/openafs" \
-cell <cell name> -noauth

Konfigurowanie najwyższego poziomu w systemie plików AFS

Na początek musimy ustawić kilka ACL-i, tak by użytkownik mógł przeglądać /afs.

Uwaga: Domyślna konfiguracja klienta OpenAFS włącza opcję dynroot. Opcja ta sprawia, że katalog /afs staje się katalogiem wirtualnym złożonym z zawartości pliku /etc/openafs/CellServDB. W związku z tym nie będą działały poniższe polecenia, ponieważ dla ich prawidłowego wykonania konieczne jest posiadanie prawdziwego katalogu AFS. Można tymczasowo wyłączyć opcję dynroot ustawiając zmienną ENABLE_DYNROOT na wartość no w pliku /etc/conf.d/openafs-client. Następnie należy ponownie uruchomić klienta.

Listing 5.21: Ustawianie list kontroli dostępu

# fs setacl /afs system:anyuser rl

Następnie tworzymy główny wolumin, montujemy go jako /afs/<cell name> w trybie tylko do odczytu i jako /afs/.<cell name> w trybie do odczytu i zapisu.

Listing 5.22: Przygotowanie głównego woluminu

# vos create <server name><partition name> root.cell
# fs mkmount /afs/<cell name> root.cell 
# fs setacl /afs/<cell name> system:anyuser rl
# fs mkmount /afs/.<cell name> root.cell -rw

Listing 5.23: Dodawanie woluminów

# vos create <server name> <partition name> <myvolume>
# fs mkmount /afs/<cell name>/<mymountpoint> <myvolume>
# fs mkmount /afs/<cell name>/.<mymountpoint> <myvolume> -rw
# fs setquota /afs/<cell name>/.<mymountpoint> -max <quotum>

Nareszcie skończyliśmy! Powinniśmy posiadać działający serwer plików AFS w naszej sieci lokalnej. Czas na duży kubek kawy i drukowanie dokumentacji AFS!

Uwaga: Do prawidłowego funkcjonowania serwera AFS wymagane jest, by zegary wszystkich systemów były zsynchronizowane. Można to osiągnąć instalując na jednej z maszyn (np. serwerze AFS) serwer ntp i synchronizować zegary klientów za pomocą klienta ntp. Może być to także robione przez klienta afs.

6.  Podstawy administracji

Ostrzeżenie

OpenAFS jest rozległą technologią. Prosimy o przeczytanie dokumentacji AFS w celu uzyskania większej ilości informacji. W tym rozdziale wymieniamy tylko kilka administracyjnych zadań.

Konfiguracja PAM do uzyskiwania tokena AFS przy logowaniu

By korzystać z AFS musimy się uwierzytelnić na serwerze KA, jeśli korzystamy z implementacji AFS i Kerberos 4 lub w Kerberos 5 KDC, jeśli korzystamy z MIT, Heimdal lub ShiShi Kerberos5. Jednakże, by zalogować się na maszynę, potrzebujemy konta użytkownika. Może to być konto lokalne w /etc/passwd, NIS, LDAP (OpenLDAP) lub bazie Hesiod. W Gentoo PAM pozwala na powiązanie uwierzytelniania AFS z logowaniem na konto użytkownika.

Musimy zaktualizować /etc/pam.d/system-auth, które jest używane przez inne konfiguracje. "use_first_pass" sygnalizuje, że najpierw sprawdzany jest login użytkownika, zaś "ignore_root" sprawia, że super użytkownik jest ignorowany (podobnie jak każdy użytkownik z UID 0) w przypadku, gdy zawiedzie AFS lub sieć.

Listing 6.1: /etc/pam.d/system-auth

auth       required     pam_env.so
auth       sufficient   pam_unix.so likeauth nullok
auth       sufficient   pam_afs.so.1 use_first_pass ignore_root
auth       required     pam_deny.so

account    required     pam_unix.so

password   required     pam_cracklib.so retry=3
password   sufficient   pam_unix.so nullok md5 shadow use_authtok
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so

By zapobiec uzyskaniu dostępu AFS przez lokalnych użytkowników i by sudo zachowywało token rzeczywistego użytkownika, zmieniamy /etc/pam.d/su i następujący sposób:

Listing 6.2: /etc/pam.d/su

# W tym przykładzie, użytkownicy z uid > 100 są traktowani jako
należący do AFS, zaś użytkownicy z
# uid <= 100 są ignorowani przez pam_afs.
auth       sufficient   /usr/afsws/lib/pam_afs.so.1 ignore_uid 100

auth       sufficient   /lib/security/pam_rootok.so

#Jeśli chcemy ograniczyć listę użytkowników, którzy mogą wykonywać
# polecenie su, to tworzymy plik /etc/security/suauth.allow zapisywalny jedynie
# przez roota i dodajemy w nim listę uprawnionych użytkowników. Każdy w osobnej
# linii.
#auth       required     /lib/security/pam_listfile.so item=ruser \
#       sense=allow onerr=fail file=/etc/security/suauth.allow

# Następującą linię należy odkomentować, by pozwolić użytkownikom z grupy
# 'wheel' na wykonywanie komendy su bez wprowadzania hasła.
#auth       sufficient   /lib/security/pam_wheel.so use_uid trust

# Alternatywę dla powyższego stanowi lista użytkowników, którzy nie muszą
# wprowadzać hasła przy wykonywaniu komendy su.
#auth       sufficient   /lib/security/pam_listfile.so item=ruser \
#       sense=allow onerr=fail file=/etc/security/suauth.nopass

# Poniższa linię należy zakomentować, by pozwolić dowolnemu użytkownikowi, nawet
# takiemu nie należącemu do grupy 'wheel', na wykonywanie komendy su.
auth       required     pam_wheel.so use_uid

auth       required     pam_stack.so service=system-auth

account    required     pam_stack.so service=system-auth

password   required     pam_stack.so service=system-auth

session    required     pam_stack.so service=system-auth
session    optional     pam_xauth.so

# W tym miejscu zapobiegamy zrzuceniu tokena rzeczywistego id przez użytkownika
session    optional     pam_afs.so.1 no_unlog


Drukuj

Zaktualizowano 29 czerwca 2007

Oryginalna wersja tego dokumentu została po raz ostatni zaktualizowana 13 grudnia 2011. Jeśli chcesz pomóc w aktualizacji tego dokumentu do najnowszej wersji, skontaktuj się z Łukaszem Damentko, koordynatorem polskiego projektu tłumaczeń dokumentacji Gentoo.

Podsumowanie: Opis instalacji klienta i serwera OpenAFS w Gentoo Linux.

Stefaan De Roeck
Redaktor

Holger Brueckner
Redaktor

Benny Chuang
Redaktor

Tiemo Kieft
Redaktor

Steven McCoy
Redaktor

Shyam Mani
Redaktor

Paweł Kwiatkowski
Tłumaczenie

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.