#format wiki
#LANGUAGE it
<<BR>>
<<Indice>>
<<Informazioni(forum="https://forum.ubuntu-it.org/viewtopic.php?f=46&t=64743";rilasci="7.10")>>

= 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.
## IMMAGINI DA RICARICARE
##{{attachment:Screenshot-ocean-nss-ldap.png}}
Specifichiamo il search basedm
## IMMAGINI DA RICARICARE
##{{attachment:Screenshot-ocean-nss-ldap-basedn.png}}
Selezionare LDAP versione 3
## IMMAGINI DA RICARICARE
##{{attachment:Screenshot-ocean-nss-ldap-version.png}}

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 tramite{{{kpasswd}}}e 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
}}}

= Ulteriori risorse =

 * [[http://developer.novell.com/wiki/index.php/HOWTO:_Configure_Ubuntu_for_Active_Directory_Authentication|Documento originale]]
----
CategoryServer CategoryDaRevisionare