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> 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 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> 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> 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ądac 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: 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