PLD-doc/queue: heimdal.patch pl_uslugi__heimdal.sec
ciesiel
cvs w pld-linux.org
Śro, 27 Kwi 2005, 20:08:44 CEST
Author: ciesiel
Date: Wed Apr 27 20:08:39 2005
New Revision: 5886
Added:
PLD-doc/queue/pl_uslugi__heimdal.sec
Removed:
PLD-doc/queue/heimdal.patch
Log:
- dodanie do kolejki upisu heimdal (Mariusz Krynski)
- potrzeba sprawdzenia
- usuniecie niepotrzebnego juz patcha
Added: PLD-doc/queue/pl_uslugi__heimdal.sec
==============================================================================
--- (empty file)
+++ PLD-doc/queue/pl_uslugi__heimdal.sec Wed Apr 27 20:08:39 2005
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="iso-8859-2"?>
+<section id="uslugi_heimdal">
+ <title>Heimdal - Implementacja protokołu Kerberos</title>
+ <para>
+Heimdal jest implementacją nowoczesnego sieciowego protokołu uwierzytelniania
+użytkowników Kerberos. Użytkownik po standardowym zalogowaniu za pomocą hasła
+na czas trwania sesji otrzymuje specjalny unikalny klucz (w terminologii
+kerberos'a nazywany biletem (ang. ticket)) za pomocą którego może uzyskać
+dostęp do innych usług w sieci już bez konieczności dodatkowego podawania
+hasła.</para>
+
+<para>Każda sieć posiada wydzielony serwer Kerberos, zwany KDC
+(Key Distibution Center) którego zadaniem jest zarządzanie centralną bazą
+kluczy (m.in. wydawanie nowych kluczy oraz odpowiadanie na pytania dotyczące
+ich autentyczności).</para>
+
+<para>Uwaga:Kerberos nie zapewnia dystrybucji bazy użytkowników w sieci -
+do tego celu najlepiej użyć usługi NIS.</para>
+
+<section id="krb5_install">
+<title>Instalacja i konfiguracja KDC</title>
+<para>Za pomocą poldka instalujemy serwer i narzędzia heimdal'a:</para>
+<screen># poldek -i heimdal heimdal-server</screen>
+<para>Edytujemy plik konfiguracyjny <filename>/etc/heimdal/krb5.conf</filename>. Plik ten używany jest przez biblioteki heimdal'a i powinien być obecny
+na wszystkich maszynach, na których będziemy używali kerberos'a (na serwerze i klientach)</para>
+<screen>[libdefaults]
+ default_realm = FOO.PL
+ clockskew = 300
+ v4_instance_resolve = false
+
+[realms]
+ FOO.PL = {
+ kdc = kdc.foo.pl
+ kpasswd_server = kdc.foo.pl
+ admin_server = kdc.foo.pl
+ }
+[domain_realm]
+ .foo.pl = FOO.PL
+ foo.pl = FOO.PL</screen>
+<para><option>default_realm</option> określa domyślną domenę kerberos'a.
+Zamiast FOO.PL wpisujemy wybraną nazwę domeny, typowo jest to
+pisana wielkimi literami nazwa naszej domeny dns.
+kdc.foo.pl zastępujemy adresem serwera, na którym uruchomiony jest
+serwer KDC heimdal'a.</para>
+<para><option>clockskew</option> określa maksymalną różnicę czasu (w sekundach) pomiędzy
+serwerem a klientami (jeżeli różnica czasu będzie większa niż podana,
+kerberos odmówi współpracy) dlatego dobrze w sieci uruchomić także usługę
+synchronizacji czasu ntp.</para>
+<para>Sekcja <option>[realms]</option> definiuje domeny kerberosa. Można tu wymienić kilka
+niezależnych domen, określając dla nich lokalizację serwerów kerberosa.
+kdc.foo.pl zastępujemy oczywiście nazwą hosta na którym będzie uruchomiona
+usługa kdc.</para>
+<para>Ostatnia sekcja <option>[domain_realm]</option>określa mapowanie nazw dns na domeny
+kerberosa. Na tej podstawie heimdal wie na podstawie nazwy dns hosta w jakiej
+domenie kerberos'a się znajduje. Nazwa dns zaczynająca się od kropki pasuje do
+dowolnej poddomeny podanej domeny.</para>
+<para>uruchamiamy usługę dystrybucji kluczy KDC:</para>
+
+<screen># service heimdal start</screen>
+<para>Do zarządzania domeną kerberos'a używamy narzędzia
+<command>kadmin</command>. Inicjalizujemy domenę i dodajemy
+użytkownika, w tym przypadku mrk (zostawiając domyślnie proponowane wartości):</para>
+<screen># kadmin -l
+kadmin>init FOO.PL
+kadmin>add mrk
+</screen>
+<para>Opcja -l uruchamia <command>kadmin</command> w trybie lokalnym,
+program musi być uruchomiony z konta root. Możemy także dopisać do pliku
+<filename>/etc/heimdal/krb5.acl</filename>:</para>
+<screen>
+mrk w FOO.PL all
+</screen>
+<para>dając użytkownikowi mrk w FOO.PL prawo do administracji kerberosem - w tym przypadku
+<command>kadmin</command> wołamy z parametrem <option>-p użytkownik</option></para>
+
+<para>Logujemy się w systemie na koncie zwykłego użytkownika (w naszym przykładzie mrk)
+i próbujemy się zalogować do domeny kerberosa:</para>
+<screen>$ kinit</screen>
+<para><command>kinit</command> domyślnie próbuje uzyskać bilet
+dla zalogowanego użytkownika, można to zmienić podając użytkownika jako parametr.</para>
+
+<para>Sprawdzamy, czy kerberos wystawił nam bilet (ticket):</para>
+<screen>$ klist
+Credentials cache: FILE:/tmp/krb5cc_1000_pSN1Vv
+ Principal: mrk w FOO.PL
+
+ Issued Expires Principal
+Apr 13 11:02:40 Apr 13 21:02:40 krbtgt/FOO.PL w FOO.PL
+</screen>
+</section>
+<section id="pam_krb5">
+<title>Logowanie do systemu</title>
+<para>Instalujemy moduł pam-pam_krb5.</para>
+<screen># poldek -i pam-pam_krb5</screen>
+<para>Zmieniamy wybrane pliki /etc/pam.d/*, dodając dodatkowo sprawdzanie hasła
+za pomocą nowego modułu: </para>
+<para>Przykładowo <filename>/etc/pam.d/login</filename> wykorzystywany przez program
+<command>login</command> poprawiamy tak:</para>
+<para>#zmieniamy linijkę</para>
+<screen>auth required pam_unix.so</screen>
+<para>na:</para>
+<screen>
+auth sufficient pam_unix.so
+auth required pam_krb5.so use_first_pass
+</screen>
+<para>i dodajemy:</para>
+<screen>session optional pam_krb5.so</screen>
+<para>W ten sposób możemy się zalogować przy użyciu standardowej metody sprawdzania haseł
+w <filename>/etc/shadow</filename> (pam_unix.so) lub w domenie kerberos'a (pam_krb5.so)</para>
+<para>Analogicznie poprawiamy inne pliki, np. <filename>/etc/pam.d/gdm</filename>,
+ <filename>/etc/pam.d/xscreensaver</filename></para>
+<para>Po tych poprawkach powinniśmy móc zalogować się już podając hasło kerberos'a.
+Po zalogowaniu możemy jeszcze za pomocą polecenia <command>klist</command>
+sprawdzić czy kerberos wystawił nam bilet:</para>
+<screen>$ klist</screen>
+</section>
+
+<section id="krb5_services">
+<title>Konfiguracja poszczególnych usług</title>
+<para>
+Kolejnym etapem jest "skerberyzowanie" poszczególnych usług w naszej sieci tak,
+by uwierzytelniały użytkownika na podstawie wystawionego biletu kerberos'a.
+Zaprezentujemy to na przykładzie sshd, cyrus-imap'a oraz apache'a - opis postępowania
+w przypadku innych usług obsługujących uwierzytelnianie kerberos jest podobny,
+Każda skerberyzowana usługa musi mieć utworzone własne konto w domenie Kerberos'a
+(tzw. service account). Z kontem tym związany jest klucz, który musi być
+znany zarówno kdc i usłudze. Konto usługi przeważnie jest w postaci:
+<option>nazwa_usługi/hostname</option>, przy czym hostname musi być
+pełną nazwą hosta wraz z domeną, czyli tym, co zwraca <command>hostname</command>:</para>
+<screen>
+$ hostname --fqdn
+</screen>
+<para>Ponadto należy zadbać o poprawne odwzorowanie tej nazwy w DNS -
+opis jak właściwie ustawić hostname znajduje się podstawach konfiguracji sieci
+<!-- <link linkend="siec_basic">tutaj</link> --></para>
+<section id="krb5_ssh">
+<title>SSH</title>
+<para>Tworzymy konto dla daemona sshd. Konto musi miec nazwę w postaci:
+host/<option>hostname</option></para>
+<screen># kadmin -l
+kadmin> add -r host/host.foo.pl
+</screen>
+<para>Parametr <option>-r</option> powoduje, że do konta zostanie przypisany
+losowy klucz (hasło). Klucz ten jest zapisany jako jeden z atrybutów
+użytkownika w bazie użytkowników domeny Kerberos'a
+(dokładnie w <filename>/var/lib/heimdal/heimdal.db</filename>).
+By sshd miał także dostęp do tego klucza robimy:</para>
+<screen>kadmin> ext_keytab host/host.foo.pl</screen>
+<para>Powyższe polecenie zapisuje klucz związany z kontem usługi do tzw.
+tablicy kluczy (keytab), z której to tablicy sshd może go pobrać. Klucz
+zostaje zapisany w domyślnej tablicy kluczy znajdującej się w pliku
+<filename>/etc/heimdal/krb5.keytab</filename>. Z tej tablicy kluczy
+domyślnie korzystają usługi używające kerberos'a.</para>
+
+<para>By sshd uwierzytelniał użytkowników za pomocą kerberos'a
+do pliku <filename>/etc/ssh/sshd_config</filename> dodajemy jeszcze linijki:
+</para>
+<screen>GSSAPIAuthentication yes</screen>
+<para>do pliku konfiguracyjnego klienta <filename>/etc/ssh/ssh_config</filename>
+dopisujemy:</para>
+<screen>GSSAPIAuthentication yes
+GSSAPIDelegateCredentials yes</screen>
+<para>Opcja <option>GSSAPIDelegateCredentials</option> określa, czy bilet kerberosa
+ma być przekazany na maszynę, na którą się logujemy.</para>
+<para>Po restarcie sshd, jeżeli mamy wystawiony bilet kerberosa powinniśmy móc
+zalogować się przez ssh na nasz serwer bez pytania o hasło.</para>
+<para>Powyższy opis dotyczy sytuacji, gdy serwer sshd znajduje się na tej samej
+maszynie co kdc. Jeżeli sshd jest na innej maszynie w sieci, musimy wyeksportować
+klucz do innej tablicy kluczy:</para>
+<screen>kadmin> ext_keytab host/host.foo.pl sshd.keytab</screen>
+<para>a następnie przenieść plik sshd.keytab na maszynę na której mamy
+uruchomione sshd. Trzeba jeszcze poinformować sshd, że ma szukać klucza w innej
+lokalizacji niż standardowe krb5.keytab. W pliku /etc/sysconfig/sshd dopisujemy:
+</para>
+<screen>export KRB5_KTNAME=/etc/heimdal/sshd.keytab</screen>
+</section>
+<section id="krb5_cyrus">
+<title>Cyrus IMAP</title>
+<para>Doinstalowujemy plugin gssapi do sasl'a</para>
+<screen># poldek -i cyrus-sasl-gssapi</screen>
+<para>Tworzymy konto dla cyrrus'a. Konto ma mieć nazwę w postaci
+imap/<option>hostname</option>:</para>
+<screen>kadmin> add -r imap/host.foo.pl</screen>
+<para>exportujemy klucz do tablicy kluczy:</para>
+<screen>kadmin> ext_keytab /etc/heimdal/cyrus.keytab</screen>
+<para>Wybieramy inną niż domyślna tablicę kluczy, ponieważ cyrus imap pracuje
+z uprawnieniami użytkownika 'cyrus' i jako taki nie ma prawa czytania domyślnej
+tablicy <filename>/etc/heimdal/krb5.keytab</filename>.</para>
+<para>Dajemy dostęp do tablicy kluczy użytkownikowi cyrus:</para>
+<screen>chown cyrus.root /etc/heimdal/cyrus.keytab
+chmod 660 /etc/heimdal/cyrus.keytab</screen>
+<para>Na koniec musimy jeszcze poinformować cyrus'a gdzie ma szukać klucza.
+ W pliku <filename>/etc/sysconfig/cyrus-imapd</filename> dodajemy:</para>
+<screen>export KRB5_KTNAME=/etc/heimdal/cyrus.keytab</screen>
+<para>Przykładowe programy klienckie, które potrafią użyć protokołu kerberos do
+uwierzytelnienia użytkownika to evolution i mutt</para>
+</section>
+<section id="krb5_apache">
+<title>Apache</title>
+<para>Doinstalowujemy moduł apache'a obsługujący uwierzytelnianie za pomocą kerberos'a:</para>
+<screen># poldek -i apache-mod_auth_kerb</screen>
+<para>Dodajemy konto usługi w domenie kerberos'a:</para>
+<screen>kadmin> add -r HTTP/hostname</screen>
+<para>hostname zastępując nazwą hosta na którym uruchomiony jest apache.</para>
+<para>Exportujemy klucz, zmieniamy uprawnienia:</para>
+<screen>kadmin> ext HTTP/hostname /etc/heimdal/httpd.keytab
+# chown http.root /etc/heimdal/httpd.keytab
+# chmod 660 /etc/heimdal/httpd.keytab</screen>
+<para>lokalizację tablicy kluczy możemy tak jak wcześniej podać apache'owi
+globalnie przez zmienną środowiskową, dopisując do /etc/sysconfig/apache:</para>
+<screen>export KRB5_KTNAME=/etc/heimdal/httpd.keytab</screen>
+
+<para>Można to także zrobić za pomocą dyrektywy Krb5Keytab w pliku konfiguracyjnym apache'a</para>
+
+<para>Przykładowa konfiguracja dostępu może wyglądać następująco:</para>
+<screen>
+<Directory "/home/users/mrk/public_html/kerberos">
+ AuthType Kerberos
+ AuthName "Kerberos Login"
+ KrbMethodNegotiate on
+ KrbMethodK5Passwd on
+ KrbAuthRealms FOO.PL
+ Krb5Keytab /etc/heimdal/httpd.keytab
+ require user mrk w FOO.PL
+</Directory>
+</screen>
+<para>Próba dostępu z prawdopodobnie zakończy się pytaniem o hasło.
+Naszym celem jest jednak dostęp do serwisu www'a za pomocą biletu kerberos'a,
+bez zbędnego podawania hasła. W firefox'ie wpisujemy url: about:config,
+i szukamy pozycji:</para>
+<screen>network.negotiate-auth.delegation-uris
+network.negotiate-auth.trusted-uris
+</screen>
+<para>Określają one url'e, dla których przeglądarka ma zastosować rozszerzenie negotiate.
+Wpisujemy tam nazwy dns naszego serwisu www oddzielone przecinkami.
+Teraz, jeśli mamy aktualny bilet (sprawdzamy przez klist), powinniśmy zostać wpuszczeni
+bez pytania o hasło. Rozszerzenie negotiate oprócz firefox'a powinny obsługiwać
+także mozilla i epiphany - o innych mi nie wiadomo. </para>
+</section>
+</section>
+</section>
Więcej informacji o liście dyskusyjnej pld-doc