======LDAP Autentifikacija za Scientific Linux====== ====Uvod==== ---- \\ U ovom uputstvu podesavacemo samo klijentsku stranu ((Pod klijentskom stranom se misli na racunar koji ce "vuci" podatke sa ldap servera)), naravno pre ovoga server mora biti ispravno podesen.\\ Glavna ideja je autentifikovati korisnika preko LDAP servisa iako ga nema u etc/passwd fajlu. To se radi pomocu PAM-a i NSS-a.\\ * [[http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol|LDAP]] (Lightweight Directory Access Protocol) \\ * [[http://en.wikipedia.org/wiki/Pluggable_authentication_module|PAM]] (Pluggable authentication module) \\ * [[http://en.wikipedia.org/wiki/Name_Service_Switch |NSS]] (Name Service Switch) Konektovacemo se na LDAP server, na kojem se nalaze korisnici koji treba da se loguju na klijentsku masinu. ====Podesavanja==== ---- \\ Ovo uputstvo je za SCLinux 6.2, ali ne bi trebalo biti nekih preteranih razlika i u prethodnim verzijama, kao ni kod ostalih RedHat based distribucija.\\ \\ Potrebni paketi: * openldap-client * nss-pam-ldapd: Za instalaciju, kao root pokrenite sledece komande((Za ostale navedene komande i za editovanje konfiguracionih fajlova takodje je potrebna root privilegija.)): yum -y install openldap-client nss-pam-ldapd Pored ovih paketa, instalirace se i ostali potrebni paketi kao sto su **NSCD** i **NSLCD**. ===Openldap=== OpenLdap je opensource varijanta Ldap-a, a openldap client nam je potreban da bi se uopste mogli povezati sa Ldap serverom(nevezano za autentifikaciju), i da bi se mogle izvrsavati komade poput ldapsearch, odnosno pretrazivati Ldap server. Vise o ldapsearch-u [[http://linux.die.net/man/1/ldapsearch|ovde]].\\ Kada ste instalirali ove pakete, potrebno je omoguciti ldap autentifikaciju, a usput mozemo podesiti jos neke stvari i to se moze odraditi na sledeci nacin: authconfig --enableldap --enableldapauth --disablenis --enablecache --ldapserver=uri-vaseg-servera --ldapbasedn=base-dn-vaseg-servera --enablemkhomedir --updateall * enableldap omogucava ldap, i konfigurise /etc/nsswitch.conf * enableldapauth omogucava ldap-autentifikaciju, konfigurise /etc/pam.d/system-auth da koristi i ldap usere pored lokalnih usera za autentifikaciju. * enablecache omogucava i konfigurise NSCD * za ldapserver stavite uri vaseg servera(npr. kod nas je to ldapserver=ldaps://spider.pmf.kg.ac.rs, ili npr. ldapserver=ldap://ldap.domain.com) ((SCLinux vas nece pustiti da se konektujete na server bez secure konekcije(znaci trebalo bi preko ldaps-a ili ldap preko tls-a), ali moze ako se u /etc/sysconfig/authconfig stavi FORCELEGACY=YES(ali nije preporucljivo!))) * ldpabasedn je distinguished name(DN) vase baze(npr. ldapbasedn=dc=pmf,dc=kg,dc=ac,dc=rs ili ldapbasedn=dc=domain,dc=com) * enablemkhomedir pravi home direktorijum za usera ako ne postoji * na kraju "apdejtuje" sve promene Za vise informacija o tome sta je pokrenuto, a sta ne daje sledeca komanda: authconfig --test Objasnjena komandi imate [[http://linux.die.net/man/8/authconfig|ovde]] ili ih mozete dobiti komandom: authconfig Postoje i graficka okruzenja za podesavanje authconfiga: authconfig-tui ili authconfig-gtk ===Fajlovi koje treba editovati su:=== __Napomena__: # je oznaka za komentar.\\ * /etc/nsswitch.conf * /etc/openldap/ldap.conf * /etc/pam_ldap.conf * /etc/nslcd.conf ==/etc/nsswitch.conf== Ovaj fajl se koristi za definisanje koji servisi ce pruzati informacije o userima, grupama, siframa itd. i u kojem redosledu. Kao sto sam naveo gore, sa //authconfig --enableldap// smo vec podesili ovaj fajl i ne treba ga dodatno podesavati(za ono sto je nama potrebno).\\ Ovako bi otprilike trebao da izgleda: passwd: files ldap shadow: files ldap group: files ldap Ovo znaci da pored lokalnih fajlova(passwd, shadow, group), koristi i fajlove sa ldap-a.\\ Vise informacija [[http://man7.org/linux/man-pages/man5/nsswitch.conf.5.html|ovde]]. ==/etc/openldap/ldap.conf== O openldap-u je vec bilo reci. Openldap koristi ovaj konfiguracioni fajl. Tu bi trebali biti uri i basedn vaseg servera(to smo podesili komandom --ldapserver i --ldapbasedn). Trebalo bi dodati sledecu liniju koja prihvata self-signed sertifikate: TLS_REQCERT allow Umesto allow moze biti never(sto znaci da uopste ne pita za certifikate), try ili demand. Ono sto bi se trebalo nalaziti u ovom fajlu: TLS_REQCERT allow TLS_CACERTDIR /etc/openldap/cacerts URI ldaps://spider.pmf.kg.ac.rs BASE dc=pmf,dc=kg,dc=ac,dc=rs TLS_CACERTDIR govori gde je direktorijum u kome ce se nalaziti certifikati(sto u ovom slucaju nije bitno).\\ ==/etc/pam_ldap.conf== pam_ldap je pam modul za ldap autentifikaciju.\\ Kada otvorite ovaj fajl videcete pod komentarima lepo objasnjeno sta koja komanda radi.\\ U ovom fajlu uri i base bi takodje trebali biti podeseni(proverite za svaki slucaj, obicno su dodati na kraj). Ovako nesto bi se trebalo nalaziti na kraju: uri ldaps://spider.pmf.kg.ac.rs base dc=pmf,dc=kg,dc=ac,dc=rs ssl on tls_reqcert allow tls_cacertdir /etc/openldap/cacerts pam_password md5 Trebalo bi promeniti ssl na on, i dodati tls_reqcert allow.\\ *ssl on, omogucava [[http://en.wikipedia.org/wiki/Secure_Socket_Layer|SSL]] *pam_password specificira protokol za promenu sifre.\\ Na [[http://linux.die.net/man/5/pam_ldap|ovom]] linku imate vise informacija o ovom konfiguracionom fajlu, ponudjene opcije i sta svaka od njih radi.\\ Gore pri vrhu fajla, bi takodje trebalo staviti sledece komande: * binddn specificira distinguished name sa kojim treba da se bind-uje sa serverom, binddn cn=ime_naloga,vas-base (npr binddn cn=ime_naloga,dc=pmf,dc=kg,dc=ac,dc=rs) * bindpw tu unesite sifru (npr bindpw sifra) * mozete sami staviti port, mada po default-u je 636 za ldaps://, a 389 za ldap:// (npr port 636) binddn i bindpw stavljate samo ako je za pristup vasem ldap serveru potreban nalog. Ne treba stavljati neki nalog sa previse privilegija, dovoljno je samo da moze procitati sta se tamo nalazi. Takodje jos neke korisne stvari se mogu podesavati, npr bind_policy (Reconnect policy: hard (default) will retry connecting to the software with exponential backoff, soft will fail immediately.) Takodje se mogu podesavati //timelimit(Search timelimit)// i //bind_timelimit (Bind/connect timelimit).// ==/etc/nslcd.conf== //NSLCD// je daemon koji izvrsava ldap upite. Vise o njemu [[http://arthurdejong.org/nss-pam-ldapd/nslcd.8|ovde]]. Konfigurisan je u ovom konfiguracionom fajlu.\\ Podesavanja su slicna kao i pam_ldap.conf, takodje kada otvorite nslcd.conf docekace vas lepo uputstvo sta koja komanda radi. Na sledecem [[http://arthurdejong.org/nss-pam-ldapd/nslcd.conf.5|linku]] mozete naci jos nesto o njemu. Pri dnu fajla bi trebalo biti ovako nesto: uri ldaps://spider.pmf.kg.ac.rs base dc=pmf,dc=kg,dc=ac,dc=rs ssl on tls_reqcert allow tls_cacertdir /etc/openldap/cacerts Iznad njih bi trebalo biti vec podeseno: uid nslcd gid ldap Takodje bi trebalo podesiti binddn i bindpw kao i u pam_ldap.conf(naravno ako je to potrebno). ==etc/nscd.conf== Ovaj konfiguracioni fajl koristi [[http://linux.die.net/man/8/nscd|NSCD]]. NSCD nije obavezan, ali je pozeljan(omogucili smo ga komandom --enablecache). U sustini on sluzi za kesiranje informacija sa ldap servera, i ako nije ukljucen, uvek kada treba da se odredjeni UID or GID da pridruze nekom useru ili grupi, ldap server ce biti kontaktiran(cak i kod ls -l komande). Takodje bi trebalo i kada nema internet konekcije da se useri sa ldapa mogu logovati.\\ Ovaj konfiguracioni fajl je **vec podesen**, ali za neka finija podesavanja pogledajte [[http://linux.die.net/man/5/nscd.conf|ovo]].\\ ==/etc/pam.d fajlovi == Ovi fajlovi bi trebali biti podeseni, to smo uradili sa --enableldapauth, tj omogucili smo da se pored lokalnih usera(pam_unix.so modul) koriste i oni sa ldap-a(pam_ldap.so).\\ Evo npr kako treba da izgleda ///etc/pam.d/system-auth//:\\ #%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth sufficient pam_fprintd.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 500 quiet auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account required pam_unix.so broken_shadow account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_ldap.so account required pam_permit.so password requisite pam_cracklib.so try_first_pass retry=3 type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_ldap.so use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_ldap.so session optional pam_mkhomedir.so Otprilike objasnjenja izgledaju ovako: * auth moduli obezbedjuju samu autentifikaciju, traze i proveravaju sifru itd. * account moduli proveravaju da je autentifikacija dozvoljena, npr da li je account istekao, da li user moze da se loguje u odredjeno vreme itd. * password moduli se koriste da se omoguci promena autentifikacionog tokena(sifre). * session moduli se koriste kada je user autentifikovan da im obezbede da koriste svoj account, npr da naprave home dir itd Vise informacija [[http://linux.die.net/man/5/pam.d|ovde]]. ====Testiranje==== ---- \\ Restartovati racunar, i probati komandu [[http://linux.die.net/man/1/getent|getent]] passwd. Trebalo bi da pocne izlistavanje svih korisnika, prvo lokalnih pa posle i sa ldap-a.\\ Takodje mozete probati id nalog-sa-ldapa, trebao bi da vrati njegov UID i GID. Ako to radi probajte sa su - nalog-sa-ldapa da li mozete da se logujete kao neki user sa ldap-a.