Wiki Ubuntu-it

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


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