Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati


Questa guida è stata verificata solo con versioni obsolete di Ubuntu, potrebbe non essere più valida. Vuoi contribuire ad aggiornarla? Clicca qui!

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

Ulteriori risorse


CategoryServer CategoryDaRevisionare