Diferència entre revisions de la pàgina «Samba amb LDAP»
(Hi ha 55 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 5: | Línia 5: | ||
== Introducció == | == 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. | 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: | ||
+ | * [https://wiki.samba.org/index.php/Samba_&_LDAP la pròpia pàgina de Samba.org], tot i que calen moltes altres per acabar-ho d'ajustar correctament. | ||
+ | * [https://help.ubuntu.com/lts/serverguide/samba-ldap.html Samba + LDAP a help.buntu.com] | ||
+ | * [https://help.ubuntu.com/lts/serverguide/openldap-server.html LDAP a help.ubuntu.com per la encriptació TLS]. | ||
+ | * [https://wiki.samba.org/index.php/3.0:_Initialization_LDAP_Database Samba.org: inicialització de la DB LDAP]. | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == 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:<pre>maquina.domini.local</pre> | ||
+ | |||
+ | <br> | ||
== Instal·lació == | == Instal·lació == | ||
Instal·lem tots els paquets (anem al lío): | 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 | + | # apt-get install slapd ldap-utils samba samba-doc smbldap-tools phpldapadmin gnutls-bin ssl-cert libpam-smbpass |
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. | 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. | ||
Línia 14: | Línia 30: | ||
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. | 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. | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == Ajustar phpldapadmin == | ||
+ | [http://stackoverflow.com/questions/20673186/getting-error-for-setting-password-field-when-creating-generic-user-account-phpl Solució per si apareix l'error dels usuaris] (en Ubuntu 14 passa). Simplement es tracta de corregir la línia 2469 de <code>/usr/share/phpldapadmin/lib/TemplateRender.php</code> i canviar <code>password_hash</code> per <code>password_hash_custom</code> | ||
+ | |||
+ | 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 | ||
+ | |||
+ | <br> | ||
== Afegir ''schema'' de Samba al LDAP == | == Afegir ''schema'' de Samba al LDAP == | ||
Línia 20: | Línia 56: | ||
Segueix l'[https://help.ubuntu.com/lts/serverguide/samba-ldap.html#samba-ldap-openldap-configuration article d'Ubuntu per '''afegir schema Samba a LDAP''']. | Segueix l'[https://help.ubuntu.com/lts/serverguide/samba-ldap.html#samba-ldap-openldap-configuration article d'Ubuntu per '''afegir schema Samba a LDAP''']. | ||
− | == Afegir encriptació TLS a LDAP == | + | La darrera instrucció genera els elements necessaris per la BBDD LDAP-Samba. Pot ser que doni errors: |
− | + | # smbldap-populate | |
+ | |||
+ | Si és el cas (en Ubuntu 14.04 passa) segueix amb aquest tutorial, ho solucionarem quan arribem a l'apartat "configurant smbldap-tools" més avall. | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == Configurem Samba == | ||
+ | Per repassar conceptes pots fer un cop d'ull a l'article [[Samba]]. | ||
+ | |||
+ | Utilitza la [https://help.ubuntu.com/lts/serverguide/samba-ldap.html#samba-ldap-samba-configuration Guia Ubuntu per configurar Samba-LDAP]. | ||
+ | |||
+ | En definitiva hem de configurar l'arxiu '''/etc/samba/smb.conf''': | ||
+ | # Que Samba actuï com a PDC com s'indica a [[Samba#Samba Server]] | ||
+ | #* Particularment cal vigilar (però no únicament!): <pre> server role = classic primary domain controller</pre> | ||
+ | # Que utilitzi LDAP com a ''passdb backend''. | ||
+ | #* Segueix les passes a la [https://help.ubuntu.com/lts/serverguide/samba-ldap.html#samba-ldap-samba-configuration Guia Ubuntu per configurar Samba-LDAP]. | ||
+ | #* La directiva clau de smb.conf és aquesta:<pre> passdb backend = ldapsam:ldap://localhost/</pre> | ||
+ | # Afegir els sufixos necessaris a la configuració ldap per cadascuna de les OU (unitats organitzatives), per exemple:<pre> ldap user suffix = ou=Usuaris</pre> | ||
+ | # OJU: Desactiveu el TLS. Com que tenim Samba i LDAP a la mateixa màquina no cal encriptar la comunicació:<pre> ldap ssl = off</pre> | ||
+ | |||
+ | === Afegir admin password a secrets.tdb === | ||
+ | Per tal que Samba es pugui connectar a la BBDD LDAP necessita la contrasenya (l'emmagatzema en secrets.tdb). Si no fem això, el ''daemon smbd'' no arrencarà bé i als arxius de log ens donarà un error sobre secrets.tdb. | ||
+ | |||
+ | Assegureu-vos que teniu ben entrat el DN (Distinguised Name) de l'usuari admin a /etc/samba/smb.conf | ||
+ | ldap admin dn = cn=admin,dc=domini,dc=local | ||
+ | |||
+ | Afegim la contrasenya a secrets.tdb: | ||
+ | # smbpasswd -W | ||
+ | |||
+ | I reinicieu el servei per seguir: | ||
+ | # service smbd restart | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == Configurem smbldap-tools == | ||
+ | Per poder manipular tot el tinglado necessitem una sèrie de comandes contingudes en el ''package'' '''ldap-tools'''. Curiosament, [https://bugs.launchpad.net/ubuntu/+source/smbldap-tools/+bug/126038 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 '''smbldap_bind.conf''' i '''smbldap.conf''' i poseu-hi els valors pertinents al vostre domini: (potser és més fàcil deshabilitant TLS). | ||
+ | * DN del admin | ||
+ | * SID (identificador del servidor Samba). El pots saber amb la comanda:<pre># net getlocalsid</pre> | ||
+ | * masterLDAP="ldap://localhost/" | ||
+ | * ldapTLS="0" | ||
+ | |||
+ | La comanda que abans no ens ha funcionat, ara sí que la podem executar. Així se'ns crearan les estructures necessàries de Samba dins de LDAP: | ||
+ | # smbldap-populate | ||
+ | |||
+ | Testejem, per exemple, afegir una màquina nova (necessari per afegir Windows al domini): | ||
+ | # smbldap-useradd -t 0 -w "makina1" | ||
+ | |||
+ | Si se'ns queixés alguna d'aquestes comandes (un altre ''bug'') de que no pot trobar els següents GID i UID: <code>Failed to find sambaUnixIdPool to get next gidNumber</code>, es pot solucionar afegint 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. | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == Creació d'objectes Samba == | ||
+ | Podem afegir usuaris amb la comanda de ''ldap-tools'': | ||
+ | # smbldap-useradd -a -P <usuari> | ||
+ | |||
+ | Al crear usuaris podem tenir problemes amb el canvi de contrasenya. Si fos el cas tenim alternatives: | ||
+ | # 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é):<pre># smbldap-passwd <usuari></pre> | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == Seguretat == | ||
+ | === 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 [https://help.ubuntu.com/lts/serverguide/openldap-server.html#openldap-tls 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 | ||
+ | |||
+ | === Deshabilitar ''anonymous bind'' === | ||
+ | Convé deshabilitar el login anonymous a la BBDD LDAP. Per defecte està activat, i qualsevol pot tafanejar els usuaris. No podrà veure les contrasenyes ni modificar res, però podrà veure la resta de dades personals, cosa que no és raonable en un sistema segur. | ||
+ | |||
+ | [http://serverfault.com/questions/325912/disallow-global-anonymous-bind-with-cn-config Aquest post explica com deshabilitar els ''anonymous login''], la solució que m'ha funcionat és la 2a, la que utilitza <code># ldpamodify -Q -Y EXTERNAL ...</code>. | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == Configurem Linux per veure els grups LDAP == | ||
+ | Inicialment, el sistema operatiu no veu els grups i usuaris de LDAP. Podeu comprovar-ho amb | ||
+ | $ getent group | ||
+ | $ 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 | ||
+ | |||
+ | I instal·lar la llibreria '''libnss-ldap''' (us demanarà configurar els paràmetres '''ldap-auth-config'''): | ||
+ | # apt-get install libnss-ldap | ||
+ | |||
+ | Si alguna cosa ha anat malament, pots reconfigurar el paquet amb: | ||
+ | # dpkg-reconfigure ldap-auth-config | ||
+ | |||
+ | Torneu a executar les comandes anteriors i veureu com als grups ara se'ns afegeixen els del LDAP. | ||
+ | $ getent group | ||
+ | ...i hauries de veure els nous grups "Domain Users" i demés. | ||
+ | |||
+ | Ara ja estem preparats per afegir clients!! | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == Clients Windows i canvi de contrasenya == | ||
+ | PER FI!! Pots afegir clients Windows normalment al domini. Comprova que pots logar-te amb un usuari del domini. | ||
+ | |||
+ | Comprova que pots canviar la contrasenya de l'usuari fent CTRL+ALT+SUPR | ||
+ | |||
+ | Si dóna un error al canviar la contrasenya, repassa el smb.conf i assegura't que NOMES hi ha activa la línia | ||
+ | ldap passwd sync = yes | ||
+ | |||
+ | Per tant, COMENTA la resta de paràmetres de les passwords, o no funcionarà (assegura't de repassar tota la secció [global]): | ||
+ | #unix passwd sync = yes | ||
+ | #passwd program = sudo /usr/sbin/smbldap-passwd %u | ||
+ | #passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . | ||
+ | #pam password change = no | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == Configurant Samba 2 == | ||
+ | Si tot ha anat bé, no hem de fer res d'aquesta secció. Fent un | ||
+ | # smbldap-populate | ||
+ | s'hauria de crear tota l'estructura necessària per treballar. Tot així, deixo aquestes indicacions per si alguna cosa no anés bé. | ||
+ | |||
+ | === Crear objecte sambaDomain al LDAP === | ||
+ | Referència a [https://wiki.samba.org/index.php/3.0:_Initialization_LDAP_Database 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. | ||
+ | |||
+ | === Afegim propietats al sambaDomain === | ||
+ | Busca a les propietats de l'objecte sambaDomain i afegeix-li la '''object class sambaUnixIdPool'''. | ||
+ | |||
+ | Omple els GID i UID amb nombres pertinents (p.ex. 500 i 1500). | ||
+ | |||
+ | === Organizational Units === | ||
+ | Habitualment es sol estructurar el directori segons l'[https://wiki.samba.org/index.php/3.0:_Initialization_LDAP_Database#3.1._Provisioning_Database esquema típic amb 3 o 4 OU's (Organizational Units)], tot i que pot diferir: | ||
+ | * Groups | ||
+ | * Machines | ||
+ | * Users | ||
+ | * Domains (en el nostre cas no crearem aquesta OU ja que el domini el tenim a l'arrel) | ||
+ | |||
+ | '''És important que aquest esquema quadri amb els prefixes i sufixes que hem configurat a la secció LDAP dels arxius:''' | ||
+ | * /etc/samba/smb.conf | ||
+ | * /etc/smbldap-tools/smbldap.conf | ||
+ | |||
+ | === Creació de grups === | ||
+ | A partir d'aquí caldria afegir els grups (haurien de ser Samba Group Mapping): | ||
+ | {| class="wikitable" style="padding:20px;" | ||
+ | ! grup | ||
+ | !groupType | ||
+ | ! GID (gidNumber) | ||
+ | ! sambaSID* | ||
+ | |- | ||
+ | | Domain Admins || 2 || 512 || S-1-5-21-1681675730-4274209261-388585976-512 | ||
+ | |- | ||
+ | | Domain Users || 2 || 513 || S-1-5-21-1681675730-4274209261-388585976-513 | ||
+ | |- | ||
+ | | Domain Guests || 2 || 514 || S-1-5-21-1681675730-4274209261-388585976-514 | ||
+ | |- | ||
+ | | Domain Computers || 2 || 515 || S-1-5-21-1681675730-4274209261-388585976-515 | ||
+ | |- | ||
+ | | Administrators || 5 || 544 || S-1-5-21-1681675730-4274209261-388585976-544 | ||
+ | |} | ||
+ | |||
+ | <nowiki>* = Hem de posar el localSID del domini pertinent (el de la vostra màquina vist a l'apartat anterior)</nowiki> | ||
+ | |||
+ | 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 [https://wiki.samba.org/index.php/3.0:_Initialization_LDAP_Database#3.2._Preload_LDIF 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> | ||
+ | |||
+ | <br> | ||
+ | |||
+ | == 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: | ||
+ | # smbpasswd -W | ||
+ | |||
+ | ---- | ||
+ | |||
+ | PROBLEMA: (log.smbd) 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 (<code>ldap ssl = off</code> en /etc/samba/smb.conf) | ||
+ | |||
+ | ---- | ||
+ | |||
+ | PROBLEMA: Apareixen 2 sambaDomainName a l'arrel del DIT LDAP. | ||
+ | |||
+ | DIAGNÒSTIC: Normalment un el crea <code>smbldap-populate</code> i l'altre el crea el <code>smbd</code> quan arrenca i no troba l'objecte com a ell li agrada. Pot comportar errors. | ||
+ | |||
+ | SOLUCIÓ: Esborrar els dos elements, reiniciar el <code>smbd</code> i omplir de nou les dades que faltin al sambaDomainName. En particular cal afegir-li l'object class ''sambaUnixIdPool'' | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ... |
Revisió de 17:49, 5 feb 2016
Abans de recórrer aquest article cal tenir clars els conceptes bàsics. Pots mirar-te els articles relacionats:
Contingut
- 1 Introducció
- 2 Ajustos inicials
- 3 Instal·lació
- 4 Ajustar phpldapadmin
- 5 Afegir schema de Samba al LDAP
- 6 Configurem Samba
- 7 Configurem smbldap-tools
- 8 Creació d'objectes Samba
- 9 Seguretat
- 10 Configurem Linux per veure els grups LDAP
- 11 Clients Windows i canvi de contrasenya
- 12 Configurant Samba 2
- 13 Troubleshooting
Introducció[modifica]
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[modifica]
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ó[modifica]
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 libpam-smbpass
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.
Ajustar phpldapadmin[modifica]
Solució per si apareix l'error dels usuaris (en Ubuntu 14 passa). Simplement es tracta de corregir la línia 2469 de /usr/share/phpldapadmin/lib/TemplateRender.php
i canviar password_hash
per password_hash_custom
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
Afegir schema de Samba al LDAP[modifica]
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.
La darrera instrucció genera els elements necessaris per la BBDD LDAP-Samba. Pot ser que doni errors:
# smbldap-populate
Si és el cas (en Ubuntu 14.04 passa) segueix amb aquest tutorial, ho solucionarem quan arribem a l'apartat "configurant smbldap-tools" més avall.
Configurem Samba[modifica]
Per repassar conceptes pots fer un cop d'ull a l'article Samba.
Utilitza la Guia Ubuntu per configurar Samba-LDAP.
En definitiva hem de configurar l'arxiu /etc/samba/smb.conf:
- Que Samba actuï com a PDC com s'indica a Samba#Samba Server
- Particularment cal vigilar (però no únicament!):
server role = classic primary domain controller
- Particularment cal vigilar (però no únicament!):
- Que utilitzi LDAP com a passdb backend.
- Segueix les passes a la Guia Ubuntu per configurar Samba-LDAP.
- La directiva clau de smb.conf és aquesta:
passdb backend = ldapsam:ldap://localhost/
- Afegir els sufixos necessaris a la configuració ldap per cadascuna de les OU (unitats organitzatives), per exemple:
ldap user suffix = ou=Usuaris
- OJU: Desactiveu el TLS. Com que tenim Samba i LDAP a la mateixa màquina no cal encriptar la comunicació:
ldap ssl = off
Afegir admin password a secrets.tdb[modifica]
Per tal que Samba es pugui connectar a la BBDD LDAP necessita la contrasenya (l'emmagatzema en secrets.tdb). Si no fem això, el daemon smbd no arrencarà bé i als arxius de log ens donarà un error sobre secrets.tdb.
Assegureu-vos que teniu ben entrat el DN (Distinguised Name) de l'usuari admin a /etc/samba/smb.conf
ldap admin dn = cn=admin,dc=domini,dc=local
Afegim la contrasenya a secrets.tdb:
# smbpasswd -W
I reinicieu el servei per seguir:
# service smbd restart
Configurem smbldap-tools[modifica]
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 smbldap_bind.conf i smbldap.conf i poseu-hi els valors pertinents al vostre domini: (potser és més fàcil deshabilitant TLS).
- DN del admin
- SID (identificador del servidor Samba). El pots saber amb la comanda:
# net getlocalsid
- masterLDAP="ldap://localhost/"
- ldapTLS="0"
La comanda que abans no ens ha funcionat, ara sí que la podem executar. Així se'ns crearan les estructures necessàries de Samba dins de LDAP:
# smbldap-populate
Testejem, per exemple, afegir una màquina nova (necessari per afegir Windows al domini):
# smbldap-useradd -t 0 -w "makina1"
Si se'ns queixés alguna d'aquestes comandes (un altre bug) de que no pot trobar els següents GID i UID: Failed to find sambaUnixIdPool to get next gidNumber
, es pot solucionar afegint 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'objectes Samba[modifica]
Podem afegir usuaris amb la comanda de ldap-tools:
# smbldap-useradd -a -P <usuari>
Al crear usuaris podem tenir problemes amb el canvi de contrasenya. Si fos el cas tenim alternatives:
- 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>
Seguretat[modifica]
Afegir encriptació TLS a LDAP[modifica]
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
Deshabilitar anonymous bind[modifica]
Convé deshabilitar el login anonymous a la BBDD LDAP. Per defecte està activat, i qualsevol pot tafanejar els usuaris. No podrà veure les contrasenyes ni modificar res, però podrà veure la resta de dades personals, cosa que no és raonable en un sistema segur.
Aquest post explica com deshabilitar els anonymous login, la solució que m'ha funcionat és la 2a, la que utilitza # ldpamodify -Q -Y EXTERNAL ...
.
Configurem Linux per veure els grups LDAP[modifica]
Inicialment, el sistema operatiu no veu els grups i usuaris de LDAP. Podeu comprovar-ho amb
$ getent group $ 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
I instal·lar la llibreria libnss-ldap (us demanarà configurar els paràmetres ldap-auth-config):
# apt-get install libnss-ldap
Si alguna cosa ha anat malament, pots reconfigurar el paquet amb:
# dpkg-reconfigure ldap-auth-config
Torneu a executar les comandes anteriors i veureu com als grups ara se'ns afegeixen els del LDAP.
$ getent group
...i hauries de veure els nous grups "Domain Users" i demés.
Ara ja estem preparats per afegir clients!!
Clients Windows i canvi de contrasenya[modifica]
PER FI!! Pots afegir clients Windows normalment al domini. Comprova que pots logar-te amb un usuari del domini.
Comprova que pots canviar la contrasenya de l'usuari fent CTRL+ALT+SUPR
Si dóna un error al canviar la contrasenya, repassa el smb.conf i assegura't que NOMES hi ha activa la línia
ldap passwd sync = yes
Per tant, COMENTA la resta de paràmetres de les passwords, o no funcionarà (assegura't de repassar tota la secció [global]):
#unix passwd sync = yes #passwd program = sudo /usr/sbin/smbldap-passwd %u #passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . #pam password change = no
Configurant Samba 2[modifica]
Si tot ha anat bé, no hem de fer res d'aquesta secció. Fent un
# smbldap-populate
s'hauria de crear tota l'estructura necessària per treballar. Tot així, deixo aquestes indicacions per si alguna cosa no anés bé.
Crear objecte sambaDomain al LDAP[modifica]
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.
Afegim propietats al sambaDomain[modifica]
Busca a les propietats de l'objecte sambaDomain i afegeix-li la object class sambaUnixIdPool.
Omple els GID i UID amb nombres pertinents (p.ex. 500 i 1500).
Organizational Units[modifica]
Habitualment es sol estructurar el directori segons l'esquema típic amb 3 o 4 OU's (Organizational Units), tot i que pot diferir:
- Groups
- Machines
- Users
- Domains (en el nostre cas no crearem aquesta OU ja que el domini el tenim a l'arrel)
És important que aquest esquema quadri amb els prefixes i sufixes que hem configurat a la secció LDAP dels arxius:
- /etc/samba/smb.conf
- /etc/smbldap-tools/smbldap.conf
Creació de grups[modifica]
A partir d'aquí caldria afegir els grups (haurien de ser Samba Group Mapping):
grup | groupType | GID (gidNumber) | sambaSID* |
---|---|---|---|
Domain Admins | 2 | 512 | S-1-5-21-1681675730-4274209261-388585976-512 |
Domain Users | 2 | 513 | S-1-5-21-1681675730-4274209261-388585976-513 |
Domain Guests | 2 | 514 | S-1-5-21-1681675730-4274209261-388585976-514 |
Domain Computers | 2 | 515 | S-1-5-21-1681675730-4274209261-388585976-515 |
Administrators | 5 | 544 | S-1-5-21-1681675730-4274209261-388585976-544 |
* = Hem de posar el localSID del domini pertinent (el de la vostra màquina vist a l'apartat anterior)
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[modifica]
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>
Troubleshooting[modifica]
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:
# smbpasswd -W
PROBLEMA: (log.smbd) 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)
PROBLEMA: Apareixen 2 sambaDomainName a l'arrel del DIT LDAP.
DIAGNÒSTIC: Normalment un el crea smbldap-populate
i l'altre el crea el smbd
quan arrenca i no troba l'objecte com a ell li agrada. Pot comportar errors.
SOLUCIÓ: Esborrar els dos elements, reiniciar el smbd
i omplir de nou les dades que faltin al sambaDomainName. En particular cal afegir-li l'object class sambaUnixIdPool
...