Strona główna BSD Uwierzytelnianie i autoryzacja użytkowników

Uwierzytelnianie i autoryzacja użytkowników

przez CoreBlog

FreeBSD przechowuje informację o użytkownikach i grupach w plikach /etc/passwd oraz /etc/groups (w linuksach dodatkowo w /etc/shadows). Istnieje oczywiście możliwość pobierania tych informacji z innych źródeł, m.in. LDAP. Aby można było uwierzytelnić i autoryzować użytkowników, musimy posiadać w systemie biblioteki NSS (ang. Name Service Switch) oraz PAM (ang.Pluggable Authentication Modules). W systemie portów możemy znaleźć 2 pakiety nss_ldap-1.265_4 (ports/net/nss_ldap) oraz nss-pam-ldapd-0.7.7 (ports/net/nss-pam-ldapd) – wersje na dzień 16.11.2010. Pierwszy z nich jest starszy, wspiera tylko rozwiązywanie nazw dla użytkowników i grup, oraz od dawna nie jest rozwijany. Dla uzupełnienia – ten pakiet to tylko biblioteki nss_ldap. Chcąc autoryzować użytkowników powinniśmy zainstalować również moduły PAM – pam_ldap-1.8.5 (ports/security/pam_ldap). Bazując na kodzie nss_ldap, w 2006 roku stworzono nss-ldapd, który po dodaniu modułu PAM został przekształcony w nss-pam-ldapd. I ten pakiet wykorzystamy.

Korzystając z mechanizmu portów instalujemy nss-pam-ldapd w systemie.

cd /usr/ports/net/nss-pam-ldapd
make install clean

INSTALOWAĆ BEZ KOMPATYBILNOŚCI Z NSS_LDAP !! – WITHOUT_NSS_COMPAT=true – bo z nią mi nie działało 🙂
edit (28 kwietnia 2011) – aktualna wersja 7.13_1 już nie posiada tych opcji.

Po instalacji zacznijmy od skonfigurowania demona nslcd. Otwieramy do edycji plik /usr/local/etc/nslcd.conf. Aby zadziałała najprostsza konfiguracja wystarczy podać adres serwera ldap (w przykładowym pliku konfiguracyjnym jest to localhost)

uri ldap://127.0.0.1/

oraz korzeń naszego drzewa LDAP:

base dc=firma,dc=bogus

Na sam koniec, aby demon uruchamiał się automatycznie podczas startu systemu do pliku /etc/rc.conf dodajemy:

nslcd_enable="YES"

W tej chwili jesteśmy przygotowani do uruchomienia demona. Zanim jednak to zrobimy skonfigurujmy nss. Plik z ustawieniami znajduje się w /etc/nsswitch.conf – definiuję kolejność, w której odbywa się sprawdzanie kiedy pojawi się żądanie informacji. Na przykład wpis:

hosts: files dns

oznacza, że system na zapytanie o hosta, najpierw sprawdzi pliki (konkretnie /etc/hosts), a następnie (o ile nie znajdzie odpowiedzi) przeszuka DNSa.

Przeedytujmy wpisy odpowiedzialne za użytkowników i grupy – bo na chwilę obecną tylko to nam będzie potrzebne.

passwd: files ldap
group: files ldap

OK. Uruchommy demona nslcd…

/usr/local/etc/rc.d/nslcd start

i sprawdźmy czy nss działa poprawnie… no tak nie sprawdzimy bo na razie nie mamy żadnego wpisu w LDAP. Stwórzmy na szybko plik w formacie ldif, zwierający 2 wpisy, i używając programu ldapadd dodajmy je do bazy:

dn: cn=users,ou=groups,dc=firma,dc=bogus
cn: users
gidnumber: 10000
objectclass: top
objectclass: posixGroup

dn: uid=test,ou=people,dc=firma,dc=bogus
cn: test
description: test
gidnumber: 10000
uid: test
uidnumber: 10000
homedirectory: /home/test
loginshell: /bin/tcsh
objectclass: top
objectclass: account
objectclass: posixAccount

Mamy już 2 wpisy. Czas przetestować nss’a. W tym celu możemy użyć programu id, który zwraca dane o użytkowniku:

$/> id test
uid=10000 (test) gid=10000 (test) groups=10000 (test)

Kolejnym krokiem, który musimy wykonać jest konfiguracja PAM. Informacje o autoryzacji przechowywane w katalogu /etc/pam.d. Każda usługa posiada swój własny plik konfiguracyjny. Jeśli chcemy aby system autoryzował użytkowników korzystając z bazy LDAP musimy dodać poniższą linię przed sekcją „requided”.

auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass

UWAGA! Ponieważ sam nie korzystam z PAM, poniższy przykład jest mocno poglądowy. To znaczy został przetestowany, użytkownik otrzymuje dostęp (tylko dostęp, czyli na przykład nie może zmienić hasła używając passwd), ale na konsoli pojawiają się błędy.

Przykładowy plik dla usługi login może wyglądać następująco:

#
# $FreeBSD: src/etc/pam.d/login,v 1.17.10.1.4.1 2010/06/14 02:09:06 kensmith Exp $
#
# PAM configuration for the "login" service
#

# auth
auth sufficient pam_self.so no_warn
auth sufficient /usr/local/lib/pam_ldap.so use_first_pass
auth include system
# account
account requisite pam_securetty.so
account required pam_nologin.so
account include system
# session
session include system
# password
password include system

Teraz pozostało nam przetestować naszą konfigurację.

$/> telnet 127.0.0.1
FreeBSD/i386 (localhost) (pts/1)

login: test
Password:
Last login: Wed Nov 17 13:22:52 on ttyv2
Copyright (c) 1992-2010 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.

FreeBSD 8.1-RELEASE (GENERIC) #0: Mon Jul 19 02:55:53 UTC 2010

%

Więcej informacji na temat nss-pam-ldapd można znaleźć na stronie projektu http://arthurdejong.org/nss-pam-ldapd/docs.html

Powiązane artykuły

Napisz komentarz