Samba amb LDAP
Abans de recórrer aquest article cal tenir clars els conceptes bàsics. Pots mirar-te els articles relacionats:
Contingut
Introducció
Realitzarem aquesta pràctica amb Ubuntu. Posarem a punt un servidor Samba com a PDC i li posarem un servidor LDAP com a password backend. D'aquesta manera podrem centralitzar la gestió d'usuaris i contrasenyes, i alhora permetre la funcionalitat de Samba per a dominis Windows.
Referències:
- la pròpia pàgina de Samba.org, tot i que calen moltes altres per acabar-ho d'ajustar correctament.
- Samba + LDAP a help.buntu.com
- LDAP a help.ubuntu.com per la encriptació TLS.
- Samba.org: inicialització de la DB LDAP.
Ajustos inicials
Abans de poder començar:
- Ajusta la IP de la màquina convenientment.
- Tria un nom de domini adequat i sense confusions (canviar-ho a mig procés ens liarà).
- Ajusta el FQDN de la màquina de forma convenient al domini que vols fer:
maquina.domini.local
Instal·lació
Instal·lem tots els paquets (anem al lío):
# apt-get install slapd ldap-utils samba samba-doc smbldap-tools phpldapadmin gnutls-bin ssl-cert
Creem el primer DIT, tot i que de fet son 2: un per la BD interna del SLAPD i un altre per les nostres dades del domini.
# dpkg-reconfigure slapd
OJU, perquè quan fem això se'ns esborra tota la configuració del LDAP, i si hem afegit schemas addicionals (com el cas del Samba) caldria tornar-los a afegir.
Afegir schema de Samba al LDAP
Aquesta configuració de LDAP requereix el schema de Samba, cosa que inicialment no porta.
Segueix l'article d'Ubuntu per afegir schema Samba a LDAP.
Afegir encriptació TLS a LDAP
Aquesta passa és optativa. Això assegurarà la connexió amb el servidor LDAP. Si és una màquina externa és imprescindible. Però si tenim el Samba i el LDAP a la mateixa màquina podem simplement desactivar l'ús del TLS amb:
[global] ... ldap ssl = off
Per implementar TLS: segueix aquest apartat del tutorial d'Ubuntu per afegir encriptació TLS al servidor.
ULL!! És important que el CN (common name) del servidor del certificat sigui el mateix que el FQDN de la teva màquina server. En el tutorial és ldap01, ajusta-ho a la teva màquina (per exemple, funkyserver.funky.local).
Si no, et donarà errors de TLS en el log.smbd
Ajustar phpldapadmin
Solució per si apareix l'error dels usuaris (en Ubuntu 14 passa).
Ajustem el domini per defecte que mostra la interfície editant /etc/phpldapadmin/config.php. Comentem la següent línia (ens forçava a example.com):
#$servers->setValue('server','base',array('dc=example,dc=com'));
I també aquesta:
#$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');
Ajustem Apache per accedir de forma segura al phpldapadmin:
# a2enmod ssl # a2ensite default-ssl.conf # service apache2 restart
Ara ja podem accedir de forma segura a la interfície:
https://ldap_server_ip/phpldapadmin
Configurem Samba
Hem de configurar:
- Que Samba actui com a PDC
- Samba#Samba Server
- Particularment cal vigilar:
server role = classic primary domain controller
- Que utilitzi LDAP com a passdb backend. La directiva clau de smb.conf és aquesta:
passdb backend = ldapsam:ldap:///
- Guia Ubuntu per fer-ho. Seguiu-ho perquè cal afegir algunes coses més (prefixos i sufixos diversos).
- Crear objecte sambaDomain a l'arrel del DIT LDAP (veure més avall). Imprescindible fer-ho abans de crear grups i usuaris.
- Accedeix per phpldapadmin i crea (per aquest ordre):
- grups: administradors, maquines, web
- usuaris (crea un parell administradors i un parell del grup web)
- maquines (han de pertànyer al grup "maquines")
Crear objecte sambaDomain al LDAP
Referència a samba.org: inicialització de DB LDAP. En aquest cas es crea "a mà", intentem fer-ho més fàcil.
Segons la guia cal crear un objecte sambaDomain a l'arrel del nostre DIT LDAP. Normalment es crea sol al reiniciar el servei samba o smbd. Comproveu-ho reiniciant i mirant amb el PHPLDAPADMIN si s'ha creat.
Si no surt, l'introduirem "a mà" des de PHPLDAPADMIN.
Primer de tot, hem de prendre nota del local SID de la màquina server:
# net getlocalsid
A mi em surt:
SID for domain FUNKYSERVER is: S-1-5-21-1681675730-4274209261-388585976
Creem un "Samba Domain" amb PHPLDAPADMIN i li afegim el SID de la màquina server.
Creació de grups
A partir d'aquí caldria afegir els grups (haurien de ser Samba Group Mapping):
grup | GID (gidNumber) | sambaSID* |
---|---|---|
Domain Admins | 512 | S-1-5-21-1681675730-4274209261-388585976-512 |
Domain Users | 513 | S-1-5-21-1681675730-4274209261-388585976-513 |
Domain Guests | 514 | S-1-5-21-1681675730-4274209261-388585976-514 |
Domain Computers | 515 | S-1-5-21-1681675730-4274209261-388585976-515 |
Administrators | 544 | S-1-5-21-1681675730-4274209261-388585976-544 |
- = Hem de posar el localSID del domini pertinent (el de la vostra màquina)
Ho poriem fer "a mà" amb el PHPLDAPADMIN, però en algunes ocasions la creació de Samba Group Mappings falla. Si és el cas, tenim 2 solucions:
- Crear primer un grup POSIX i després afegir-li el schema de sambaGroupMapping a la objectClass. Tingueu en compte que:
- sambaSID port com a prefix el localSID del domini vist abans + el GID del grup
- sambaGroupType: 2 = de domini ; 5 = local
- Importar un template. Està a LDIF template, caldrà aplicar-li modficacions i importar-lo:
- Comprova que tens un domini Samba amb el SID de la teva màquina.
- Descarrega [el template d'usuaris i grups] i modifica:
- SIDs d'acord amb el del teu server
- Domini (a l'exemple és differentialdesign.org , i per vosaltres el vostre (funky.local, per exemple)
Creació d'usuaris
Hem de crear usuaris (Samba Accout a PHPLDAPADMIN) i assegurar-nos que pertanyen al grup correcte (Administrators, Domain Admins, Domain Users, etc.).
Per poder modificar contrasenyes harem d'instal·lar el paquet libnss-ldap o libnss-ldapd i podrem modificar les contrasenyes amb la habitual comanda:
# apt-get install libnss-ldap # smbpasswd -a <nom_usuari>
Configurem Linux per veure els grups LDAP
Inicialment, el sistema operatiu no veu els grups i usuaris de LDAP. Podeu comprovar-ho amb
$ getent groups $ getent passwd
Per tal que el sistema operatiu pugui veure els grups, usuaris i màquines, caldrà també modificar /etc/nsswitch.conf (ULL! aquest arxiu és altament delicat, si no l'editem bé podem fer que la màquina no arrenqui). Caldrà afegir "ldap" a les línies de passwd i user:
passwd: compat ldap group: compat ldap shadow: compat ldap
Torneu a executar les comandes anteriors i veureu com als grups ara se'ns afegeixen els del LDAP.
Configurem smbldap-tools
Per poder manipular tot el tinglado necessitem una sèrie de comandes contingudes en el package ldap-tools. Curiosament, no es configuren correctament per defecte i cal fer alguns arreglos com indica aquest bug.
La qüestió és bàsicament copiar els (inexistents) arxius de conf al lloc què li toca. En Ubuntu 14.04:
# cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/ # cp /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz /etc/smbldap-tools/ # cd /etc/smldap-tools # gunzip smbldap.conf.gz
Editeu els fitxers i poseu-hi els valors pertinents al vostre domini: (potser és més fàcil deshabilitant TLS).
- DN del admin
- SID
Testejem, per exemple, afegir una màquina nova (necessari per afegir Windows al domini):
# smbldap-useradd -t 0 -w "makina1"
Probablement es queixarà (un altre bug) de que no pot trobar els següents GID i UID: Failed to find sambaUnixIdPool to get next gidNumber
. Per solucionar-ho afegirem aquestes propietats de l'objecte sambaUnixIdPool al sambaDomainName (que sol estar a l'arrel del DIT LDAP):
- Entrar a PhpLdapAdmin i anar al sambaDomainName
- Clicar "veure atributs interns"
- Afegir un objectClass del tipus sambaUnixIdPool
- Omplir els GID i UID amb nombres pertinents (p.ex. 500 i 1500).
Testejem les eines del paquet afegint la màquina de la darrera comanda.
Creació d'usuaris
Al crear usuaris podem tenir problemes amb el canvi de contrasenya. Si fos el cas:
- Crear els usuaris amb la interfície del PHPLDAPADMIN
- Donar-los una contrasenya des de la comanda següent (si no es queixa de que cal canviar la pass i no acaba d'anar bé):
# smbldap-passwd <usuari>
Troubleshooting
El més important (com sempre) és mirar el fitxer de log:
$ tail -f /var/log/samba/log.smbd
La comanda testparm també ens dona informació sobre si hi ha errors a smbd.conf:
$ testparm
PROBLEMA: pdb_init_ldapsam_common: Failed to retrieve LDAP password from secrets.tdb
SOLUCIÓ: afegir la contrasenya d'admin LDAP a la conf (secrets.tdb) amb (raro que calgui posar-la en clear text):
# smbpasswd -w la_password
PROBLEMA: Failed to issue the StartTLS instruction: Connect error
SOLUCIÓ: el CN (common name) del host en el certificat no coincideix amb el FQDN del servidor. Canvia un o l'altre (nom del server o bé refés el certificat).
SOLUCIÓ2: desactivar el TLS (ldap ssl = off
en /etc/samba/smb.conf)