Home Dokumentacje Autoryzacja LDAP w Gentoo
21 | 10 | 2019
Autoryzacja LDAP w Gentoo Drukuj

Autoryzacja LDAP w Gentoo

Spis treści:

1. Wprowadzenie do OpenLDAP

Co to jest LDAP?

Pod pojęciem LDAP kryje się lekki protokół dostępu do katalogów (Lightweight Directory Access Protocol). Jest oparty na X.500 i zawiera w sobie większość jego podstawowych funkcji, a jest pozbawiony jego funkcji zaawansowanych. Czym jest X.500?

X.500 jest modelem usług katalogowych w ujęciu OSI. Zawiera definicje przestrzeni nazw i protokołów zapytań oraz aktualizacji katalogów. Zwykle jest jednak zbyt rozbudowanym rozwiązaniem. LDAP, tak jak X.500, zawiera model danych i przestrzeni nazw dla katalogu oraz dla protokołu. Został tak zaprojektowany, aby działać bezpośrednio nad stosem TCP/IP. Można go postrzegać jako uproszczoną wersję X.500.

Nie rozumiem. Co to jest katalog?

Katalog jest wyspecjalizowaną bazą danych zaprojektowaną dla dużej ilości zapytań i małej ilości aktualizacji. W przeciwieństwie do zwykłych baz danych nie zawiera wsparcia dla transakcji odwrotnych. Katalogi można łatwo kopiować w celu podwyższenia dostępności i niezawodności. Kiedy są kopiowane może dochodzić do pewnych niezgodności, trwających tak długo, jak długo będą się synchronizowały.

W jaki sposób rozmieszczono informacje?

Wszystkie informacje wewnątrz katalogu rozmieszczone są w określonej hierarchii. Jeśli zechcemy odczytać dane wewnątrz katalogu, katalog musi wiedzieć w jaki sposób zgromadzić dane wewnątrz drzewa. Przyjrzyjmy się fikcyjnej firmie i jej strukturze organizacji:

Listing 1.1: Struktura organizacji dla GenFic, fikcyjnej firmy Gentoo.

dc:         com
             |
dc:        genfic         (Organizacja)
          /      \
ou:   ludzie   serwery    (Jednostki Organizacji)
      /    \     ..
uid: ..   john            (OU-specyficzne dane)

W związku z tym, że dane do bazy nie są wprowadzane kolejno jak na powyższym grafie każda jej część musi posiadać określoną nazwę. Większość dystrybucji LDAP (wliczając w to OpenLDAP) posiada już sporą ilość zdefiniowanych (i ogólnie przyjętych) schematów, takich jak inetorgperson, powszechnie używany schemat definiowania użytkowników.

Zainteresowanym użytkownikom polecam przeczytanie dokumentu OpenLDAP Admin Guide.

Zatem... Po co to wszystko?

LDAP można używać do kilku rzeczy. W tym dokumencie opisujemy scentralizowane zarządzanie kontami użytkowników poprzez przechowywanie ich w jednym, należącym do LDAP miejscu (co nie znaczy, że znajdują się na jednym serwerze, LDAP pozwala na rozdysponowanie tej informacji na wielu serwerach). Za pomocą LDAP można dokonać jednak znacznie więcej.

  • Zarządzanie infrastrukturą kluczy publicznych
  • Wspólny harmonogram
  • Wspólna książka adresów
  • Przechowywanie informacji DHCP i DNS
  • Wytyczne konfiguracji kategorii systemów - System Class Configuration Directives (śledzenie konfiguracji oddzielnych serwerów)
  • ...

2. Konfiguracja OpenLDAP

Konfiguracja wstępna

Uwaga: W tym dokumencie będziemy używać przykładowego adresu genfic.com. Oczywiście w każdym przypadku użytkownik musi zmienić ten adres na swój własny. Należy się upewnić czy najwyższy węzeł jest oficjalną domeną wysokiego poziomu (net, com, cc, be, ...).

Wpierw należy zainstalować wszelkie potrzebne komponenty na serwerze:

Listing 2.1: Instalacja OpenLDAP

# emerge openldap pam_ldap nss_ldap migrationtools

# chown ldap:ldap /var/lib/openldap-ldbm /var/lib/openldap-data /var/lib/openldap-slurp

Następnie edytujemy plik /etc/openldap/slapd.conf dodając następujące linijki po core.schema:

Listing 2.2: /etc/openldap/slapd.conf

# Dołączenie potrzebnych schematów.
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema

# Użycie funkcji md5, aby ukryć hasło.
password-hash {md5}

# Zdefiniowanie właściwości SSL i TLS (opcja).
TLSCertificateFile /etc/ssl/ldap.pem
TLSCertificateKeyFile /etc/openldap/ssl/ldap.pem
TLSCACertificateFile /etc/ssl/ldap.pem

(Następnie...)

database        ldbm
suffix          "dc=genfic,dc=com"
rootdn          "cn=Manager,dc=genfic,dc=com"
rootpw          {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
directory       /var/lib/openldap-ldbm
index           objectClass     eq

(Hasła tworzy się przy pomocy polecenia slappasswd -h {Md5})

Następnie edytujemy plik konfiguracyjny LDAP:

Listing 2.3: /etc/openldap/ldap.conf

# nano -w /etc/openldap/ldap.conf
Dodając następujące linijki...

BASE         dc=genfic, dc=com
URI          ldaps://auth.genfic.com:636/
TLS_REQCERT  allow

Później, aby zabezpieczyć katalog należy wygenerować certyfikat SSL. Należy odpowiedzieć jak najlepiej na pytania, które zostaną nam zadane. Kiedy zostaniemy zapytani o Common Name wpisujemy nazwę za pomocą której klienci będą mogli łączyć się z serwerem. Z reguły będzie to pełna nazwa domeny (np. auth.genfic.com).

Listing 2.4: Generowanie certyfikatu SSL

# cd /etc/ssl
# openssl req -config /etc/ssl/openssl.cnf -new -x509 -nodes -out \
ldap.pem -keyout /etc/openldap/ssl/ldap.pem -days 999999
# chown ldap:ldap /etc/openldap/ssl/ldap.pem

Edytujemy plik /etc/conf.d/slapd i dodajemy następującą linijkę, jednocześnie zakomentowując domyślną:

Listing 2.5: /etc/conf.d/slapd

OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

Uruchamiamy slapd:

Listing 2.6: Uruchamianie SLAPd.

# /etc/init.d/slapd start

Możemy przetestować program używając polecenia:

Listing 2.7: Przetestuj demona SLAPd.

# ldapsearch -D "cn=Manager,dc=genfic,dc=com" -W

Jeśli otrzymamy błąd, należy uruchomić usługę dodając parametr -d 255. Spowoduje to dokładniejsze opisanie błędu i znacznie pomoże w rozwiązaniu zaistniałego problemu.

3. Eksportowanie istniejących danych

Eksportowanie kont użytkowników

Pora na wyeksportowanie kont użytkowników. Otwieramy plik /usr/share/migrationtools/migrate_common.ph i edytujemy go w następujący sposób:

Listing 3.1: /usr/share/migrationtools/migrate_common.ph

$DEFAULT_BASE = "dc=genfic,dc=com";
$EXTENDED_SCHEMA = 1;
# Zakomentuj poniższe linie, chyba że posiadasz załadowany schemat
pocztowy.
#$DEFAULT_MAIL_DOMAIN = "genfic.com";
#$DEFAULT_MAIL_HOST = "mail.genfic.com";

Teraz czas na uruchomienie skryptów eksportujących:

Listing 3.2: Uruchamianie skryptów eksportujących.

# export ETC_SHADOW=/etc/shadow
# cd /usr/share/migrationtools
# ./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

W tym kroku wyeksportowaliśmy pliki do formatu ldif obsługiwanego przez LDAP. Teraz dodajemy te pliki do naszego katalogu:

Listing 3.3: Import danych do naszego katalogu.

# ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/base.ldif
# ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/group.ldif
# ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/passwd.ldif
# ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/hosts.ldif

Jeżeli natrafimy na błąd w plikach ldif, można wznowić proces od miejsca, w którym został przerwany, używając polecenia ldapadd -c.

4. Konfiguracja klienta

Konfiguracja PAM

Następnie należy skonfigurować PAM tak, aby zezwolić na autoryzację LDAP. Po pierwsze należy zainstalować sys-auth/pam_ldap, co umożliwi współpracę PAM z LDAP oraz sys-auth/nss_ldap dzięki czemu system może pobierać z innych komputerów informacje o LDAP (z czego korzysta nsswitch.conf).

Listing 4.1: Instalacja pam_ldap and nss_ldap

# emerge pam_ldap nss_ldap

Następnie otwieramy plik /etc/pam.d/system-auth i poprawiamy w nim wpisy na poniższe:

Listing 4.2: /etc/pam.d/system-auth

auth    required    pam_env.so
auth    sufficient  pam_unix.so likeauth nullok shadow
auth    sufficient  pam_ldap.so use_first_pass
auth    required    pam_deny.so

account requisite  pam_unix.so
account sufficient pam_localuser.so
account required   pam_ldap.so

password    required pam_cracklib.so retry=3
password    sufficient pam_unix.so nullok use_authtok shadow md5
password    sufficient pam_ldap.so use_authtok use_first_pass
password    required pam_deny.so

session required    pam_limits.so
session required    pam_unix.so
session required    pam_mkhomedir.so skel=/etc/skel/ umask=0066
session optional    pam_ldap.so

Plik /etc/ldap.conf edytujemy, aby wyglądał następująco:

Listing 4.3: /etc/ldap.conf

#host 127.0.0.1
#base dc=padl,dc=com

ssl start_tls
ssl on
suffix          "dc=genfic,dc=com"
#rootbinddn uid=root,ou=People,dc=genfic,dc=com

uri ldaps://auth.genfic.com/
pam_password exop

ldap_version 3
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid
nss_base_passwd ou=People,dc=genfic,dc=com
nss_base_shadow ou=People,dc=genfic,dc=com
nss_base_group  ou=Group,dc=genfic,dc=com
nss_base_hosts  ou=Hosts,dc=genfic,dc=com

scope one

Następnie kopiujemy plik ldap.conf z serwera do klientów tak, aby były w stanie dostrzec, że znajdują się w środowisku LDAP.

Listing 4.4: Kopiowanie ldap.conf dla OpanLDAP

(Należy zastąpić ldap-server nazwą serwera LDAP)
# scp ldap-server:/etc/openldap/ldap.conf /etc/openldap

Na koniec konfigurujemy swoich klientów tak, aby sprawdzały LDAP dla kont systemowych:

Listing 4.5: /etc/nsswitch.conf

passwd:         files ldap
group:          files ldap
shadow:         files ldap

Aby przetestować zmiany należy wpisać:

Listing 4.6: Testowanie autoryzacji LDAP:

# getent passwd|grep 0:0

Powinnieneś otrzymać w wyniku tego polecenia dwie linijki:
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash

Jedna z linijek, które dodaliśmy do /etc/ldap.conf została zakomentowana (linia rootbinddn). Nie będziemy jej potrzebować, dopóki nie zechcemy zmienić hasła roota lub zwykłego użytkownika. W takim wypadku będziemy zmuszeni umieścić to hasło w pliku /etc/ldap.secret, w dodatku otwartym tekstem. Jest to NIEBEZPIECZNE i dlatego plik ten MUSI mieć prawa dostępu o wartości 600. Osobiście zwykle mam ten plik pusty, a kiedy zachodzi potrzeba zmiany użytkownikowi hasła robię to zarówno w ldap jak i w pliku /etc/passwd. Zapisuje tam hasło na 10 sekund na czas kiedy dokonuję zmian i zaraz po ich wprowadzeniu je usuwam.

5. Ustawienia bezpieczeństwa dla OpenLDAP

Prawa dostępu OpenLDAP

Jeśli przyjrzymy się plikowi /etc/openldap/slapd.conf zauważymy, że służy on do precyzowania ACL-i (praw dostępu) dotyczących odczytu i zapisu danych przez użytkowników:

Listing 5.1: /etc/openldap/slapd.conf

access to *
  by dn="uid=root,ou=people,dc=genfic,dc=com" write
  by users read
  by anonymous auth

access to attrs=userPassword,gecos,description,loginShell
  by self write

Dzięki temu użytkownik zyska dostęp do wszystkiego co może być w stanie zmienić. Będzie miał prawo do zapisu własnych informacji oraz do odczytu informacji innych użytkowników. Anonimowi użytkownicy mogą wysłać login i hasło tak, aby się zalogować. Są cztery poziomy dostępu, kolejno, od najniższego do najwyższego: auth (autoryzacja), search (wyszukiwanie), read (odczyt) oraz zapis (zapis).

Następny ACL jest znacznie bezpieczniejszy, ponieważ blokuje normalnym użytkownikom dostęp do ukrytych haseł innych osób:

Listing 5.2: /etc/openldap/slapd.conf

access to attrs="userPassword"
  by dn="uid=root,ou=people,dc=genfic,dc=com" write
  by dn="uid=John,ou=People,dc=genfic,dc=com" write
  by anonymous auth
  by self write
  by * none

access to *
  by dn="uid=root,ou=People,dc=genfic,dc=com" write
  by * search

Taka konfiguracja zapewnia superużytkownikowi oraz użytkownikowi "john" dostęp do odczytu (read), zapisu (write) oraz wyszukiwania (search) wszystkiego poniżej drzewa dc=genfic,dc=com. Pozwala również użytkownikowi na zmianę własnego userPassword. W ostatecznym rozrachunku wszyscy pozostali muszą jedynie wiedzieć, że mają możliwość wyszukiwania (tj. mają dostęp do filtra wyszukującego), jednak nie mogą odczytać wyników wyszukiwania. Możliwe jest posiadanie wielu ACL-i, warto jednak w związku z kolejnością ich przetwarzania zachować zasadę, że najwyższy stopień powinien być najbardziej restrykcyjnym.

6. Praca z OpenLDAP

Utrzymywanie katalogu

Teraz możemy rozpocząć korzystanie z katalogu do autoryzacji użytkowników w takich programach jak apache, proftpd, qmail czy samba. Możemy administrować nim przy użyciu Webmina, który posiada bardzo przejrzysty i ergonomiczny interfejs. Możemy również korzystać z gq lub directory_administrator.

7. Podziękowania

Chcieliśmy podziękować Mattowi Helerowi za użyczenie nam swojego komputera na cele tego przewodnika. Podziękowania należą się również ludziom z kanału #ldap w sieci freenode (irc.freenode.net).

 

 
Linki sponsorowane

W celu realizacji usług i funkcji na witrynach internetowych ZUI "ELPRO" stosujemy pliki cookies. Korzystanie z witryny bez zmiany ustawień dotyczących plików cookies oznacza, że będą one zapisywane w urządzeniu wyświetlającym stronę internetową. Więcej szczegółów w Polityce plików cookies.

Akceptuję pliki cookies z tej witryny.