Samba e OpenLDAP: creare un controller di dominio con Debian Squeeze: differenze tra le versioni

Riga 1 310: Riga 1 310:
</pre>
</pre>
dovrebbe, dopo aver richiesto la password di Administrator, mostrarci le condivisioni samba del nostro server.
dovrebbe, dopo aver richiesto la password di Administrator, mostrarci le condivisioni samba del nostro server.
== Assegnazione dei permessi agli utenti di dominio ==
Affinchè le directory dei profili e altre cosette funzionino senza intoppi è necessario assegnare i giusti permessi a gruppi di dominio o a utenti se è specifico per quell'utente:
<pre>
net -S server -U root rpc rights grant "DOMINIO\Domain Admins" SeMachineAccountPrivilege SePrintOperatorPrivilege SeAddUsersPrivilege SeDiskOperatorPrivilege SeRemoteShutdownPrivilege
</pre>
<pre>
net -S server -U root rpc rights grant "DOMINIO\rossi" SePrintOperatorPrivilege
</pre>
dove server in questo caso è il netbios name di Samba.
== Aggiungere i primi utenti di dominio ==
Il pacchetto smbldap-tools presente in Lenny, a differenza di quelli di Etch e Sarge, effettua un controllo di uid e gid ogni qualvolta si tenta di aggiungere un utente OpenLDAP al dominio, al fine di evitare sovrapposizioni nei valori; pertanto non è più necessario specificare a mano i corretti valori di uid e gid.
Adesso siamo pronti per la creazione del primo utente con il comando:
<pre>
# smbldap-useradd -a -m -c "Nome Utente" username
</pre>
Dove -a serve per creare anche i dati UNIX, -m crea l'home directory e -c specifica il nome completo.<br/>
Infine impostare la password dell'utente con:
<pre>
# smbldap-passwd username
</pre>
Per verificare il tutto usare il comando:
<pre>
# smbldap-usershow username
</pre>
Creiamo ora i gruppi per organizzare gli utenti all'interno del nostro dominio:
<pre>
# smbldap-groupadd "NomeGruppo"
</pre>
Aggiungiamo gli utenti ai gruppi desiderati:
<pre>
# smbldap-usermod -G "NomeGruppo" nome.utente
</pre>
<br/>
Se decidessimo di utilizzare la GUI fornita da phpldapadmin non dimentichiamoci di '''creare a mano''' le homes directory:
Ogni utente deve essere aggiunto ad un gruppo per prendere le credenziali, perciò non dimentichiamo di dare sempre il comando:
<pre>
# smbldap-usermod -G "NomeGruppo" nome.utente
</pre>
Ricordate di creare la cartella del roaming profile altrimenti al log in vi darà errore e il profilo non partirà:
<pre>
# mkdir -p /home/samba/profiles/%u (%u=nome utente)
# chown -R "%u":"Domain Users" /home/samba/profiles/%u
# chmod 700 /home/samba/profiles/%u
</pre>
== Script per la creazione utenti ==
per facilitare la vita a tutti ho creato uno script che con un solo comando vi assegna i permessi, crea gli utenti, crea la cartella profiles e aggiunge l'utente al gruppo Domain Users:
<pre>
# touch /home/samba/adduser.sh
</pre>
editiamolo così:
<pre>
#!/bin/bash
/usr/sbin/smbldap-useradd -a -m -c "${2}" "${1}"
/usr/sbin/smbldap-usermod -G "Domain Users" "${1}"
USER_PROFILE="/srv/samba/profiles/"${1}""
/bin/mkdir -p "${USER_PROFILE}"
/bin/chown -R "${1}":"Domain Users" "${USER_PROFILE}"
/bin/chmod 700 "${USER_PROFILE}"
USER_HOME="/home/"${1}""
/bin/chown -R "${1}":"Domain Users" "${USER_HOME}"
/bin/chmod 700 "${USER_HOME}"
/usr/sbin/smbldap-passwd "${1}"
</pre>
Verificate i percorsi dei comandi in quanto possono cambiare da versione a versione.
Dare l'esecuzione:
<pre>
# chmod +x /home/samba/adduser.sh
</pre>
Ora non vi resta altro che eseguire:
<pre>
# /home/samba/adduser.sh utente "Nome Cognome utente" (vanno scritte anche le "")
# PASSWORD: .......
</pre>
L'utente è così creato.
== Test e connessione al dominio ==
Il nostro server è ora pronto per essere utilizzato. Per testarne le funzionalità è possibile procedere per gradi, in modo da isolare quelli che sono i problemi di configurazione da quelli che sono i problemi di rete o dei client Windows.<br/>
A tal fine il primo accesso può essere fatto dal server stesso con il comando:
<pre>
# smbclient -L localhost -U Administrator
</pre>
Dovrebbe essere richiesta la password impostata precedentemente per l'utente Administrator e, di seguito, dovrebbero venire elencate le condivisioni samba impostate sul server.
<br/><br/>
La procedura di connessione dei client al dominio varia a seconda del sistema operativo utilizzato sulle macchine client:
<br/><br/>
*'''Windows 95/98/ME'''
# Verificare che sia installato il "Client per Reti Microsoft" fra le proprietà di rete
# Assicurarsi che il Client per Reti Microsoft sia selezionato come protocollo di rete primario (Pannello di Controllo -> Rete -> Logon di rete primario).
# Andare su Pannello di Controllo -> Rete -> Client per reti Microsoft -> Proprietà -> Logon su Dominio NT.
# Se si è configurata su smb.conf l'opzione "add user script", selezionare il checkbox Crea un Computer Account, altrimenti creare a mano sul server Samba un utente con il nome della macchina Windows.
# Inserire il nome del proprio dominio e cliccare OK.
*'''Windows NT'''
# Andare su Pannello di Controllo -> Rete -> Identificazione Rete -> Proprietà
# Selezionare Dominio e inserire il nome del prorio dominio
# Selezionare Crea un Computer Account
# Alla richiesta della password di un amministratore inserire la login e la password di Administrator, ricordarsi che l'utente root deve essere aggiunto a smbpasswd.
# Dovrebbe comparire un messaggio che ci da il benvenuto sul dominio.
*'''Windows 2000'''
# Le procedure sono uguali a quelle per Windows NT tranne che i settaggi di rete sono trovati sotto Pannello di Controllo -> Sistema -> Identificazione Rete (oppure, sul Desktop, cliccare col tasto destro del mouse sull'icona Risorse del Computer, selezionare Proprietà, cliccare sulla tab Identificazione Rete e sul tasto Proprietà).
*'''Windows XP'''
La procedura con Windows XP è più complessa (lamentele a Microsoft che usa cambiare le specifiche e le implementazioni dei suoi protocolli anche per rendere più complicata l'interoperabilità con soluzioni alternative). Notare che solo XP Professional Edition può essere usato per far parte di un dominio, Windows XP Home Edition non può far parte di un dominio (Samba o Windows based).
# Aprire l'editor delle policy di Sicurezza Locale (Start->Pannello di controllo->Strumenti di Aministrazione->Criteri di protezione locali->Criteri locali->opzioni di protezione)
# Disabilitare la voce "Domain member: Digitally encrypt or sign secure channel (always)" (Membro di dominio: aggiunta crittografia of irma digitale ai dati del canale protetto (sempre) )
# Disabilitare la voce "Domain member: Disable machine account password changes" (Controller di dominio: rifiuta cambio password account computer)
# Disabilitare la voce "Domain member: Require strong (Windows 2000 or later) session key" (Membro di dominio: richiesta chiave di sessione avanzata (Windows 2000 o versioni successive) )
# Scaricare da Samba.org la patch per il registro WinXP_SignOrSeal. Per applicarla cliccare due volte sul file .reg e rispondere Si alle domande
# A questo punto ci si può unire al dominio come su Windows NT/2000: Tasto destro su Risorse del Computer, selezionare Proprietà, Nome del Computer e tasto Modifica uppure cliccare su Identificazione di Rete ed eseguire il Wizard fornendo le credenziali di Administrator.
*'''Windows Vista'''
# Non ancora testato.
*'''Windows 7'''
# Su Windows 7 Professional o Ultimate (gli unici che possono effettuare un join a un dominio) occorre modificare due chiavi di registro:
<pre>
HKLM\System\CCS\Services\LanmanWorkstation\Parameters
DWORD  DomainCompatibilityMode = 1
DWORD  DNSNameResolutionRequired = 0
</pre>
A questo punto la procedura di unione al dominio procede sulla falsariga di quella valida per Windows XP.
== Replica del database LDAP su un altro server ==
Se siete interessati a fornire ridondanza alla vostra rete, potete prendere in considerazione l'idea di inserire un secondo server OpenLDAP sincronizzato con il server principale che abbiamo appena configurato.<br/>
In tal caso suggerisco di seguire [[Implementare un'architettura ridondante master/slave OpenLDAP | questa guida]], nella quale viene utilizzato lo stesso database LDAP che abbiamo appena configurato per costruire un server di replica.
== db4 ==
OpenLDAP ha la brutta abitudine di non risistemarsi per bene quando la donna delle pulizie inciampa nell'interruttore generale della corrente. Perciò conviene installare:
<pre>
# apt-get install db4.2-util
</pre>
Questo pacchetto contiene l'utility db4.2_recover che viene lanciata automaticamente ad ogni restart di ldap, risolvendo eventuali problemi di incongruenza del Barkley DB.
<br/>
== Installazione di una interfaccia grafica per amministrare OpenLDAP ==
Sebbene si possa amministrare OpenLDAP in maniera completamente testuale (nel corso della guida vedremo come) è consigliabile installare un'interfaccia grafica, che aiuterà a svolgere i normali compiti di amministrazione una volta terminato di configurare il dominio.<br/>
Nei repository Debian sono disponibili diverse interfacce grafiche. In questa guida la scelta è caduta su '''phpldapadmin''', che sembra essere la più diffusa.<br/>
Phpldapadmin, come il nome fa intuire, è un'interfaccia scritta in PHP e per funzionare ha perciò bisogno di un server web e del linguaggio di scripting PHP.
=== Installazione dei prerequisiti ===
Installiamo per prima cosa alcuni moduli di PHP necessari:
<pre>
apt-get install libapache2-mod-php5 php5 php5-cli php5-curl php5-gd php5-imap php5-ldap php5-mcrypt php5-mhash php5-sqlite
php5-tidy php5-xmlrpc php-pear mcrypt libgd-tools
</pre>
{{ Warningbox | Il comando precedente va scritto in un'unica riga }}
=== Installazione di PHPLdapAdmin ===
Ora possiamo installare phpldapadmin:
<pre>
# apt-get install phpldapadmin
</pre>
Configurare il file '''/etc/phpldapadmin/config.php''':<br/>
Ora possiamo installare phpldapadmin:
<pre>
# apt-get install phpldapadmin
</pre>
Configurare il file '''/etc/phpldapadmin/config.php''':
<pre>
*********************************************
* Define your LDAP servers in this section  *
*********************************************
$servers = new Datastore();
$servers->newServer('ldap_pla');
$servers->setValue('server','name','Milanoaccademia Server');
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','base',array('dc=milanoaccademia,dc=lan'));
$servers->setValue('login','auth_type','session');
</pre>
Controllate che siano decommentate e  configurate le stringhe $Server.
Phpldapadmin richiede per funzionare la presenza di un tool chiamato mkntpwd, sviluppato dal team di Samba e utilizzato per creare gli hash delle password in Samba. Inspiegabilmente questo tool non è presente negli archivi di Debian. Va pertanto scaricato dal seguente indirizzo:
<pre>
# wget http://www.nomis52.net/data/mkntpwd.tar.gz
</pre>
Una volta scaricato il file, bisogna scompattarlo, compilarlo e configurarlo:
<pre>
# apt-get install build-essential
# tar -zxf mkntpwd.tar.gz
# cd mkntpwd
# make
# cp mkntpwd /usr/local/bin
# mkntpwd
</pre>
L'ultimo comando dovrebbe restituirvi l'elenco delle opzioni disponibili in mkntpwd.
Dopo aver riavviato apache2, eseguire il seguente comando nel browser:
<pre>
http://localhost/phpldapadmin/
</pre>
A questo punto dovrebbe avviarsi la schermata di autenticazione di phpldapadmin e bisognerà premere autentica e digitare la password di bindrootdn.
Controllate che siano decommentate e  configurate le stringhe $Server.<br/>
Scaricare il tool mkntpwd, poi bisogna scompattarlo, compilarlo e configurarlo:
<pre>
# wget http://www.nomis52.net/data/mkntpwd.tar.gz
# apt-get install build-essential
# tar -zxf mkntpwd.tar.gz
# cd mkntpwd
# make
# cp mkntpwd /usr/local/bin
# mkntpwd
</pre>
L'ultimo comando dovrebbe restituirvi l'elenco delle opzioni disponibili in mkntpwd.
Dopo aver riavviato apache2, eseguire il seguente comando nel browser:
<pre>
# http://localhost/phpldapadmin/
</pre>
A questo punto dovrebbe avviarsi la schermata di autenticazione di phpldapadmin e bisognerà premere autentica e digitare la password di bindrootdn.
[[Immagine:Sambapdc01.jpg|center]]<br/>
[[Immagine:Sambapdc02.jpg|center]]<br/>
Quindi, nella sezione di sinistra, espandete la radice LDAP relativa al vostro dominio. Cliccate sull'unità organizzativa che vi interessa (ou=Users oppure ou=Groups) e selezionate la voce '''Create new entry here".
[[Immagine:Sambapdc04.jpg|center]]<br/>
Selezionate il template corretto ('''Samba3 Account''' se volete creare un nuovo utente e '''Samba3 Group Mapping''' se volete creare un nuovo gruppo) e immettete le voci nei campi di definizione del template stesso.
{{ Warningbox | A differenza della procedura di creazione utenti con i smbldap-tools, che essendo interfacciati con gli strumenti linux di gestione utenti coprivano automaticamente ogni aspetto della creazione di nuove entry, utilizzando phpldapadmin dovrete '''creare a mano''' la home directory del nuovo utente, dato che l'interfaccia non lo farà per voi }}
Per questo motivo solitamente consiglio di utilizzare i smbldap-tools per la creazione di nuovi gruppi e nuovi utenti e di utilizzare phpldapadmin per modifiche a utenti e gruppi già esistenti, quando navigare da console tra le proprietà di ogni entry può diventare difficoltoso.
== Comandi utili e consigli finali ==
=== Creazione di utenti ===
<pre>
# smbldap-useradd -a -m -c "Descrizione Utente" nome.utente
# smbldap-passwd nome.utente
</pre>
Per verificare il tutto usare il comando
<pre>
# smbldap-usershow nome.utente
</pre>
=== Creazione di un gruppo ===
<pre>
# smbldap-groupadd "NomeGruppo"
</pre>
=== Aggiunta di un utente a un gruppo ===
Per impostare il gruppo primario dell'utente:
<pre>
# smbldap-usermod -g "NomeGruppo" nome.utente
</pre>
Per aggiungere l'utente a ulteriori gruppi:
<pre>
# smbldap-usermod -G gruppo1,gruppo2,gruppo3 nome.utente
</pre>
=== Elencare i gruppi memorizzati in LDAP ===
<pre>
# ldapsearch -x objectClass=posixGroup
</pre>
=== Elencare gli utenti di un gruppo ===
<pre>
# smbldap-groupshow "gruppo"
</pre>
=== Backuppare una directory condivisa dal server usando le credenziali di un utente specifico ===
<pre>
smbclient //nomeserver/nomecartella -U nome.utente%password.utente -N -Tc backup.tar /percorso/locale/del/backup
</pre>
=== Elencare le risorse condivise di una macchina ===
<pre>
smbclient -L nomeserver
</pre>
=== Per fare delle modifiche nel DB in maniera semplice ===
<pre>
  slapcat -l /tmp/backup.ldif   
  # stoppare il servizio
  /etc/init.d/slapd stop
  # una copia del vecchio db
  cp -r /var/lib/ldap  /var/lib/ldap.old
  mkdir /var/lib/ldap
  Modificare il file backup.ldif e quindi reimportarlo
  slapadd -c -l /tmp/backup.ldif
</pre>
=== Comandi utili LDAP ===
<pre>
ldapsearch -x -b "dc=dominio,dc=local"
ldapsearch -x -b "ou=users,dc=dominio,dc=local" uid=utente
ldapadd -Y EXTERNAL -H ldapi:/// -f backend.example.com.ldif
ldapmodify -x -w secret -D "cn=admin,dc=dominio,dc=local" -f entry.ldif (modifica una entry sostituendo o cancellando o aggiungendo)
dn: uid=mbaretta,ou=users,dc=milanoaccademia,dc=lan
changetype: modify
add: shadowMax
shadowMax: 0
dn: uid=mbaretta,ou=users,dc=milanoaccademia,dc=lan
changetype: modify
replace: shadowMax
shadowMax: 0
dn: uid=mbaretta,ou=users,dc=milanoaccademia,dc=lan
changetype: delete
ldapadd -x -w secret -D "cn=admin,dc=dominio,dc=local" -f entry.ldif  # per importare un ldif
ldapdelete  -x  -D "cn=admin,dc=dominio,dc=local" -w secret "uid=utente,ou=users,dc=dominio,dc=local"
</pre>
== Per approfondimenti ==
[[Samba e OpenLDAP: creare un controller di dominio]]<br/>
[[Samba e OpenLDAP: creare un controller di dominio con Debian Etch]]<br/>
[[Samba e OpenLDAP: creare un controller di dominio con Debian Lenny]]<br/>
[[Samba, OpenLDAP, Kerberos: creare un controller di dominio sicuro con Debian Lenny]]<br/>
[[Implementare un'architettura ridondante master/slave OpenLDAP]]<br/>
[[Scansione antivirus con ClamAV su condivisioni Samba]]<br/>
[[Accedere alle condivisioni Samba dal browser]]<br/>
[[Creare un Cestino di rete per le condivisioni Samba]]<br/>
<br/>
<br/>
: [[Utente:Gigipin|Gigipin]]
: [[Contatto: luigi.pintaldi@gmail.com]]
----
[[Categoria:Server]]
[[Categoria:Networking]]
282

contributi