Home
Repository 32bit  Forum
Repository 64bit  Wiki

Modifiche

Autenticazione con LDAP per Samba

1 476 byte aggiunti, 09:10, 3 ott 2008
m
Autore
== Introduzione ==
Come installare e configurare samba come controllore di dominio di primo livello(PDC).
Questa guida descrive come installare e configurare Samba come PDC autenticando gli utenti con LDAP. Il sistema imposta un potente e sicuro file/print server oltre ad un robusto Directory Server.
Inoltre il server samba fa anche da logon server per i client Windows® che con l'aiuto dei “logons script” accedono automaticamente ai propri dischi condivisi in base al base al gruppo di appartenenza.
== Prima di cominciare ==
Questa guida descrive come integrare ldap in il setup di un PDC con OpenLdap e Samba, quindi mostra:
* come installare e configurare ldap (installando e configurando OpenLDAP, gli script IDEALX per samba, i file slapd.conf e /etc/ldap.conf, Pluggable Authentication Modules (PAM) e infine avvio di OpenLDAP);
La distribuzione di riferimento è una Fedora Core 5, però la procedura qui descritta funziona su tutte le altre distribuzioni (es. Slackware®) e le varianti UNIX® come AIX e HP-UX.
È racomandato procurasi raccomandato procurarsi una versione precompilata dei pacchetti per la propria distribuzione (es .rpm per Red Hat® e derivati oppure .tgz per Slackware® e derivati).
I programmi usati sono i seguentipacchetti sono necessari:
* OpenSSL;
LDAP : Lightweight Directory Access Protocol, è un protollo per far comunicare più computer con un Directory Server (rfc 1777 e 2251); è stato progettato per permettere un accesso leggero ad alberi derivati da Directory X.500 OSI Directory Access Protocol (DAP).
I dati sono organizzati in una struttura gerarchica (con supporto nativo della replicazione) e non di tabelle come nei DBMS relazionali, quali oracle oppure postgresql.
Una Directory è una collezione gerarchica di oggetti e di attributi associati agli ogetti stessi.
* il primo è l'inclusione dello schema samba nel server LDAP;
* il secondo è la configurazione di samba per autenticare via il server LDAP, grazie all'utility PAM che crea uno strato di astrazione nel processo di autenticazione, nascondendone la complessità (decidendo ad esempio se usare un file, LDAP, oppure un altro meccanismo di autenticazione);
* il terzo consiste nel usare un insieme di strumenti: i così detti “ IDEALX LDAP toolkit per Samba” , noti anche come gli "smbldap-tools", prodotti da terzi, ma rilasciati sotto licenza GPL.
== Configurazione di LDAP ==
=== Installazione di OpenLDAP ===
Per installare OpenLDAP verificare che nella propria distribuzione non sia già installato, con i seguenti comandi(per fedora):
rpm -qa | grep ldap
INFRA configure.pl smbldap-groupmod smbldap-useradd smbldap.conf
per installare gli IDEALX toolkitscripts:
* andare sul [http://samba.idealx.org/dist/ sito] e scaricare la versione 0.9.1 o superiore (smbldaptool-0.9.1.tar.gz);
** ''Net::SSLeay''.
* Scompattare tutti gli archivi appena scaricati con tarusando questo comando:
for archivio in *; do tar -xvzf $archivio; done
chmod 644 /etc/openldap/cacert.pem
* Configurare il file slapd.conf. Il demone di OpenLDAP si chiam chiama slapd, e legge le configurazioni dal file slapd.conf, prima di editare quel file bisogna generare l'impronta della password per l'admin rootdn (root distinguished name), per fare ciò usare l'utility slappasswd come segue:
slappasswd -h {SSHA} -s password_desiderata
#######################################################################
database bdb
suffix "dc=miodominiochrix,dc=comlan" rootdn "cn=Manager,dc=miodominiochrix,dc=comlan"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
=== Configurare /etc/ldap.conf ===
il file /etc/ldap.conf è usato dai client LDAP sul computer locale quali PAM che è l'interfaccia usata da samba per l'autenticazione con via il server LDAP, il file ldap.conf da usare è quello impostato per funzionare con PAM, per sapere quale configurazione usare impartire i seguenti comandi:
strings /lib/libnss_ldap.so.2 | grep conf
Esempio di file /etc/ldap.conf da modificare in funzione della propria configurazione:
#@(#)$Id: ldap.conf,v 2.43 2005/05/25 00:05:08 lukeh Exp $
#
# This is the configuration file for the LDAP nameservice
# Override the default Kerberos ticket cache location.
#krb5_ccname FILE:/etc/.ldapcache
=== Configurare PAM ===
La Fedora core include un utility tool a riga di comando per la configurazione di PAM chiamto chiamato authconfig, le gli utenti di altre distribuzioni di Linux possono usare il tool webmin, c'è esiste un modulo perl per la configurazione di PAM.oppure quelli più esperti possono editare a mano il file di configurazione.Da shell digitare(per fedora core):
authconfig
e selezionare Use LDAP, Use MD5 Passwords, Use shadow Passwords e Use LDAP Authentication nelle impostazioni di LDAP, abilitare TLS, alla voce Server mettere l'indirizzo 127.0.0.1, e infine nella voce Base DN mettere i valori relativi alla vostra configurazione ad esempio: dc=miodominio,dc=com (sostituite “miodominio” e “com” con i valori che desiderate!)
 
Per Slackware:
;
spostarsi nella cartella /etc/pam.d
;
creare il file common-auth se già non esiste, e aggiungerci le seguenti righe:
#Autencicazione pam per ldap
auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok shadow
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
#Account
account requisite pam_unix.so
account sufficient pam_localuser.so
account required pam_ldap.so
#Password
password required pam_cracklib.so retry=3
password sufficient pam_unix.so nullok use_authtok shadow md5
password sufficient pam_ldap.so use_authtok use_first_pass
password required pam_deny.so
#Session
session required pam_limits.so
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0066
session optional pam_ldap.so
 
ora configuare /etc/nsswitch.conf, perché possa usare ldap per autenticare gli utenti
passwd: files ldap
group: files ldap
shadow: files ldap
=== Avviare OpenLDAP ===
min passwd length = 3
unix password sync = Yes
passwd program = /optvar/IDEALXlib/samba/sbin/smbldap-passwd -u %u
passwd chat = "Changing password for*\nNew password*" %n\n "*Retype new password*" %n\n"
log level = 0
ldap user suffix = ou=Users
ldap machine suffix = ou=Computers
add user script = /optvar/IDEALXlib/samba/sbin/smbldap-useradd -m "%u" delete user script = /optvar/IDEALXlib/samba/sbin/smbldap-userdel "%u" add machine script = /optvar/IDEALXlib/samba/sbin/smbldap-useradd -t 0 -w "%u" add group script = /optvar/IDEALXlib/samba/sbin/smbldap-groupadd -p "%g" delete group script = /optvar/IDEALXlib/samba/sbin/smbldap-groupdel "%g" add user to group script = /optvar/IDEALXlib/samba/sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /optvar/IDEALXlib/samba/sbin/smbldap-groupmod -x "%u" "%g" set primary group script = /optvar/lib/IDEALXsamba/sbin/smbldap-usermod -g '%g' '%u'
# printers configuration
printer admin = @"Print Operators"
idx = 0
while idx < len(buf):
ln = buf[idx]
#
# We need to set up a regex for each possible section we
#
if s == 'Global':
hdrstring = '\[ *' + s + ' *\]'
elif s == 'Group':
hdrstring = '\[ *' + s + ' *- *' + group + ' *\]'
elif s == 'User':
hdrstring = '\[ *' + s + ' *- *' + user + ' *\]'
elif s == 'OS':
hdrstring = '\[ *' + s + ' *- *' + ostype + ' *\]'
elif s == 'Machine':
hdrstring = '\[ *' + s + ' *- *' + machine + ' *\]'
#
# See if we have found a section header
#
if re.search(r'(?i)' + hdrstring, ln):
idx = idx + 1 # increment the counter to move to the next # line. x = re.match(r'([^#\r\n]*)', ln) # Determine the section
# name and strip out CR/LF
# and comment information
if debug:
print 'rem ' + x.group(1) + ' commands'
else:
# create the rem at the beginning of each section of the
# logon script.
script.append('rem ' + x.group(1) + ' commands')
#
# process each line until we have found another section
# strip comments and line endings
#
x = re.match(r'([^#\r\n]*)', buf[idx])
if string.strip(x.group(1)) != '' :
# if there is still content after stripping comments and
# line endings then this is a line to process
line = x.group(1)
#
# Check to see if this is a macro definition line
vardef = re.match(r'(.*)=(.*)', line)
if vardef:
varname = string.strip(vardef.group(1)) # Strip leading and varsub = string.strip(vardef.group(2)) # and trailing spaces
if varname == '':
print "Error: No substition name specified line: %d" % idx sys.exit(1)
if varsub == '':
print "Error: No substitution text provided line: %d" % idx sys.exit(1)
if macros.has_key(varname):
print "Warning: macro %s redefined line: %d" % (varname, idx) macros[varname] = varsub idx = idx + 1 continue
#
# Replace all the macros that we currently
#
for varname in macros.keys():
line = re.sub(r'%' + varname + r'(\W)', macros[varname] + r'\1', line)
if debug:
print line
if pause:
print 'pause'
else:
script.append(line) idx = idx + 1
if idx == len(buf):
break # if we have reached the end of the file
# stop processing.
idx = idx + 1 # increment the line counter
if debug:
print ''
else:
script.append('') return script 
# End buildScript()
def run():
for i in options:
# template file to process
if (i[0] == '-f') or (i[0] == '--templatefile'): configfile = i[1]
# print 'configfile = ' + configfile
# define the group to be used
elif (i[0] == '-g') or (i[0] == '--group'):
group = i[1]
# print 'group = ' + group
# define the os type
elif (i[0] == '-o') or (i[0] == '--os'):
ostype = i[1]
# print 'os = ' + os
# define the user
elif (i[0] == '-u') or (i[0] == '--user'):
user = i[1]
outfile = user + '.bat' # Setup the output file name
# print 'user = ' + user
# define the machine
elif (i[0] == '-m') or (i[0] == '--machine'):
machine = i[1]
# define the netlogon directory
elif (i[0] == '-d') or (i[0] == '--dir'):
outdir = i[1]
# print 'outdir = ' + outdir
# if we are asked to turn on debug info, do so.
elif (i[0] == '--debug'):
debug = 1
# print 'debug = ' + debug
# if we are asked to turn on the automatic pause functionality, do so
elif (i[0] == '--pause'):
pause = 1
# print 'pause = ' + pause
# if we are asked for the version number, print it.
elif (i[0] == '-v') or (i[0] == '--version'):
print version sys.exit(0)
# if we are asked for help print the docstring.
elif (i[0] == '-h') or (i[0] == '--help'):
print __doc__ sys.exit(0)
#
# open the configuration file
#
try:
iFile = open(configfile, 'r')
except IOError:
print 'Unable to open configuration file: ' + configfile sys.exit(1)
#
# open the output file
#
if not debug:
try: oFile = open(outdir + outfile, 'w') except IOError: print 'Unable to open logon script file: ' + outdir + outfile sys.exit(1) buf = iFile.readlines() # read in the entire configuration file
#
# call the script building routine
#
if not debug:
for ln in script: oFile.write(ln + '\r\n') if pause: if string.strip(ln) != '': # Because whitespace oFile.write('pause' + '\r\n') # is a useful tool, we
# don't put pauses after
# an empty line.
#
# immediate-mode commands, for drag-and-drop or execfile() execution
#i f if __name__ == '__main__': run()
else:
print "Module ntlogon.py imported." print "To run, type: ntlogon.run()" print "To reload after changes to the source, type: reload(ntlogon)"
#
# End NTLogon.py
#
=== Avviare Samba ===
/etc/init.d/samba start
su SlacwareSlackware:
/etc/rc.d/rc.samba start
== Inizializzazione del database di LDAP ==
Eseguire lo script configure.PL in /var/lib/samba/sbin ( o comunque dove avete scelto di salvarlo) poi eseguire popolare il database di ldap eseguendo lo script smbldap-populate per creare l'amminstratore del dominio, alcuni gruppi e vari altri elementi.
Creare i dischi condivisi e gli utenti per l'amministrazione di quelle condivisioni:
== Autore ==
Spero è garantito il permesso di esser stato abbastanza esauriente sull'argomento. Per qualsiasi suggerimento copiare e/o segnalazione, potete inviarmi una mail all'indirizzo: [mailto:chrix@slackymodifiacre questo documento secondo i termini della licenza per documentazione libera GNU v.it chrix@slacky1.1 o successiva pubblicata dalla Free Software Foundation.it]
La riproduzione anche parziale di questa guida è consentita previo accordo dell'autore.Christian Eric E.: [[Utente:Chrix|Chrix]]
156
contributi