Genel Bakış
Libnss-ldapd, LDAP sunucunuzun kullanıcı hesabı(user account), grubu (gorups), ana bilgisayar adı (hostname), takma adı (aliases), ağ grubu (netgroup) ve temelde /etc/passwd, /etc/group (flat files) dosyalarından veya NIS'den alacağınız diğer bilgileri sağlamasına olanak tanıyan bir Ad Hizmeti Anahtarı (Name Server Switch, NSS, nsswitch) modülü sağlar [1] https://arthurdejong.org/nss-pam-ldapd/. Ayrıca unix sistemlerde bir LDAP/AD/Samba sunucusuyla kimlik ve kimlik doğrulama yönetimi kullanmak için Takılabilir Kimlik Doğrulama Modülü (Pluggable Authentication Module, PAM) sağlar.
libnss-ldapd asıl amacı libnss-ldap’nin eksikliklerini gidermek olan bir çatalıdır (fork’udur). libnss-ldap yakın zamanda geliştirme yapılmamasının yanı sıra ssl ile çalışırklen hatalara neden olabilmektedir. Bunun dışında libnss-ldapd'nin, libnss-ldap’a karşı en önemli özellikleri aşağıdaki şekilde sıralanabilir:
• hafif ve basit NSS ve PAM kütüphaneleri
• tüm programlara LDAP ve SSL kitaplıklarını yüklemekten kaçınır
• NSS, PAM ve LDAP kodu arasındaki ayrım
• LDAP sunucusuna daha az bağlantı
• daha iyi hata ayıklama olanakları
• daha iyi performans
? libnss-ldapd -> kullanıcıara parolalarının süresinin yakında dolacağını bildirmediği yazılmış fakat test edilmesi gerekiyor ¿
Ornek LDAP Sorgusu
Terminal üzerinden Samba, Aktif dizin, ya da Openldap'a sorgu atmak için aşağıdaki temel komut kullanılabilir. Makine sınıfına dahil olmayan, mail attribute'u boş olan kullanıcıların listesini döndürür.
# ldapsearch -x -H ldaps://hostname_yada_ip_adresi -D 'kullanici_adi@domain' -b "dc=domain" -W "istenen_filtre"
ldapsearch -x -H ldaps://192.168.1.5 -D 'openldapuser@ornek.domain.com' -b "dc=ornek,dc=domain,dc=com" -W "(&(objectClass=organizationalPerson)(!(objectClass=computer))(!(mail=*)))"
Başlamadan Önce
Bu dökümanda kurulu bir samba ya da aktif dizin sunucunuz olduğu varsayılarak hazırlanmıştır. Dökümanda kullanılan örnek Samba Domainin bilgileri aşağıdaki gibidir.
- ldap server URI -> ldaps://192.168.1.5:636
- ldap server search base -> dc=ornek,dc=domain,dc=com
Kullanıcıları sorgulamak için kullanılacak kullanıcı bilgisi aşağıdaki gibidir. Bu kullanıcının da aşağıdaki özellikleri olması gerekmektedir.
- Kullanıcı adı -> openldapuser (Users altında, dn=cn=openldapuser,cn=Users,dc=test,dc=domain,dc=com)
- Parola -> Passw0rd
Domain Kullanıcılarına Linux Sınıfları Ekleme
Samba ya da Aktif dizin üzerinde oluşturulan varsayılan kullanıcı özellikleri, linux istemci üzerinde ldap ile kimlik doğrulama yapabilmek için yeterli değildir. Bunun için kullanıcılara "posixAccount" ve "shadowAccount" sınıfları eklenmelidir. Bu sınıflar ile gelen uid, uidNumber, gidNumber, homeDirectory, loginShell bilgileri doldurulmalıdır. Özellikle ldap yapılandırmasında kullanılacak kullanıcıda bu bilgiler olmalıdır.
Ekleme işlemi AD Admin & Reporting Tool, Apache Directory Studio ya da windows kullanılıyorsa rsat ile düzenlenebilir.
Kurulum
- Gerekli paketler yüklenir
sudo export DEBIAN_FRONTEND=noninteractive
sudo apt-get update -y
sudo apt-get -y install libpam-ldapd nscd ldap-utils libnss-ldapd
- /etc/nslcd.conf dosyası düzenlenir
uid nslcd
gid nslcd
uri ldaps://192.168.1.5:636
base dc=test,dc=domain,dc=com
ldap_version 3
binddn cn=openldapuser,cn=Users,dc=test,dc=domain,dc=com
bindpw Passw0rd
tls_reqcert never
tls_cacertfile /etc/ssl/certs/ca-certificates.crt
# Filters
filter passwd (&(description=222)(objectClass=user))
filter group (objectClass=group)
#Attribute mappings
map passwd uid sAMAccountName
map passwd homeDirectory unixHomeDirectory
map passwd gecos displayName
map passwd gidNumber primaryGroupID
pagesize 1000
referrals off
nss_nested_groups yes
- filter ile kullanıcı ya da gruplar için filtreleme yapılabilir
# Kullanıcı filtresi
filter passwd (&(!(objectCLass=computer))(objectClass=organizationalPerson))
# Grup filtresi
filter group (objectClass=group)
- "getent passwd" ile filtrelenen kullanıcıları görebilmek için /etc/nsswitch.conf dosyasına koyu renkli olan kısımların eklendiğinden emin olunur.
passwd: files ldap systemd
group: files ldap systemd
shadow: files
gshadow: fileshosts: files mdns4_minimal [NOTFOUND=return] dns
networks: filesprotocols: db files
services: db files
ethers: db files
rpc: db filesnetgroup: nis
- Ev dizini olmayan kullanıcıların ev dizinleri otomatik oluşması /etc/pam.d/common-session dosyasında aşağıdaki satır yoksa, dosyanın sonuna eklenir
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
- Servis yeniden başlatılır ve kullanıcılar çekilir
sudo systemctl restart nslcd.service
getent passwd