PLD-doc/book: pl_book__master.docb pl_book__uslugi/pl_uslugi.chp pl_book__uslugi/pl_uslugi__heimdal....

qwiat cvs at pld-linux.org
Sun Jul 10 17:58:08 CEST 2005


Author: qwiat
Date: Sun Jul 10 17:58:06 2005
New Revision: 6215

Added:
   PLD-doc/book/pl_book__uslugi/pl_uslugi__heimdal.sec
Modified:
   PLD-doc/book/pl_book__master.docb
   PLD-doc/book/pl_book__uslugi/pl_uslugi.chp
Log:
- dodanie rozdzialu


Modified: PLD-doc/book/pl_book__master.docb
==============================================================================
--- PLD-doc/book/pl_book__master.docb	(original)
+++ PLD-doc/book/pl_book__master.docb	Sun Jul 10 17:58:06 2005
@@ -85,6 +85,7 @@
 <!ENTITY uslugi_cron SYSTEM "pl_book__uslugi/pl_uslugi__cron.sec">
 <!ENTITY uslugi_syslog-ng SYSTEM "pl_book__uslugi/pl_uslugi__syslog-ng.sec">
 <!ENTITY uslugi_jabber2 SYSTEM "pl_book__uslugi/pl_uslugi__jabber2.sec">
+<!ENTITY uslugi_heimdal SYSTEM "pl_book__uslugi/pl_uslugi__heimdal.sec">
 <!ENTITY x SYSTEM "pl_book__x/pl_x.chp">
 <!ENTITY x_blackbox SYSTEM "pl_book__x/pl_x__blackbox.sec">
 <!ENTITY x_fluxbox SYSTEM "pl_book__x/pl_x__fluxbox.sec">

Modified: PLD-doc/book/pl_book__uslugi/pl_uslugi.chp
==============================================================================
--- PLD-doc/book/pl_book__uslugi/pl_uslugi.chp	(original)
+++ PLD-doc/book/pl_book__uslugi/pl_uslugi.chp	Sun Jul 10 17:58:06 2005
@@ -8,7 +8,8 @@
     &uslugi_cron;
     &uslugi_cups;
     &uslugi_dhcpd;
-    &uslugi_exim;    
+    &uslugi_exim;
+    &uslugi_heimdal;    
     &uslugi_jabber2;
     &uslugi_mysql;
     &uslugi_nfs;        

Added: PLD-doc/book/pl_book__uslugi/pl_uslugi__heimdal.sec
==============================================================================
--- (empty file)
+++ PLD-doc/book/pl_book__uslugi/pl_uslugi__heimdal.sec	Sun Jul 10 17:58:06 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 at FOO.PL all
+</screen>
+<para>dając użytkownikowi mrk at 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 at FOO.PL
+
+  Issued           Expires          Principal         
+Apr 13 11:02:40  Apr 13 21:02:40  krbtgt/FOO.PL at 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&gt; 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&gt; 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&gt; 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&gt; add -r imap/host.foo.pl</screen>
+<para>exportujemy klucz do tablicy kluczy:</para>
+<screen>kadmin&gt; 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&gt; 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&gt; 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>
+&lt;Directory "/home/users/mrk/public_html/kerberos"&gt;
+        AuthType Kerberos
+        AuthName "Kerberos Login"
+        KrbMethodNegotiate on
+        KrbMethodK5Passwd on
+        KrbAuthRealms FOO.PL
+        Krb5Keytab /etc/heimdal/httpd.keytab
+        require user mrk at FOO.PL
+&lt;/Directory&gt;
+</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>



More information about the pld-cvs-commit mailing list