Sr-12-lab-1.0: Różnice pomiędzy wersjami
Lab 12 - LDAP |
(Brak różnic)
|
Aktualna wersja na dzień 20:08, 1 wrz 2006
LDAP
Konfiguracja serwera
Ćwiczenia niniejsze zakładają użycie serwera OpenLDAP. Na początek należy serwer skonfigurować i uruchomić. Dane serwera przechowywane są standardowo w katalogu /var/lib/ldap
. Tworząc nową instalację należy usunąć całą zawartość tego katalogu.
Następnym krokiem jest wygenerowanie hasła dla administratora. Realizuje to komenda slappasswd(8)
:
# slappasswd New password: ******** Re-enter new password: ******** {SSHA}Bcq2BUtjJPPORHIXLYSZgYgsHRAR0Erm
Hasło to należy wpisać do pliku konfiguracyjnego serwera OpenLDAP /etc/openldap/slapd.conf
. W pliku tym powinny się również znaleźć inne ustawienia wymienione poniżej:
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/rfc2307bis.schema ... loglevel 256 ... database bdb suffix "dc=put,dc=pl" rootdn "cn=admin,dc=put,dc=pl" rootpw {SSHA}Bcq2BUtjJPPORHIXLYSZgYgsHRAR0Erm
Komenda include
załącza zewnętrzne pliki konfiguracyjne. W tym przypadku załączane są pliki zawierające definicje schematów danych (zobacz niżej). Komenda loglevel
ustawia poziom szczegółowości rejestracji zdarzeń zachodzących w serwerze. Wartość 256 jest polem bitowym aktywującym rejestrację wykonywanych operacji protokołu LDAP. Od komendy database
rozpoczyna się definicja repozytorium danych serwera. Opcja suffix
definiuje sufiks dla wszystkich obiektów przechowywanych w tym repozytorium. Administratorem tych danych będzie użytkownik identyfikowany jako cn=admin,dc=put,dc=pl
.
Pozostałe ustawienia konfiguracyjne opisane są na stronie pomocy systemowej slapd.conf(5)
.
Schematy
Serwer OpenLDAP rozprowadzany jest łącznie z definicjami wielu standardowych schematów danych. Poniżej wymieniono te najważniejsze:
core.schema
- Podstawowe atrybuty LDAPv3 i klasy opisane w RFC 2251–2256.
cosine.schema
- Podstawowe atrybuty i klasy z projektu COSINE opisane w RFC 4524.
inetorgperson.schema
- Opis klasy
inetOrgPerson
i jej atrybutów zdefiniowanych w RFC 2798. nis.schema
,rfc2307bis.schema
- Klasy i atrybuty potrzebne do integracji z systemem NIS. Opis w RFC 2307.
samba3.schema
- Klasy i atrybuty do pracy serwera Samba.
java.schema
- Schemat opisany w RFC 2713 dla zapisu strumieniowego obiektów Java.
openldap.schema
- Definicje klas serwera OpenLDAP.
misc.schema
- Różne definicje uzupełniające (również eksperymentalne).
corba.schema
- Schemat do przechowywania obiektów Corby. Opis w RFC 2714.
Edycja rekordów
Podstawowe narzędzia
Po uruchomieniu serwera baza danych jest pusta, nie zawiera nawet obiektów, do których odnoszą się zapisy w głównym pliku konfiguracyjnym. Pierwszym ćwiczeniem musi więc być wykonanie dodawania rekordów do bazy informacji katalogowej. Operacje na bazie wykonywane są zawsze za pośrednictwem formatu LDIF. Poniższy plik base.ldif
zawiera podstawowe obiekty przykładowego serwera LDAP:
dn: dc=put,dc=pl objectclass: dcObject objectclass: organization o: Poznan University of Technology dc: put dn: cn=admin,dc=put,dc=pl objectclass: organizationalRole cn: admin dn: ou=people,dc=put,dc=pl ou: people objectClass: organizationalUnit description: Uzytkownicy dn: ou=groups,dc=put,dc=pl ou: groups objectClass: organizationalUnit description: Grupy uzytkownikow dn: ou=hosts,dc=put,dc=pl ou: hosts objectClass: organizationalUnit description: Komputery
Dodawanie rekordów do serwera LDAP umożliwia komenda ldapadd(1)
:
# ldapadd -x -W -h localhost -D cn=admin,dc=put,dc=pl -f base.ldif Enter LDAP Password: **** adding new entry "dc=put,dc=pl" adding new entry "cn=admin,dc=put,dc=pl" adding new entry "ou=people,dc=put,dc=pl" adding new entry "ou=groups,dc=put,dc=pl" adding new entry "ou=hosts,dc=put,dc=pl"
Wywołanie programu ldapadd
zawiera wskazanie na komputer localhost
, gdzie uruchomiony jest serwer LDAP. Domyślnie przyjmowany jest serwer wskazany w pliku /etc/openldap/ldap.conf
(dalsze przykłady zakładają ustawienie tych parametrów):
host sirius.cs.put.poznan.pl base dc=put,dc=pl
Pobranie rekordów z serwera wykonuje komenda ldapsearch(1)
:
# ldapsearch -x -b dc=put,dc=pl '(objectClass=*)' # extended LDIF # # LDAPv3 # base <dc=put,dc=pl> with scope sub # filter: (objectClass=*) # requesting: ALL # # put.pl dn: dc=put,dc=pl objectClass: dcObject objectClass: organization o: Poznan University of Technology dc: put # admin, put.pl dn: cn=admin,dc=put,dc=pl objectClass: organizationalRole cn: admin ...
Definicja przykładowego użytkownika:
dn: uid=wojtek,ou=people,dc=put,dc=pl objectClass: account objectClass: posixAccount uid: wojtek cn: Kowalski uidNumber: 2123 gidNumber: 110 homeDirectory: /home/wojtek userPassword: qwerty7 description: Uzytkownik Wojtek loginShell: /bin/bash
Definicja przykładowej grupy:
dn: cn=staff,ou=groups,dc=put,dc=pl objectClass: namedObject objectClass: posixGroup cn: staff gidNumber: 110
Oto przykłady innych zleceń wyszukujących atrybuty obiektów z bazy informacji katalogowej:
# ldapsearch -x -b dc=put,dc=pl '(objectClass=organizationalUnit)' ou # ldapsearch -x -b ou=people,dc=put,dc=pl -s one '(objectClass=*)' # ldapsearch -x -b dc=put,dc=pl '(&(objectClass=posixAccount)(uid=wojtek))'
Dodawanie i usuwanie atrybutów w bazie danych wymaga również przygotowania odpowiedniego pliku w formacie LDIF. Poniższy przykład powoduje usunięcie atrybutu description
z obiektu uid=wojtek,ou=people,dc=put,dc=pl
:
dn: uid=wojtek,ou=people,dc=put,dc=pl changetype: modify delete: description
Zawartość odpowiedniego pliku LDIF należy przetworzyć programem ldapmodify(1)
:
# ldapmodify -x -W -D cn=admin,dc=put,dc=pl -f delete.ldif modifying entry "uid=wojtek,ou=people,dc=put,dc=pl"
Modyfikacja atrybutów wymaga ich usunięcia i późniejszego dodania:
dn: uid=wojtek,ou=people,dc=put,dc=pl changetype: modify delete: cn - add: cn cn: Wojciech Kowalski
Usuwanie całych obiektów realizowane jest komendą ldapdelete(1)
:
# ldappdelete -x -W -D cn=admin,dc=put,dc=pl uid=wojtek,ou=people,dc=put,dc=pl
Dostęp poprzez przeglądarkę
Wyszukiwanie danych z serwera LDAP można również realizować poprzez przeglądarkę, posiłkując się specjalnie przygotowanymi adresami URL wg. poniższego schematu:
ldap://hostname:port/base_dn?attributes?scope?filter
Przykładem może być poniższy adres-zapytanie:
ldap://localhost/dc=put,dc=pl??sub?(objectClass=posixAccount)
Graficzna przeglądarka GQ
Program GQ domyślnie umożliwia przeglądanie w trybie anonimowym, a więc bez możliwości wprowadzania modyfikacji do serwera. Przejście do trybu edycji wymaga modyfikacji konfiguracji w menu File/Preferences i następnie w zakładce Servers.

Inne narzędzia
slapadd
- Program pozwala na zainicjowanie pustej bazy danych.
slapcat
- Wyświetla zawartość bazy danych w formacie LDIF. Program może być wykorzystany do tworzenia kopii zapasowych.
slapindex
- Program przebudowuje indeksy bazy danych.
Prawa dostępu
Prawa dostępu użytkowników do serwera LDAP zapisane są w głównym pliku konfiguracyjnym /etc/openldap/slapd.conf
. Oto przykładowe reguły:
access to attrs=userPassword by self write by * auth access to * by self write by * read
Powyższe reguły dają prawo właścicielowi do modyfikacji własnego hasła i pozostałych atrybutów oraz prawo do odczytu wszystkich pozostałych rekordów.
Integracja z systemem
Moduł nss_ldap
W pliku /etc/nsswitch.conf
należy zaznaczyć, że dane mają pochodzić z serwera LDAP:
passwd: files ldap
Biblioteka libnss_ldap.so
łączy się z serwerem LDAP odczytując swoją konfigurację z pliku /etc/ldap.conf
. Zawartość pliku wskazuje na serwer LDAP:
host 127.0.0.1 base dc=put,dc=pl rootbinddn cn=admin,dc=put,dc=pl pam_filter objectClass=posixAccount pam_password crypt ssl no nss_base_passwd ou=people,dc=put,dc=pl nss_base_shadow ou=people,dc=put,dc=pl nss_base_group ou=groups,dc=put,dc=pl nss_base_hosts ou=hosts,dc=put,dc=pl
Poprawne skonfigurowany system powinien dawać możliwość odczytania informacji o nowych użytkownikach:
# getent passwd wojtek wojtek:x:2123:110:Wojciech Kowalski:/home/wojtek:/bin/bash
Ustawienie parametru rootbinddn
umożliwia zmianę hasła zwykłym poleceniem passwd
przez administratora systemu. Hasło dostępu do serwera LDAP przechowywane jest w postaci jawnej w pliku /etc/ldap.secret
, który powinien być zabezpieczony przed niepowołanym dostępem (prawa 0600).
Moduł pam_ldap
Logowanie na konto użytkownika z serwera LDAP wymaga skonfigurowania modułu PAM. W przypadku pracy interaktywnej zmianie musi ulec więc plik /etc/pam.d/login
:
#%PAM-1.0 auth required pam_securetty.so auth required pam_nologin.so auth sufficient pam_ldap.so auth required pam_unix2.so use_first_pass auth required pam_env.so auth required pam_mail.so account sufficient pam_ldap.so account required pam_unix2.so password required pam_pwcheck.so nullok password sufficient pam_ldap.so use_first_pass password required pam_unix2.so nullok use_first_pass use_authtok session required pam_unix2.so none session required pam_limits.so
Powyższa konfiguracja umożliwia również zmianę hasła użytkownika. Konfigurację warto sprawdzić wykonując następujące testy:
- Zmiana hasła użytkownika LDAP.
- Zmiana hasła użytkownika lokalnego (np.
root
).
Znaki narodowe
Serwery LDAPv3 przechowują wartości atrybutów stosując kodowanie UTF-8. Wprowadzenie łańcuchów tekstowych zawierających znaki spoza podstawowego zestawu ASCII jest możliwe poprzez aplikacje graficzne, lub wsadowo po zakodowaniu zgodnie ze standardem Base64. Można do tego celu wykorzystać program mimencode(1)
:
# printf "Łukasz Żółtkiewicz" | mimencode xYF1a2FzeiDFu8OzxYJ0a2lld2ljeg==
Tak zakodowane wartości atrybutów w formacie LDIF zapisywane są z użyciem podwójnego znaku ":":
dn: uid=lukasz,ou=people,dc=put,dc=pl objectClass: account objectClass: posixAccount cn:: xYF1a2FzeiDFu8OzxYJ0a2lld2ljeg== ...
Do konwersji plików tekstowych kodowanych w innym formacie niż UTF-8 najlepiej wykorzystać program iconv(1)
, np.:
# iconv -f ISO8859-2 -t UTF-8 dane.txt > wynik.txt
Bezpieczeństwo — SSL/TLS
Dostęp do serwera LDAP może być realizowany w sposób bezpieczny za pośrednictwem protokołu SSL/TLS. Praca protokołów bezpieczeństwa wymaga dostępu do odpowiednich certyfikatów. Uzyskanie ich wymaga wykonania następujących kroków.
Utworzenie urzędu certyfikującego:
# /usr/share/ssl/misc/CA.sh/CA.sh -newca
Utworzenie certyfikatu:
# openssl req -new -nodes -keyout newreq.pem -out newreq.pem
Podpisanie certyfikatu:
# /usr/share/ssl/misc/CA.sh/CA.sh -sign
Instalacja:
# cp demoCA/cacert.pem /etc/openldap/cacert.pem # mv newcert.pem /etc/openldap/ldap-crt.pem # mv newreq.pem /etc/openldap/ldap-key.pem # chmod 600 /etc/openldap/ldap-key.pem # chown ldap /etc/openldap/ldap-key.pem
Konfiguracja serwera (plik /etc/openldap/slapd.conf
):
TLSCACertificateFile /etc/openldap/cacert.pem TLSCertificateFile /etc/openldap/ldap-crt.pem TLSCertificateKeyFile /etc/openldap/ldap-key.pem
Konfiguracja klientów (plik /etc/openldap/ldap.conf
):
tls_cacert /etc/openldap/cacert.pem
Konfiguracja modułu nss_ldap
(plik /etc/ldap.conf
):
ssl start_tls
Integracja z innymi aplikacjami
Samba
Ze względu na przechowywanie w drzewie katalogowym wielu dodatkowych atrybutów, baza informacji katalogowej powinna zostać uzupełniona dodatkowymi indeksami. Wymaga to po pierwsze modyfikacji odpowiednich zapisów w pliku /etc/openldap/slapd.conf
:
# Indices to maintain index objectClass eq index cn pres,sub,eq index sn pres,sub,eq ## required to support pdb_getsampwnam index uid pres,sub,eq ## required to support pdb_getsambapwrid() index displayName pres,sub,eq ## uncomment these if you are storing posixAccount and ## posixGroup entries in the directory as well index uidNumber eq index gidNumber eq index memberUid eq index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq index default sub
Następnie należy wymienione indeksy fizycznie utworzyć:
# /etc/init.d/ldap stop # slapindex # /etc/init.d/ldap start
Serwer Samba musi mieć dostęp do danych przechowywanych na serwerze LDAP. Dostęp ten uzyskuje podając hasło, które należy zainicjować wydając komendę:
# smbpasswd -w hasło
Hasło jest zapisywane w pliku /etc/samba/secrets.tdb
.
Zadania
- Skonfiguruj i uruchom serwer OpenLDAP zaczynając od pustej bazy informacji katalogowej.
- Dodaj podstawowe rekordy do bazy informacji katalogowej oraz rekordy opisujące kilku użytkowników i kilka grup użytkowników.
- Przećwicz przeszukiwanie struktury katalogowej. Wykorzystaj różne zakresy przeszukiwania (
base
,one
,sub
). Wyświetl konkretne, wybrane atrybuty odnalezionych obiektów. Posłuż się filtrami zawierającymi złożone warunki (koniunkcja, alternatywa, negacja). - Dokonaj modyfikacji wybranych atrybutów obiektów.
- Przećwicz dostęp do serwera LDAP z poziomu przeglądarki internetowej. Wykorzystaj w tym celu przeglądarkę Konqueror pochodzącą ze środowiska graficznego KDE.
- Przećwicz dostęp do serwera LDAP poprzez klienta graficznego GQ.
- Ogranicz prawa dostępu do wybranych fragmentów drzewa katalogowego. Ograniczenie powinno dotyczyć wybranych użytkowników. Sprawdź różnice pomiędzy prawami
auth
,compare
isearch
. - Zintegruj usługę LDAP z systemem operacyjnym poprzez udostępnienie użytkowników zdefiniowanych w bazie informacji katalogowej. Użytkownicy powinni mieć możliwość normalnego zalogowania się do systemu.
- Przećwicz wprowadzanie do usługi katalogowej napisów zawierających polskie litery.
- Zabezpiecz dostęp do serwera LDAP wykorzystując protokół SSL/TLS.