PLD-doc/queue/heimdal.patch

krolik cvs w pld-linux.org
Czw, 21 Kwi 2005, 22:51:39 CEST


Author: krolik
Date: Thu Apr 21 22:51:37 2005
New Revision: 5839

Added:
   PLD-doc/queue/heimdal.patch
Log:
- opis heimdala nadeslany przez Mariusza 'mrk' Krynskiego


Added: PLD-doc/queue/heimdal.patch
==============================================================================
--- (empty file)
+++ PLD-doc/queue/heimdal.patch	Thu Apr 21 22:51:37 2005
@@ -0,0 +1,278 @@
+Index: book/pl_book__siec/pl_siec__basic.sec
+===================================================================
+--- book/pl_book__siec/pl_siec__basic.sec	(revision 5819)
++++ book/pl_book__siec/pl_siec__basic.sec	(working copy)
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="iso-8859-2"?>
+-<section id="siec_podstawy" >
++<section id="siec_basic" >
+ 	<title>Wstępna konfiguracja sieci</title>
+ 	<para>
+ 		Ta część konfiguracji sieci może być wspólna dla wszystkich
+Index: book/pl_book__master.docb
+===================================================================
+--- book/pl_book__master.docb	(revision 5819)
++++ book/pl_book__master.docb	(working copy)
+@@ -68,6 +68,7 @@
+ <!ENTITY uslugi_mysql SYSTEM "pl_book__uslugi/pl_uslugi_bazydanych__mysql.sec">
+ <!ENTITY uslugi_proftpd SYSTEM "pl_book__uslugi/pl_uslugi_ftp__proftpd.sec">
+ <!ENTITY uslugi_nfs SYSTEM "pl_book__uslugi/pl_uslugi__nfs.sec">
++<!ENTITY uslugi_heimdal SYSTEM "pl_book__uslugi/pl_uslugi__heimdal.sec">
+ <!ENTITY uslugi_dhcpd SYSTEM "pl_book__uslugi/pl_uslugi__dhcpd.sec">
+ <!ENTITY uslugi_cups SYSTEM "pl_book__uslugi/pl_uslugi__cups.sec">
+ <!ENTITY uslugi_samba SYSTEM "pl_book__uslugi/pl_uslugi__samba.sec">
+Index: book/pl_book__uslugi/pl_uslugi__heimdal.sec
+===================================================================
+--- book/pl_book__uslugi/pl_uslugi__heimdal.sec	(revision 0)
++++ book/pl_book__uslugi/pl_uslugi__heimdal.sec	(revision 0)
+@@ -0,0 +1,238 @@
++<?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 pomoca hasła 
++na czas trwania sesji otrzymuje specjalny unikalny klucz (w terminologii 
++kerberos'a nazywany biletem (ang. ticket)) za pomocą którego może uzyskac 
++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 /etc/heimdal/krb5.conf. 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ę 
++<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 powiniśmy móc 
++zalogowac 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 poinformowac 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ądac 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 w 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: 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>
+Index: book/pl_book__uslugi/pl_uslugi.chp
+===================================================================
+--- book/pl_book__uslugi/pl_uslugi.chp	(revision 5819)
++++ book/pl_book__uslugi/pl_uslugi.chp	(working copy)
+@@ -9,6 +9,7 @@
+     &uslugi_cups;
+     &uslugi_dhcpd;
+     &uslugi_exim;    
++    &uslugi_heimdal;
+     &uslugi_jabber2;
+     &uslugi_mysql;
+     &uslugi_nfs;        




Więcej informacji o liście dyskusyjnej pld-doc