Link to this comparison view

Next revision
Previous revision
pl:przewodniki:openldap-autoryzacja-uzytkownikow [2007/12/09 22:47]
duddits utworzono
pl:przewodniki:openldap-autoryzacja-uzytkownikow [2007/12/10 12:16]
duddits
Line 11: Line 11:
   * nss_ldap   * nss_ldap
  
-====== Konfiguracja ======+====== Konfiguracja ​serwera ​====== 
 +Na pierwszy ogień bierzemy pod lupę plik konfiguracyjny **slapd**, /​etc/​openldap/​slapd.conf. Jest on już wstępnie przygotowany,​ zmienimy w nim tylko parę rzeczy dostosowując go do naszych potrzeb. Zakładam, że chcemy aby nasz OpenLDAP obsługiwał połączenia TLS/SSL: 
 +  TLSCACertificateFile /​usr/​share/​ssl/​ca-bundle.crt 
 +  TLSCertificateFile /​etc/​openldap/​slapd.pem 
 +  TLSCertificateKeyFile /​etc/​openldap/​slapd.key 
 +  TLSVerifyClient never 
 +Odkomentowujemy powyższe linijki. Certyfikaty wygenerujemy później. 
 +I dalej: 
 +  database ​       bdb 
 +  suffix ​         "​dc=th-domena,​dc=pl"​ 
 +  rootdn ​         "​cn=Manager,​dc=th-domena,​dc=pl"​ 
 +Oczywiście **th-domena.pl** zmieńcie sobie na coś bardziej przystającego do rzeczywistości ;-) 
 +Pozostaje nam jeszcze sprawa hasła. Możemy je wygenerować przy pomocy narzędzi z paczki openldap. W poniższym przykładzie dodaję je od razu do pliku konfiguracyjnego (ponieważ zapisze się na końcu pliku trzeba je sobie potem przenieść we właściwe miejsce): 
 +  sudo slappasswd -h {md5}|sudo tee -a /​etc/​openldap/​slapd.conf 
 +Niezbyt oryginalnie,​ ale skutecznie. Jak widać przyjąłem założenie,​ że hasła przechowujemy w formacie MD5 (można też np. SSHA). Po przeniesieniu wygenerowanego powyżej hasła we właściwe miejsce wygląda to tak: 
 +  password-hash ​  ​{md5} 
 +  rootpw ​ {MD5}BLci6etNGKi7oNjGX/​EMFw== 
 +Na koniec **ważna uwaga**: zakomentowujemy linijkę: 
 +  #​include ​               /​usr/​share/​openldap/​schema/​ns-pwd-policy.schema 
 +Inaczej OpenLDAP się nie uruchomi. 
 +Dobrze, z demonem slapd mamy sprawę zakończoną. Bierzemy się za klienty. 
 +Edytujemy plik /​etc/​openldap/​ldap.conf:​ 
 +  URI ldapi://​%2fvar%2frun%2fslapd%2fslapd.sock ldaps://​localhost:​636 
 +  BASE dc=th-domena,​dc=pl 
 +  TLS_CACERT /​usr/​share/​ssl/​ca-bundle.crt 
 +  TLS_REQCERT allow 
 +W tym pliku jest znacznie więcej opcji, ale powyższe w zupełności nam wystarczą. 
 + 
 +Pora na wygenerowanie certyfikatu:​ 
 +  sudo openssl req -new -x509 -nodes -out /​etc/​openldap/​slapd.pem -keyout /​etc/​openldap/​slapd.key -days 999999 
 +  sudo chown 600 /​etc/​openldap/​slapd.key /​etc/​openldap/​slapd.pem 
 + 
 +Przed uruchomieniem demona slapd zaglądamy jeszcze do /​etc/​sysconfig/​ldap:​ 
 +  SLAPDURLLIST="​ldap:///​ ldaps://​localhost:​636/​ ldapi://​%2fvar%2frun%2fslapd%2fslapd.sock"​ 
 +Resztę pozostawiamy bez zmian. 
 + 
 +Pozostaje jeszcze kwestia ustawień dostępu do slapd. Edytujemy plik /​etc/​openldap/​slapd.access.conf i zmieniamy go jak poniżej: 
 +  access to attrs="​userPassword"​ 
 +      by dn="​uid=root,​ou=people,​dc=th-domena,​dc=pl"​ write 
 +      by anonymous auth 
 +      by self write 
 +      by * none 
 +   
 +  access to * 
 +      by dn="​uid=root,​ou=people,​dc=th-domena,​dc=pl"​ write 
 +      by anonymous read 
 +      by * search 
 + 
 +Uruchamiamy usługę: 
 +  sudo /​sbin/​service ldap start 
 + 
 +I sprawdzamy czy działa: 
 +  ldapsearch -D "​cn=Manager,​dc=th-domena,​dc=pl"​ -W -x 
 +Podajemy hasło, które wcześniej wygenerowaliśmy i zapisaliśmy w slapd.conf. Dodatkowo sprawdźmy czy usługa działa na portach 389 (ldap) i 636 (ldapssl) oraz czy utworzyło się gniazdko w /​var/​run/​slapd. 
 +Jeśli wszystko jest jak należy to lecimy dalej. 
 +====== Migracja kont ====== 
 +Wykorzystamy skrypty perla dostępne w paczce openldap-migration. 
 +Ponieważ będzie konieczny dostęp do pliku /etc/shadow musimy skorzystać z  uprawnień roota. Najpierw jednak modyfikujemy plik /​etc/​openldap/​migrate_common.ph:​ 
 +  $DEFAULT_BASE = "​dc=th-domena,​dc=pl";​ 
 +  $EXTENDED_SCHEMA = 1; 
 +No to jesteśmy gotowi do eksportu danych: 
 +  export ETC_SHADOW=/​etc/​shadow 
 +  cd /​usr/​share/​openldap/​migration 
 +  ./​migrate_base.pl > /​tmp/​base.ldif 
 +  ./​migrate_group.pl /etc/group /​tmp/​group.ldif 
 +  ./​migrate_hosts.pl /etc/hosts /​tmp/​hosts.ldif 
 +  ./​migrate_passwd.pl /etc/passwd /​tmp/​passwd.ldif 
 +Jak wspomniałem,​ będziemy potrzebowali uprawnień roota (przeniesienie haseł z /​etc/​shadow). 
 +Teraz importujemy dane do bazy OpenLDAP: 
 +  ldapadd -D "​cn=Manager,​dc=th-domena,​dc=pl"​ -W -x -f /​tmp/​base.ldif 
 +  ldapadd -D "​cn=Manager,​dc=th-domena,​dc=pl"​ -W -x -f /​tmp/​group.ldif 
 +  ldapadd -D "​cn=Manager,​dc=th-domena,​dc=pl"​ -W -x -f /​tmp/​passwd.ldif 
 +  ldapadd -D "​cn=Manager,​dc=th-domena,​dc=pl"​ -W -x -f /​tmp/​hosts.ldif 
 +====== Konfiguracja klientów ====== 
 +Pora na "​powiedzenie"​ PAM gdzie ma szukać informacji o kontach. Edytujemy plik /​etc/​pam.d/​system-auth i modyfikujemy go jak poniżej: 
 +  #%PAM-1.0 
 +  auth            required ​       pam_listfile.so item=user sense=deny file=/​etc/​security/​blacklist onerr=succeed 
 +  auth            required ​       pam_env.so 
 +  auth            required ​       pam_tally.so deny=0 file=/​var/​log/​faillog onerr=succeed 
 +  auth            sufficient ​     pam_unix.so likeauth nullok shadow 
 +  auth            sufficient ​     pam_ldap.so use_first_pass 
 +   
 +  account ​        ​required ​       pam_tally.so file=/​var/​log/​faillog onerr=succeed 
 +  account ​        ​required ​       pam_time.so 
 +  account ​        ​sufficient ​     pam_unix.so 
 +  account ​        ​sufficient ​     pam_ldap.so 
 +   
 +  # password ​     [success=1 ignore=reset abort=die default=bad] pam_pwgen.so upper=1 digit=1 
 +  password ​       required ​       pam_cracklib.so try_first_pass difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 
 +  password ​       sufficient ​     pam_unix.so nullok blowfish shadow use_authtok 
 +  password ​       sufficient ​     pam_ldap.so use_authok use_first_pass 
 +  password ​       required ​       pam_exec.so failok seteuid /​usr/​bin/​make -C /var/db 
 +  # password ​     required ​       pam_exec.so failok seteuid /​usr/​bin/​make -C /var/yp 
 +   
 +  session ​        ​optional ​       pam_keyinit.so revoke 
 +  session ​        ​required ​       pam_limits.so change_uid 
 +  session ​        ​[success=1 default=ignore] ​     pam_succeed_if.so service in crond quiet use_uid 
 +  session ​        ​required ​       pam_unix.so 
 +  session ​        ​required ​       pam_mkhomedir.so skel=/​etc/​skel/​ umask=0066 
 +  session ​        ​optional ​       pam_ldap.so 
 +Słówko komentarza do modułu pam_mkhomedir.so:​ dzięki niemu katalog domowy zostanie utworzony automatycznie (o ile nie istnieje). 
 + 
 +Przechodzimy do konfiguracji **/​etc/​ldap.conf** (nie mylić z /​etc/​openldap/​ldap.conf):​ 
 +  uri ldaps://​127.0.0.1:​636/​ 
 +  ldap_version 3 
 +  rootbinddn cn=manager,​dc=th-domena,​dc=pl 
 +  scope sub 
 +  bind_policy soft 
 +  pam_login_attribute uid 
 +  pam_member_attribute memberuid 
 +  pam_password crypt 
 +  pam_password exop 
 +  nss_base_passwd ​        ​ou=People,​dc=th-domena,​dc=pl 
 +  nss_base_shadow ​        ​ou=People,​dc=th-domena,​dc=pl 
 +  nss_base_group ​         ou=Group,​dc=th-domena,​dc=pl 
 +  nss_base_hosts ​         ou=Hosts,​dc=th-domena,​dc=pl 
 +  ssl start_tls 
 +  ssl on 
 +Pozostaje nam jeszcze zmiana /​etc/​nsswitch.conf (zmieniamy 3 linijki): 
 +  passwd: ​        files ldap 
 +  group: ​         files ldap 
 +  shadow: ​        files ldap 
 +Na koniec musimy wykonać jeszcze **jedną ważną rzecz**. Zapisujemy hasło ​ z pliku /​etc/​openldap/​slapd.conf (rootpw) w /​etc/​ldap.secret w postaci niezaszyfrowanej i zmieniamy uprawnienia jak poniżej: 
 +  -rw------- 1 root root 9 2007-12-10 09:43 /​etc/​ldap.secret 
 +Bez tego nie będziemy mogli odpytywać bazy LDAP. 
 + 
 +Szybkie sprawdzenie jak to działa: 
 +  getent passwd root 
 +Wynik tego polecenia powinien zwrócić dwa wpisy: 
 +  root:​x:​0:​0:​root:/​root:/​bin/​sh  
 +  root:​x:​0:​0:​root:/​root:/​bin/​sh 
 +Co by się zgadzało, bo informacje o kontach są teraz zapisane w /etc/passwd i w OpenLDAP.
  
 ====== Przykładowe pliki konfiguracyjne ====== ====== Przykładowe pliki konfiguracyjne ======
 +  * {{pl:​przewodniki:​slapd.conf.txt|/​etc/​openldap/​slapd.conf}}
 +  * {{pl:​przewodniki:​slapd.access.conf.txt|/​etc/​openldap/​slapd.access.conf}}
 +  * {{pl:​przewodniki:​ldap.conf.txt|/​etc/​openldap/​ldap.conf}}
 +  * {{pl:​przewodniki:​system-auth.txt|/​etc/​pam.d/​system-auth}}
 +  * {{pl:​przewodniki:​ldap.txt|/​etc/​sysconfig/​ldap}}
 +  * {{pl:​przewodniki:​ldap2.conf.txt|/​etc/​ldap.conf}}
 +  * {{pl:​przewodniki:​nsswitch.conf.txt|/​etc/​nsswitch.conf}}
  
pl/przewodniki/openldap-autoryzacja-uzytkownikow.txt · Last modified: 2007/12/10 12:16 by duddits
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0 Powered by Lighttpd - fly light