Problemi in questa pagina? Segnalali in questa discussione
Introduzione
Ci sono due principali concetti per gli utenti: l'autenticazione e gli account. Con l'autenticazione di Active Directory (d'ora in poi AD) si usa il protocollo Kerberos 5 mentre per gli account si usa LDAP. Prima di tutto è necessario configurare Kerberos 5 e LDAP in modo da gestire gli utenti di un'AD. In questo articolo verranno usati i seguenti indirizzi IP, di conseguenza adattateli alle vostre esigenze.
10.30.2.1 Router and DNS server or proxy 10.30.2.2 DHCP and TFTP server 10.30.2.10 NFS server 10.30.2.20 LTSP server 10.30.2.100-200 LTSP clients
Si da per scontato che AD sia confugurato con un dominio AD del tipo EXAMPLE.COM e con un utente creato del tipo:
account name: wendy UID: 1002 GID: 1002 home directory: /home/wendy shell: /bin/bash
Account
Per gli account LDAP è necessario il pacchetto libnss-ldap che non è presente sul CD di Dapper ma è disponibile nei repository Universe. Una volta aggiunti tali repository è sufficiente eseguire i comandi:
$ sudo apt-get update $ sudo apt-get install libnss-ldap
Inseriamo l'indirizzo del server Active Direcory.
Specifichiamo il search basedm
Selezionare LDAP versione 3
Sono necessari alcuni aggiustamenti ulteriori , per questo andiamo a modificare /etc/libnss-ldap.conf
# libnss-ldap.conf # Your LDAP server. Must be resolvable without using LDAP. # Multiple hosts may be specified, each separated by a # space. How long nss_ldap takes to failover depends on # whether your LDAP client library supports configurable # network or connect timeouts (see bind_timelimit). host 10.30.2.2 # The distinguished name of the search base. base example,dc=com # The LDAP version to use (defaults to 3 # if supported by client library) ldap_version 3 # (AD) mappings # <to> <from> nss_map_attribute userPassword sambaPassword nss_map_attribute gecos name nss_map_attribute uid unixName nss_map_attribute shadowLastChange pwdLastSet nss_map_objectclass posixGroup group pam_filter objectclass=User pam_password crypt # Disable SASL security layers. This is needed for AD. sasl_secprops maxssf=0
Configuriamo il nome del servizio per usare LDAP modificando/etc/nsswitch.conf
# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: files ldap group: files ldap shadow: files ldap hosts: files dns mdns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Testing
Il comando getent mostrerà il contenuto del servizio, così una volta configurato Active Directory con un utente e con libnss-ldap configurato, dovremmo essere in grado di vedere gli utenti extra e i gruppi.
$ getent passwd gdm:x:106:111:Gnome Display Manager:/var/lib/gdm:/bin/false test:x:1000:1000:Test,,,:/home/test:/bin/bash wendy:x:1002:1002:wendy:/home/wendy:/bin/bash $ getent group gdm:x:111: test:x:1000: wendy:x:1002:
Un semplice file di prova ci mostrerà se Ubuntu comprende gli username di AD.
$ cd /tmp $ touch moo $ ls -l moo -rw-rw-r-- 1 root root 0 2006-07-20 14:27 moo $ sudo chown wendy moo $ ls -l moo -rw-rw-r-- 1 wendy root 0 2006-07-20 14:27 moo
Per visualizzare gli utenti tramite LDAP è necessario installare il pacchetto ldap-utils
$ sudo apt-get install ldap-utils $ ldapsearch -x -H ldap://10.30.2.2 "(objectClass=posixAccount)" sAMAccountName # extended LDIF # # LDAPv3 # base <> with scope sub # filter: (objectClass=posixAccount) # requesting: sAMAccountName # # wendy, Users, EXAMPLE.COM dn: cn=wendy,cn=Users,dc=EXAMPLE,dc=COM sAMAccountName: wendy # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Autenticazione
Ora che le informazioni relative agli utenti sono presenti, è necessario configurare Linux affinché gli utenti possano effettuare il login.Il protocollo di login di AD è Kerberos 5, quindi è necessario installare il modulo PAM Kerberos 5 e il pacchetto client per procedere al test.
$ sudo apt-get-install heimdal-clients libpam-heimdal
Configuriamo Kerberos con i parametri del dominio AD e dell' indirizo IP editando/etc/krb5.conf
[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = 10.30.2.2:88 }
[domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM
Aggiorniamo la configurazione di PAM in modo da verificare gli account Kerberos /etc/pam.d/common-auth scegliamo se vogliamo un prompt di login di Kerberos oppure un prompt classico.
# # /etc/pam.d/common-auth - authentication settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authentication modules that define # the central authentication scheme for use on the system # (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the # traditional Unix authentication mechanisms. # # prompt user "Password for : " (warning: no l18n) auth sufficient pam_krb5.so minimum_uid=1000 ➊ auth required pam_unix.so nullok_secure # use password from pam_unix prompt #auth sufficient pam_unix.so nullok_secure #auth sufficient pam_krb5.so minimum_uid=1000 use_first_pass
Sono possibili molte opzioni, una modifica classica di "minimum_uid" è "ignore_root".
# # /etc/pam.d/common-session - session-related modules common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of modules that define tasks to be performed # at the start and end of sessions of *any* kind (both interactive and # non-interactive). The default is pam_unix. # session required pam_unix.so session optional pam_foreground.so session optional pam_krb5.so
Aggiunlgiamo la seguente linea se vogliamo creare automaticamente le home per i nuovi utenti.
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
Le password Samba 4 non possono essere modificate tramitekpasswde quindi le configurazioni di common-password sono irrilevanti.Le informazioni degli account sono gestite già tramite pam_unix con NSS e libnss-ldap quindi non sono necessarie modifiche per common-account comunque ulteriori informazioni sono disponibili nelle seguenti linee di codice.
# # /etc/pam.d/common-account - authorization settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authorization modules that define # the central access policy for use on the system. The default is to # only deny service to users whose accounts are expired in /etc/shadow. # account required pam_unix.so account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore] pam_krb5.so
Attenzione
Se AD gira su in PC con ... non c'è un orologio con batteria di backup.Questo significa che quando la macchina vien spenta per un certo periodo di tempo , l'orologio verrà resettato.quando la macchina verrà riaccesa sarà necessaria una connessione internet per risincronizzare l'ora.senza una risincronizzazione dell'orologiao , Kerberos non permettrò il login ai clients.
Testing
Con l'AD in esecuzione e un account impostato , cerchiamio di acquisire alcuni dettagli con il comando kinit.
$ kinit wendy wendy@EXAMPLE.COM's Password:
Orologio
Per sicurezza e efficacia dell'orologio, Kerberos necessita che tutti gli orologi siano sincronizzati.Altrimenti il comando kinit fallirà.
kinit: krb5_get_init_creds: Too large time skew
Il setup della sincronizzazione dell' orologio con il programma ntpudate; la sincoronia si mantiene tramite un server ntpd.
$ sudo apt-get install ntpdate $ sudo ntpdate ntp.ubuntu.com 25 Jul 16:22:06 ntpdate[8158]: step time server 82.211.81.145 offset 402569.951826 sec $ sudo apt-get install ntp-simple
Confermiamo l'ottenimento di due tagliandi con il comando klist.
$ klist Credentials cache: FILE:/tmp/krb5cc_1000 Principal: wendy@EXAMPLE.COM Issued Expires Principal Jul 25 16:23:06 Jul 26 02:23:58 krbtgt/EXAMPLE.COM@EXAMPLE.COM
Per testare gli account è necessario un sistema di login, poichè è necessario per LTSP allora procediamo all' installazione del server OpenSSH e del client.
$ sudo apt-get install openssh-server openssh-client
Proviamo il login tramite l'utente AD.
$ ssh wendy@localhost The authenticty of host 'localhost (127.0.0.1)' can't be established. RSA key fingerprint is Are you sure you want to continue connecting (yes/no)? Warning: Permanently added 'localhost' (RSA) to the list of known hosts. wendy@localhosts password: Linux ubuntu 2.6.15-23-386 #1 PREEMPT Tue May 23 13:49:40 UTC 2006 i686 GNU/Linux The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Jul 26 10:32:24 2006 from localhost wendy@ubuntu:~$
Se ricevete un' errore di password , confermate il funzionamento corretto della password tramite il comando kinit, se tutto funziona potrebbe esserci un problema di sincronizzazione dell' orologio tra il server AD e il vostro server.Prima di tutto dobbiamo abilitare il debug del login tramite il modulo pam_krb5 ,modifichiamo il file common-auth e aggiungiamo la parola chiave "debug" alla fine della riga di Kerberos.
auth sufficient pam_krb5.so minimum_uid=1000 use_first_pass debug
Provate ad eseguire nuovamente il login e controllate /var/log/auth.log che dovrebbe spiegarvi la il motivo del mancato login.
Key Table non valida
Il seguinte errore può comparire se è presente un /etc/krb5.keytab non valido.
Aug 7 19:31:27 ubuntu sshd[4444]: pam_krb5: pam_sm_authenticate(ssh wendy): entry: Aug 7 19:31:27 ubuntu sshd[4444]: pam_krb5: verify_krb_v5_tgt(): krb5_mk_req(): KDC has no support for encryption type Aug 7 19:31:27 ubuntu sshd[4444]: pam_krb5: pam_sm_authenticate(ssh wendy): exit: failure Aug 7 19:31:30 ubuntu sshd[4444]: Failed password for wendy from 127.0.0.1 port 50054 ssh2
Il seguente errore indica una /etc/krb5.keytab non valida , di solito non è un problema.
Aug 7 20:00:05 ubuntu sshd[4764]: pam_krb5: pam_sm_authenticate(ssh wendy): entry: Aug 7 20:00:05 ubuntu sshd[4764]: pam_krb5: verify_krb_v5_tgt(): krb5_kt_read_service_key(): Key table entry not found Aug 7 20:00:05 ubuntu sshd[4764]: pam_krb5: pam_sm_authenticate(ssh wendy): exit: success Aug 7 20:00:05 ubuntu sshd[4764]: Failed password for wendy from 10.0.0.69 port 39428 ssh2
Shadow password
Una delle cause di fallimento consite nel fatto che i dettagli degli account nascosti non possono essere trovati, controllate di avere /etc/nsswitch.conf:
shadow: files ldap
Specificando uno dei seguenti casi provoca il fallimento del login:
shadow: files shadow: compat
Scambio di dominio
I seguenti errori indicano un host name non corretto, nome di domio o dominio AD.
Sep 9 17:35:00 ubuntu sshd[8088]: pam_krb5: pam_sm_authenticate(ssh steve-o): entry: Sep 9 17:35:00 ubuntu sshd[8088]: pam_krb5: verify_v5_tgt(): krb5_sname_to_principal(): Cannot determine realm for host Sep 9 17:35:00 ubuntu sshd[8088]: pam_krb5: pam_sm_authenticate(ssh steve-o): exit: failure Sep 9 17:35:00 ubuntu sshd[8088]: Failed password for steve-o from 127.0.0.1 port 52992 ssh2
Verificate che /etc/hostname coincida con /etc/hosts e che coincida con l'intera voce dominio in /etc/krb5.conf .Gli esempi che seguino evidenziano dove il nome del dominio deve apparire.
/etc/hostname:
ubuntu.
/etc/hosts:
127.0.0.1 localhost 10.82.6.10 ubuntu. ubuntu
/etc/krb.conf:
[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = 10.30.2.2:88 } [domain_realm] example.com = EXAMPLE.COM