https://manuais.iessanclemente.net/index.php?title=Administraci%C3%B3n_de_unidades_organizativas,_usuarios_e_grupos_en_LDAP_con_ldap-utils&feed=atom&action=historyAdministración de unidades organizativas, usuarios e grupos en LDAP con ldap-utils - Historial de revisiones2024-03-28T15:38:55ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Administraci%C3%B3n_de_unidades_organizativas,_usuarios_e_grupos_en_LDAP_con_ldap-utils&diff=62937&oldid=prevCarrion: /* Grupos: exercicio para o/a lector/a */2017-10-26T05:16:53Z<p><span dir="auto"><span class="autocomment">Grupos: exercicio para o/a lector/a</span></span></p>
<p><b>Página nueva</b></p><div>==Introdución==<br />
*Neste apartado imos administrar o directorio ldap facendo uso das utilidades de '''ldap-utils''' para poder administrar o servidor LDAP: introducir, modificar, borrar, buscar e extraer información, mantelo en óptimo funcionamento, etc.<br />
<br />
*Na imaxe amósase cales son esas utilidades, das cales usaremos: ldapadd, ldapdelete, ldapmodify, ldappasswd e ldapsearch. Este último xa o vimos no apartado anterior. <br />
*Lembrar que non existe un comando ldap... senón que se escribiu ldap e logo premeuse a tecla TAB 2 veces para ver que comandos comezan por ldap...<br />
[[Image:Dl_2014_slapd_30.jpeg|500px]]<br />
<br />
<br />
<br />
<br />
*Na seguinte imaxe amosamos os usuarios e grupos cos que imos traballar neste apartado e nos seguintes.<br />
*Neste apartado traballaremos con:<br />
**usuarios: '''sol''' e '''noe'''<br />
**grupos: '''g-usuarios''' e os relacionados cos '''profes'''.<br />
[[Image:00_Dominios_Linux_parte_01_Usuarios.jpg|600px]]<br />
*Observar:<br />
**Onde pon (1º) indica ese usuario ten ese grupo por '''grupo principal ou primario'''.<br />
**Todos os usuarios teñen como grupo primario ''g-usuarios'', independentemente de se é profesor/a ou alumnado.<br />
**Para todo '''curso''' hai dous grupos, <br />
***''g-<curso>-profes'': terá como membros ao profesorado dese curso<br />
***''g-<curso>-alum'': terá como membros ao alumnado dese curso<br />
**Todo usuario pertence como mínimo a tres grupos:<br />
*** ''g-usuarios'' obrigatoriamente<br />
*** ''g-<curso>-<tipo usuario>''<br />
*** ''g-<tipo de usuario>'' (''profes'' ''ou alum'')<br />
**Esta organización é pensada para cando xestionemos os permisos nas carpetas na Parte III do curso.<br />
**A profesora '''sol''' é profesora nos dous cursos.<br />
**O grupos comezan coa letra '''g-''', para á hora de buscalos entre todos os grupos locais e de LDAP poder ter todos os grupos que creamos por nós máis fáciles de localizar. Todos son '''g-algo'''.<br />
<br />
<br />
<br />
*Finalmente, a seguinte imaxe amosa as Unidades Organizativas (OU) coas que imos traballar e representa algúns dos usuarios e grupos da táboa anterior. <br />
[[Image:00_Dominios_Linux_LDAP_parte_01_B.jpg|600px]]<br />
<br />
<br><br />
<div style="margin:0; background:#E6ECFF; font-size:100%; border:1px solid #cccccc; text-align:left; padding:0.2em 0.4em; -moz-border-radius:6px">[[Imagen:aprende.png|left]]'''LEMBRA...'''<br />
Antes de comezar con esta sección é aconsellable que o lector/a domine a xestión de usuarios en GNU/Linux. Pódese atopar axuda na sección de [[Usuarios e grupos en Ubuntu]] do curso [[Curso Platega: Ubuntu Desktop. Un sistema dual (MS Windows / GNU/Linux) ]]. <br />
</div><br />
<br />
== Ferramentas de ldap-utils ==<br />
*Indicar que estas ferramentas tamén se poden instalar en calquera equipo cliente e permite administrar o servidor LDAP, só que non podemos usar a ''uri'' '''ldapi:///''' e temos que usar para conectarnos a el '''ldap://servidor''' ou '''ldaps://servidor:636''' se o servizo seguro está configurado no servidor e no cliente.<br />
<br />
*Como indicamos, o paquete ''ldap-utils'' contén varios comandos útiles para manexar a información almacenada no directorio LDAP. Algúns dos máis destacables son:<br />
<br />
* '''ldapsearch''': Como xa vimos nun punto do apartado anterior: ([http://informatica.iessanclemente.net/manuais/index.php/Instalaci%C3%B3n_servidor_LDAP,_ldap-utils:_ldapsearch#Consultar_a_BD:_ldapsearch Consultar a BD: ldapsearch]) permite buscar información no directorio, devolvendo o resultado da busca en formato LDIF. Para facer a busca, poderemos indicarlle o filtro polo que queremos buscar; por exemplo '(uid=xyz)' buscará as entradas que teñan un atributo ''uid'' co valor ''xyz''. Tamén lle podemos indicar despois os atributos que queremos ver de cada entrada atopada no resultado da busca. Os parámetros máis importantes xa vistos antes son:<br />
** '''-x''': usar autenticación simple.<br />
** '''-Y ''EXTERNAL''''': usa autenticación '''SASL''' (Simple Authentication and Security Layer - capa de seguridade e autenticación simple)<br />
***O mecanismo de SASL que usamos neste caso é '''EXTERNAL''', onde a autenticación está implícita no contexto, isto é, o cliente e servidor teñen instalados uns certificados para autenticarse un contra o outro. Neste caso o cliente (ldapsearch) e o servizo (slapd) están no mesmo equipo en dserver00, co cal eses certificados xa están no equipo.<br />
***Nos seguintes enlaces hai máis información sobre este tipo de autenticación:<br />
****http://es.wikipedia.org/wiki/SASL<br />
****http://www.openldap.org/doc/admin21/sasl.html<br />
****http://www.openldap.org/doc/admin21/tls.html<br />
** '''-D ''dn''''': dn para conectarse ao LDAP indicando o nome de usuario co que nos imos conectar.<br />
** '''-w ''contrasinal''''': Indicar o contrasinal para conectarse ao LDAP.<br />
** '''-W''': Obrigamos a que o comando pida o contrasinal para conectarse ao LDAP en lugar de recibilo como parámetro.<br />
**'''-H''' ''ldapuri''''': Especificar a [http://es.wikipedia.org/wiki/Uniform_Resource_Identifier URI] coa que nos imos conectar ao servidor ldap. Por exemplo ldap://localhost ou ldapi://<br />
** '''filtro''' indica que nos devolva as entradas que coincidan cos valores dos atributos que indicamos no filtro.<br />
**'''-b ''base de busca''''': para indicar en que obxecto da árbore comezar a buscar <br />
**'''-s''' ''base|one|sub''''': indica se queremos que nos devolva os atributos e valores:<br />
***'''base''': só do obxecto que estamos consultado<br />
***'''one''': só dos obxectos que están un nivel por debaixo do obxecto consultado.<br />
***'''sub''': do obxecto consultado e de toda a súa subárbore. É o valor por defecto.<br />
<br />
<br />
<br />
* '''ldapadd''', '''ldapmodify''': Os dous comandos enlazan con mesmo executable, polo que realmente fan a mesma función de engadir ou modificar entradas no LDAP (''ldapadd'' equivale a ''ldapmodify -a''). Os parámetros máis importantes son (moitos deles vistos en ldapsearch):<br />
** '''-x''': usar autenticación simple.<br />
** '''-Y ''EXTERNAL''''': usa autenticación '''SASL'''<br />
** '''-D ''dn''''': dn para conectarse ao LDAP indicando o nome de usuario co que nos imos conectar.<br />
** '''-w ''contrasinal''''': Indicar o contrasinal para conectarse ao LDAP.<br />
** '''-W''': Obrigamos a que o comando pida o contrasinal para conectarse ao LDAP en lugar de recibilo como parámetro.<br />
**'''-H''' ''ldapuri''''': Especificar a [http://es.wikipedia.org/wiki/Uniform_Resource_Identifier URI] coa que nos imos conectar ao servidor ldap. Por exemplo ldap://localhost ou ldapi://<br />
** '''filtro''' indican que nos devolva as entradas que coincidan cos valores dos atributos que indicamos no filtro.<br />
** '''-f ''ficheiro''''': Toma a información que se debe engadir, modificar ou borrar do ''ficheiro'' en lugar da entrada estándar<br />
***Na páxina do manual do comando (http://linux.die.net/man/1/ldapadd) explica o formato deste ficheiro para engadir, modificar e borrar entradas.<br />
***Basicamente o formato do ficheiro baséase no formato LDIF e ten a seguinte estrutura:<br />
<syntaxhighlight lang="bash"><br />
dn: cn=objectXX,dc=example,dc=com<br />
changetype: modify<br />
replace: mail<br />
mail: modme@example.com<br />
-<br />
add: title<br />
title: Grand Poobah<br />
-<br />
add: jpegPhoto<br />
jpegPhoto:< file:///tmp/modme.jpeg<br />
-<br />
delete: description<br />
-<br />
</syntaxhighlight><br />
<br />
<br />
* '''ldapdelete''': De sintaxe similar ao comando anterior, recibe como entrada (ou ben pola entrada estándar ou ben dun ficheiro) unha lista de dn's para eliminalas do LDAP.<br />
** '''-r''' para poder borrar unha rama que ten fillos de forma recursiva<br />
**No seguinte enlace está o manual do comando: http://linux.die.net/man/1/ldapdelete<br />
<br />
<br />
* '''ldappasswd''': É para cambiar o contrasinal dun usuario en LDAP. Sóese usar no servidor para o que root cambie o contrasinal dun usuario. De sintaxe similar ao comando anterior.<br />
**O comando '''passwd''' segue existindo nos clientes e é o que debe seguir sendo usado polos usuarios normais, pois xa hai utilidades que se encargan de enlazar co LDAP para que sexa aí onde se reflictan os cambios.<br />
**Cando cambiemos o contrasinal sempre imos deixar o mesmo que tiñamos '''abc123.''', para non esquecerse!!!.<br />
<br />
==Administración de Unidades Organizativas (OU)==<br />
*O seguinte exemplo amosa o mínimo que debe conter un ficheiro base para manexar as OUs.<br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
#ModeloOU.ldif<br />
dn: ou=exemplo-unidade-organizativa,dc=exemplo,dc=local<br />
objectClass: organizationalUnit<br />
ou: exemplo-unidade-organizativa<br />
</syntaxhighlight><br />
<br />
*Como sabemos da teoría o '''objectClass organizationalUnit''' defínese no '''esquema core'''.<br />
**Observar a liña 2, só se precisa indicar o atributo '''ou''' que é o que ten o exemplo anterior.<br />
**Os demais atributos son opcionais.<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="2"><br />
objectclass ( 2.5.6.5 NAME 'organizationalUnit' SUP top STRUCTURAL<br />
MUST ou<br />
MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $<br />
x121Address $ registeredAddress $ destinationIndicator $<br />
preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $<br />
telephoneNumber $ internationaliSDNNumber $<br />
facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $<br />
postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) )<br />
</syntaxhighlight><br />
<br />
*Neste apartado da árbore DIT imos crear as ramas todas as OUs excepto '''dam2''' e '''maquinas'''.<br />
[[Image:00_Dominios_Linux_LDAP_parte_01_B.jpg|600px]]<br />
<br />
===Crear Unidades Organizativas===<br />
<br />
*Creamos un ficheiro '''ou.ldif''' co seguinte contido.<br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
#Ficheiro ou.ldif<br />
<br />
#Puxemos un atributo opcional para a descrición.<br />
<br />
#Creamos a rama onde crearemos outras OUs para albergar usuarios.<br />
dn: ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: usuarios<br />
description: OU para almacenar usuarios.<br />
<br />
<br />
#Creamos a rama profes DENTRO da rama usuarios.<br />
#O nome da "ou" está mal para ser modificado despois.<br />
#A descrición non está para ser engadida despois.<br />
#Hai un atributo street que logo borraremos.<br />
dn: ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: profe<br />
street: Rua Borrar n 3 (non usar tiles)<br />
</syntaxhighlight><br />
<br />
<br />
<br />
e executamos o comando:<br />
<syntaxhighlight lang="bash"><br />
ldapadd -D cn=admin,dc=iescalquera,dc=local -W -f ou.ldif<br />
Enter LDAP Password:<br />
adding new entry "ou=usuarios,dc=iescalquera,dc=local"<br />
<br />
adding new entry "ou=profes,ou=usuarios,dc=iescalquera,dc=local"<br />
</syntaxhighlight><br />
*Se no ficheiro '''ou.ldif''' se atopa un erro nunha entrada non se segue coas seguintes, salvo que se use o parámetro '''-c'''.<br />
<br />
<br />
*Comprobamos o efecto da execución da instrución anterior.<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="1,5,19-20"><br />
ldapsearch -x -b ou=usuarios,dc=iescalquera,dc=local<br />
# extended LDIF<br />
#<br />
# LDAPv3<br />
# base <ou=usuarios,dc=iescalquera,dc=local> with scope subtree<br />
# filter: (objectclass=*)<br />
# requesting: ALL<br />
#<br />
<br />
# usuarios, iescalquera.local<br />
dn: ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: usuarios<br />
description: OU para almacenar usuarios.<br />
<br />
# profes, usuarios, iescalquera.local<br />
dn: ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: profe<br />
ou: profes<br />
street: Rua Borrar n 3 (non usar tiles)<br />
<br />
# search result<br />
search: 2<br />
result: 0 Success<br />
<br />
# numResponses: 3<br />
# numEntries: 2<br />
</syntaxhighlight><br />
*Observar nas liñas 19-20 como ao equivocarnos na ou que non coincidía coa do dn, creou tamén a ou do dn. Pronto o arranxaremos.<br />
<br />
===Modificar Unidades Organizativas===<br />
<br />
*Creamos un ficheiro '''ou_modif.ldif''' co seguinte contido.<br />
*Imos realizar operacións na OU profes.<br />
**Cambiar o valor do atributo ''ou''<br />
**Engadirlle unha descrición<br />
**Eliminar a unha rúa. <br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
#Ficheiro ou_modif.ldif<br />
<br />
#Indicamos o obxecto que desexamos modificar<br />
dn: ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
changetype: modify<br />
replace: ou<br />
ou: profes<br />
-<br />
add: description<br />
description: OU para almacenar usuarios profes.<br />
-<br />
delete: street<br />
</syntaxhighlight><br />
<br />
<br />
*Executamos o seguinte comando:<br />
'''ldapadd -D cn=admin,dc=iescalquera,dc=local -W -f ou_modif.ldif'''<br />
''Enter LDAP Password:''<br />
''modifying entry "ou=profes,ou=usuarios,dc=iescalquera,dc=local"''<br />
<br />
<br />
*Observamos o efecto da instrución anterior.<br />
*Observar que só temos un atributo ''ou'', que non está o atributo ''street'' e si ''description''.<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="1,5,13,14"><br />
ldapsearch -x -b ou=profes,ou=usuarios,dc=iescalquera,dc=local <br />
# extended LDIF<br />
#<br />
# LDAPv3<br />
# base <ou=profes,ou=usuarios,dc=iescalquera,dc=local> with scope subtree<br />
# filter: (objectclass=*)<br />
# requesting: ALL<br />
#<br />
<br />
# profes, usuarios, iescalquera.local<br />
dn: ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: profes<br />
description: OU para almacenar usuarios profes.<br />
<br />
# search result<br />
search: 2<br />
result: 0 Success<br />
</syntaxhighlight><br />
<br />
=== Eliminar Unidades Organizativas ===<br />
*Para eliminar unidades organizativas podemos usar:<br />
**'''ldapadd''', onde lle pasamos o ficheiro cos DNs dos obxectos e a función a realizar con eles (eliminar).<br />
**'''ldapdelete''', onde lle podemos pasar o ficheiro directamente cos DNs dos obxectos a eliminar ou mesmo podemos indicarllos por consola.<br />
<br />
*'''Exemplo 1: ldapadd'''<br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
#Ficheiro ou_borrar1.ldif<br />
<br />
<br />
#Debemos borrar antes os obxectos fillos que o pai.<br />
#Non o imos facer para propiciar un erro<br />
<br />
#dn: ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
#changetype: delete<br />
<br />
<br />
dn: ou=usuarios,dc=iescalquera,dc=local<br />
changetype: delete<br />
</syntaxhighlight><br />
<br />
*Executamos o seguinte comando e vemos que non nos borra a ''ou=usuarios'' porque contén fillos.<br />
*Se descomentamos as liñas anteriores referentes á ''ou=profes'' o resultado sería positivo.<br />
'''ldapadd -D cn=admin,dc=iescalquera,dc=local -W -f ou_borrar1.ldif'''<br />
''Enter LDAP Password:''<br />
''deleting entry "ou=usuarios,dc=iescalquera,dc=local"''<br />
''ldap_delete: Operation not allowed on non-leaf (66)''<br />
'' additional info: subordinate objects must be deleted first''<br />
<br />
<br />
<br />
<br />
*'''Exemplo 2: ldapdelete'''<br />
**Podemos crear un ficheiro semellante ao seguinte onde só indicamos os DNs dos obxectos a borrar.<br />
**Igual que antes hai que indicar os obxectos fillos ante ca o pai. <br />
**Se se usa o parámetro '''-r''' podemos indicar só o pai e vai borrar os obxectos fillos en modo recursivo.<br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
#Ficheiro ou_borrar2.ldif<br />
<br />
#Debemos borrar antes os obxectos fillos que o pai.<br />
#Non o imos facer para propiciar un erro<br />
<br />
dn: ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
dn: ou=usuarios,dc=iescalquera,dc=local<br />
</syntaxhighlight><br />
<br />
*Nesta ocasión non imos usar o ficheiro anterior, que se cargaría con -f igual que en ldapadd.<br />
*Imos borrar toda á arbore de usuarios en modo recursivo (-r) coa instrución:<br />
'''ldapdelete -D cn=admin,dc=iescalquera,dc=local -W "ou=usuarios,dc=iescalquera,dc=local" -r'''<br />
''Enter LDAP Password: ''<br />
<br />
=== Unidades Organizativas: exercicio para o/a lector/a ===<br />
*Todo o visto até agora é aplicable a calquera tipo de obxecto do ldap (usuarios, grupos, máquinas, etc)<br />
<br />
<br />
*Agora o lector ou lectora debe ser quen de crear un ficheiro '''ou_final.ldif''' coas unidades organizativas seguintes:<br />
**dn: ou=usuarios,dc=iescalquera,dc=local<br />
**dn: ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
**dn: ou=grupos,dc=iescalquera,dc=local<br />
**dn: ou=alum,ou=usuarios,dc=iescalquera,dc=local<br />
**dn: ou=dam1,ou=alum,ou=usuarios,dc=iescalquera,dc=local<br />
*Todas elas con descrición.<br />
<br />
*Observar que non se crea a rama '''dam2''' dentro de '''alum''' nin a rama '''maquinas'''. Iso é para deixar cousas sen facer e realizalas a posteriori con outras utilidades.<br />
<br />
*No directorio deberán estar os seguintes obxectos: <br />
<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="1,5,6,23-26,29-32,35-38"><br />
ldapsearch -x -b dc=iescalquera,dc=local objectClass=organizationalUnit<br />
# extended LDIF<br />
#<br />
# LDAPv3<br />
# base <dc=iescalquera,dc=local> with scope subtree<br />
# filter: objectClass=organizationalUnit<br />
# requesting: ALL<br />
#<br />
<br />
# usuarios, iescalquera.local<br />
dn: ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: usuarios<br />
description: OU para almacenar usuarios.<br />
<br />
# profes, usuarios, iescalquera.local<br />
dn: ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: profes<br />
description: OU para almacenar usuarios/as profes<br />
<br />
# grupos, iescalquera.local<br />
dn: ou=grupos,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: grupos<br />
description: OU para almacenar os grupos<br />
<br />
# alum, usuarios, iescalquera.local<br />
dn: ou=alum,ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: alum<br />
description: OU para almacenar os alumnos<br />
<br />
# dam1, alum, usuarios, iescalquera.local<br />
dn: ou=dam1,ou=alum,ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: dam1<br />
description: OU para almacenar os alumnos de DAM1<br />
</syntaxhighlight><br />
<br />
==Administración de grupos==<br />
*Seguimos agora coa xestión dos grupos.<br />
<br />
*O seguinte exemplo amosa o mínimo que debe conter un ficheiro base para manexar Grupos.<br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
#ModeloGrupo.ldif<br />
dn:cn=exemplo-nome-grupo,ou=exemplo-unidade-organizativa,dc=exemplo, dc=local<br />
objectClass: posixGroup<br />
cn: exemplo-nome-grupo<br />
gidNumber: N-gid-Mellor-maior-de-9999<br />
</syntaxhighlight><br />
<br />
*Como vemos baséase no '''objectClass: posixGroup''' que se define no esquema '''NIS'''. <br />
**Obriga a ter 2 atributos: cn e gidNumber<br />
<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="4"><br />
objectclass ( 1.3.6.1.1.1.2.2 NAME 'posixGroup'<br />
DESC 'Abstraction of a group of accounts'<br />
SUP top STRUCTURAL<br />
MUST ( cn $ gidNumber )<br />
MAY ( userPassword $ memberUid $ description ) )<br />
</syntaxhighlight><br />
<br />
===Crear grupos===<br />
*Neste apartado, dentro de "dn: ou=grupos,dc=iescalquera,dc=local", imos crear os grupos:<br />
**'''g-usuarios''' <br />
**e os grupos relacionados cos profes.<br />
**Observar que cada grupo ten un ID, debemos poñelo de forma manual.<br />
**Se poñemos o mesmo ID a distintos grupos, ldap non vai controlar iso, pero logo teremos problemas cos usuarios e os grupos aos que pertencen.<br />
[[Image:00_Dominios_Linux_parte_01_Usuarios.jpg|600px]]<br />
<br />
<br />
*Creamos un ficheiro '''grupos.ldif''' co seguinte contido <br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
#Ficheiro grupos.ldif<br />
<br />
#Xa sabemos que se non se engade o atributo cn:g-usuarios este vaise crear igual tomado da entrada DN.<br />
#Quen o desexe pode engadir unha descrición.<br />
dn: cn=g-usuarios,ou=grupos,dc=iescalquera,dc=local<br />
objectClass: posixGroup<br />
cn: g-usuarios<br />
gidNumber: 10000<br />
</syntaxhighlight><br />
<br />
<br />
*Executamos o comando: <br />
'''ldapadd -D cn=admin,dc=iescalquera,dc=local -W -f grupos.ldif<br />
''Enter LDAP Password: <br />
''adding new entry "cn=g-usuarios,ou=grupos,dc=iescalquera,dc=local"<br />
<br />
<br />
<br />
*Observar as liñas 17-20 que indican que no directorio ldap xa está o grupo '''g-usuarios'''.<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="1,5,6,17-20"><br />
ldapsearch -x -b ou=grupos,dc=iescalquera,dc=local<br />
# extended LDIF<br />
#<br />
# LDAPv3<br />
# base <ou=grupos,dc=iescalquera,dc=local> with scope subtree<br />
# filter: (objectclass=*)<br />
# requesting: ALL<br />
#<br />
<br />
# grupos, iescalquera.local<br />
dn: ou=grupos,dc=iescalquera,dc=local<br />
objectClass: organizationalUnit<br />
ou: grupos<br />
description: OU para almacenar os grupos<br />
<br />
# g-usuarios, grupos, iescalquera.local<br />
dn: cn=g-usuarios,ou=grupos,dc=iescalquera,dc=local<br />
objectClass: posixGroup<br />
cn: g-usuarios<br />
gidNumber: 10000<br />
<br />
# search result<br />
search: 2<br />
result: 0 Success<br />
<br />
# numResponses: 3<br />
# numEntries: 2<br />
</syntaxhighlight><br />
<br />
===Modificar/Eliminar grupos===<br />
*Procédese igual que se viu nas Unidades Organizativas.<br />
<br />
===Grupos: exercicio para o/a lector/a===<br />
*O lector ou lectora debe ser quen de crear un ficheiro '''grupos_final.ldif''' coas entradas seguintes e apoiándose na táboa superior:<br />
**dn: cn=g-usuarios,ou=grupos,dc=iescalquera,dc=local<br />
**dn: cn=g-profes,ou=grupos,dc=iescalquera,dc=local<br />
**dn: cn=g-dam1-profes,ou=grupos,dc=iescalquera,dc=local<br />
**dn: cn=g-dam2-profes,ou=grupos,dc=iescalquera,dc=local<br />
<br />
*O atributo descrición é opcional.<br />
*Lembrar que cando se execute '''ldapadd''' pódese engadir o parámetro '''-c''' por se atopa algunha entrada dentro do directorio que non pare e siga procesando o ficheiro.<br />
<br />
*Unha vez introducidas as entradas no ldap débese obter o seguinte (lembrar que facía o parámetro -s):<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="1,5"><br />
ldapsearch -x -b ou=grupos,dc=iescalquera,dc=local -s one<br />
# extended LDIF<br />
#<br />
# LDAPv3<br />
# base <ou=grupos,dc=iescalquera,dc=local> with scope oneLevel<br />
# filter: (objectclass=*)<br />
# requesting: ALL<br />
#<br />
<br />
# g-usuarios, grupos, iescalquera.local<br />
dn: cn=g-usuarios,ou=grupos,dc=iescalquera,dc=local<br />
objectClass: posixGroup<br />
cn: g-usuarios<br />
gidNumber: 10000<br />
<br />
# g-profes, grupos, iescalquera.local<br />
dn: cn=g-profes,ou=grupos,dc=iescalquera,dc=local<br />
objectClass: posixGroup<br />
gidNumber: 10001<br />
cn: g-profes<br />
<br />
# g-dam1-profes, grupos, iescalquera.local<br />
dn: cn=g-dam1-profes,ou=grupos,dc=iescalquera,dc=local<br />
objectClass: posixGroup<br />
gidNumber: 10002<br />
cn: g-dam1-profes<br />
<br />
# g-dam2-profes, grupos, iescalquera.local<br />
dn: cn=g-dam2-profes,ou=grupos,dc=iescalquera,dc=local<br />
objectClass: posixGroup<br />
gidNumber: 10003<br />
cn: g-dam2-profes<br />
</syntaxhighlight><br />
<br />
==Administración de usuarios==<br />
*O seguinte exemplo amosa o mínimo que debe conter un ficheiro base para manexar Usuarios. <br />
<br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
#ModeloUsuario.ldif<br />
dn: uid=usuario,ou=ou_exemplo,dc=exemplo,dc=local<br />
objectClass: inetOrgPerson<br />
objectClass: posixAccount<br />
objectClass: shadowAccount<br />
uid: usuario<br />
sn: apelido<br />
givenName: Nome de pila<br />
cn: Nome Completo<br />
displayName: Nome para amosar<br />
uidNumber: 10000<br />
gidNumber: 10000<br />
userPassword: contrasinal<br />
gecos: Informacion sobre o usuario (Opcional. Sen tiles)<br />
loginShell: /bin/bash<br />
homeDirectory: /home/usuario<br />
mail: usuario@exemplo.local<br />
initials: UA<br />
<br />
#As seguintes entradas son opcionais, e serven para controlar a caducidade do contrasinal.<br />
shadowExpire: -1<br />
shadowFlag: 0<br />
shadowWarning: 7<br />
shadowMin: 8<br />
shadowMax: 999999<br />
shadowLastChange: 10877<br />
</syntaxhighlight><br />
<br />
*Como vimos no esquema '''NIS''' están os '''objectClass: posixAccount''' e '''shadowAccount'''<br />
*Nas liñas 4 e 10 indican cales son os atributos obrigatorios. Neste caso ''uid'' é obrigatorio para as dúas clases de obxectos.<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="4,10"><br />
objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount'<br />
DESC 'Abstraction of an account with POSIX attributes'<br />
SUP top AUXILIARY<br />
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )<br />
MAY ( userPassword $ loginShell $ gecos $ description ) )<br />
<br />
objectclass ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount'<br />
DESC 'Additional attributes for shadow passwords'<br />
SUP top AUXILIARY<br />
MUST uid<br />
MAY ( userPassword $ shadowLastChange $ shadowMin $<br />
shadowMax $ shadowWarning $ shadowInactive $<br />
shadowExpire $ shadowFlag $ description ) )<br />
</syntaxhighlight><br />
<br />
<br />
*E no esquema '''inetOrgPerson''' está a ''objectClass'' do mesmo nome.<br />
*Non hai atributos obrigatorios.<br />
*Nas liñas 8 e 9 están 3 dos atributos do exemplo: ''displayName'', ''givenName'' e ''initials''.<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="8-9"><br />
objectclass ( 2.16.840.1.113730.3.2.2<br />
NAME 'inetOrgPerson'<br />
DESC 'RFC2798: Internet Organizational Person'<br />
SUP organizationalPerson<br />
STRUCTURAL<br />
MAY (<br />
audio $ businessCategory $ carLicense $ departmentNumber $<br />
displayName $ employeeNumber $ employeeType $ givenName $<br />
homePhone $ homePostalAddress $ initials $ jpegPhoto $<br />
labeledURI $ mail $ manager $ mobile $ o $ pager $<br />
photo $ roomNumber $ secretary $ uid $ userCertificate $<br />
x500uniqueIdentifier $ preferredLanguage $<br />
userSMIMECertificate $ userPKCS12 )<br />
)<br />
</syntaxhighlight><br />
<br />
===Crear usuarios===<br />
*Neste apartado, dentro de '''dn: ou=profes,ou=usuarios,dc=iescalquera,dc=local''', imos crear os usuarios:<br />
**'''sol'''<br />
**'''noe''' <br />
*Observar que cada usuario ten un ID, debemos poñelo de forma manual. Se poñemos o mesmo ID a distintos usuarios, ldap non controla iso, pero logo teremos problemas cos usuarios.<br />
[[Image:00_Dominios_Linux_parte_01_Usuarios.jpg|600px]]<br />
<br />
*'''NOTA''': As tiles poden causar problemas ao copiar e pegar co cal, se non se desexa non é preciso usalas.<br />
<br />
*Creamos un ficheiro '''usuarios.ldif''' co seguinte contido <br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
#Ficheiro usuarios.ldif<br />
<br />
#Observar onde se poñen tiles e onde non. Non é preciso poñelas<br />
#Observar tamén que se indica o gid do grupo primario (10000 -> g-usuarios)<br />
#Finalmente indicase que o contrasinal nunca expira.<br />
<br />
dn: uid=sol,ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: inetOrgPerson<br />
objectClass: posixAccount<br />
objectClass: shadowAccount<br />
uid: sol<br />
sn: Lúa<br />
cn: Profe - Sol Lúa<br />
givenName: Sol<br />
displayName: Profe - Sol Lúa<br />
uidNumber: 10000<br />
gidNumber: 10000<br />
userPassword: abc123.<br />
gecos: Profe - Sol Lua<br />
loginShell: /bin/bash<br />
homeDirectory: /home/sol<br />
mail: sol@iescalquera.local<br />
initials: SL<br />
shadowExpire: -1<br />
</syntaxhighlight><br />
<br />
*Executamos o comando<br />
'''ldapadd -D cn=admin,dc=iescalquera,dc=local -W -f usuarios.ldif<br />
''Enter LDAP Password: <br />
''adding new entry "uid=sol,ou=profes,ou=usuarios,dc=iescalquera,dc=local"<br />
<br />
*Observar que aínda que indicamos que home do usuario é '''/home/sol''' non se vai crear. Iso arranxarémolo nas seguintes seccións e na parte III do curso.<br />
'''ls /home<br />
'' administrador lost+found<br />
<br />
===Engadir usuarios aos grupos secundarios===<br />
*Para engadir usuarios aos grupos secundarios debemos modificar cada grupo e engadir o atributo: '''memberUid''' co seu valor.<br />
*Engadiremos tantos atributos como usuarios desexemos que pertenzan a ese grupo como secundario.<br />
<br />
*Creamos o ficheiro '''grupos_secundarios.ldif<br />
<syntaxhighlight lang="bash" enclose="div" highlight=""><br />
#Ficheiro grupos_secundarios.ldif<br />
<br />
#Observar que os grupos sepáranse por unha liña en branco <br />
#Se tivéramos máis usuarios para un grupo seguiríamos poñendo: memberUid: usuario<br />
dn: cn=g-profes,ou=grupos,dc=iescalquera,dc=local<br />
changetype: modify<br />
add: memberUid<br />
memberUid:sol<br />
<br />
dn: cn=g-dam1-profes,ou=grupos,dc=iescalquera,dc=local<br />
changetype: modify<br />
add: memberUid<br />
memberUid:sol<br />
<br />
dn: cn=g-dam2-profes,ou=grupos,dc=iescalquera,dc=local<br />
changetype: modify<br />
add: memberUid<br />
memberUid:sol<br />
</syntaxhighlight><br />
<br />
*Executamos o comando<br />
'''ldapadd -D cn=admin,dc=iescalquera,dc=local -W -f grupos_secundarios.ldif -c<br />
''Enter LDAP Password: <br />
''modifying entry "cn=g-profes,ou=grupos,dc=iescalquera,dc=local"<br />
<br />
''modifying entry "cn=g-dam1-profes,ou=grupos,dc=iescalquera,dc=local"<br />
<br />
''modifying entry "cn=g-dam2-profes,ou=grupos,dc=iescalquera,dc=local"<br />
<br />
===Eliminar/modificar usuarios===<br />
*Faríase igual que coas Unidades Organizativas.<br />
*Pero aquí hai un detalle: se eliminamos un usuario non significa que se elimine a entrada correspondente nos grupos secundarios aos que pertenza ese usuarios.<br />
*Por tanto tamén habería que borrar a entrada ''memberUid'' nos grupos aos que pertence ese usuario, porque senón o sistema quedaría incoherente, pois o sistema deixa eliminar o usuario sen máis.<br />
<br />
===Usuarios: exercicio para o/a lector/a===<br />
*O lector ou lectora debe ser quen de crear un ficheiro '''usuarios_final.ldif''' para dar de alta aos seguintes usuarios (Observar a táboa superior):<br />
*Non é preciso poñer as tiles.<br />
**uid=sol,ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
**uid=noe,ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
*E crear un ficheiro '''grupos_secundarios_final.ldif''' para configurar os grupos secundarios aos que pertencen eses usuarios como se indica na táboa dos usuarios.<br />
<br />
*Unha vez realizados os procesos debemos obter:<br />
<br />
<br />
*'''Usuarios:'''<br />
**Notar que ldapsearch non amosa os caracteres UTF-8 (os que levan til, neste caso). Pero eses valores están ben almacenados.<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="1,5,20,38"><br />
ldapsearch -x -b ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
# extended LDIF<br />
#<br />
# LDAPv3<br />
# base <ou=profes,ou=usuarios,dc=iescalquera,dc=local> with scope oneLevel<br />
# filter: (objectclass=*)<br />
# requesting: ALL<br />
#<br />
<br />
# sol, profes, usuarios, iescalquera.local<br />
dn: uid=sol,ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: inetOrgPerson<br />
objectClass: posixAccount<br />
objectClass: shadowAccount<br />
uid: sol<br />
sn:: TMO6YQ==<br />
cn:: UHJvZmUgLSBTb2wgTMO6YQ==<br />
givenName: Sol<br />
displayName:: UHJvZmUgLSBTb2wgTMO6YQ==<br />
uidNumber: 10000<br />
gidNumber: 10000<br />
gecos: Profe - Sol Lua<br />
loginShell: /bin/bash<br />
homeDirectory: /home/sol<br />
mail: sol@iescalquera.local<br />
initials: SL<br />
shadowExpire: -1<br />
<br />
# noe, profes, usuarios, iescalquera.local<br />
dn: uid=noe,ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
objectClass: inetOrgPerson<br />
objectClass: posixAccount<br />
objectClass: shadowAccount<br />
uid: noe<br />
sn: Ras<br />
cn:: UHJvZmUgLSBOb8OpIFJhcw==<br />
givenName: Noe<br />
displayName:: UHJvZmUgLSBOb8OpIFJhcw==<br />
uidNumber: 10001<br />
gidNumber: 10000<br />
gecos: Profe - Noe Ras<br />
loginShell: /bin/bash<br />
homeDirectory: /home/noe<br />
mail: noe@iescalquera.local<br />
initials: NR<br />
shadowExpire: -1<br />
</syntaxhighlight><br />
<br />
<br />
<br />
*'''Grupos:'''<br />
*Fixarse nas liñas marcadas.<br />
<syntaxhighlight lang="bash" line enclose="div" highlight="1,5,20-21,28,35-36"><br />
ldapsearch -x -b ou=grupos,dc=iescalquera,dc=local<br />
# extended LDIF<br />
#<br />
# LDAPv3<br />
# base <ou=grupos,dc=iescalquera,dc=local> with scope oneLevel<br />
# filter: (objectclass=*)<br />
# requesting: ALL<br />
#<br />
<br />
# g-usuarios, grupos, iescalquera.local<br />
dn: cn=g-usuarios,ou=grupos,dc=iescalquera,dc=local<br />
objectClass: posixGroup<br />
cn: g-usuarios<br />
gidNumber: 10000<br />
<br />
# g-profes, grupos, iescalquera.local<br />
dn: cn=g-profes,ou=grupos,dc=iescalquera,dc=local<br />
objectClass: posixGroup<br />
gidNumber: 10001<br />
cn: g-profes<br />
memberUid: sol<br />
memberUid: noe<br />
<br />
# g-dam1-profes, grupos, iescalquera.local<br />
dn: cn=g-dam1-profes,ou=grupos,dc=iescalquera,dc=local<br />
objectClass: posixGroup<br />
gidNumber: 10002<br />
cn: g-dam1-profes<br />
memberUid: sol<br />
<br />
# g-dam2-profes, grupos, iescalquera.local<br />
dn: cn=g-dam2-profes,ou=grupos,dc=iescalquera,dc=local<br />
objectClass: posixGroup<br />
gidNumber: 10003<br />
cn: g-dam2-profes<br />
memberUid: sol<br />
memberUid: noe<br />
</syntaxhighlight><br />
<br />
==Cambiar o contrasinal dun usuario==<br />
*Se non se especifica o contrasinal o sistema xera un aleatoriamente<br />
'''ldappasswd -D cn=admin,dc=iescalquera,dc=local -W uid=sol,ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
''Enter LDAP Password: <br />
''New password: EL1U.58e<br />
<br />
*Co parámetro '''-S''' pódese especificar o contrasinal desexado para o usuario.<br />
'''ldappasswd -D cn=admin,dc=iescalquera,dc=local -W uid=sol,ou=profes,ou=usuarios,dc=iescalquera,dc=local -S<br />
''New password: <br />
''Re-enter new password: <br />
''Enter LDAP Password: <br />
<br />
*Nos dous casos tamén pide o contrasinal de admin para poder facer as modificacións no directorio.<br />
<br />
<br />
<br />
*Outra forma de cambiar o contrasinal sería creando un ficheiro ldif de modificacións <br />
dn: uid=sol,ou=profes,ou=usuarios,dc=iescalquera,dc=local<br />
changetype: modify<br />
replace: userPassword<br />
userPassword:novo contrasinal<br />
<br />
*E cargar o ficheiro con '''ldapadd'''.<br />
<br />
== Ferramentas incluídas co servidor LDAP ==<br />
* '''slapindex''': Este comando pode ser moi útil en caso de apagados accidentais do servidor LDAP, xa que é posible que os índices usados para acceder á información do directorio se corrompan, o que pode producir erros na busca ou inserción de información no directorio ou incluso que o servidor LDAP non poida arrancar. A función do comando é rexenerar os índices a partir da información almacenada no directorio, creando así de novo as estruturas necesarias para que o servizo LDAP funcione correctamente. <br />
<br />
<br />
*O comando debe executarse co mesmo usuario que executa o servidor LDAP (no caso de Debian/Ubuntu o usuario ''openldap''), xa que os ficheiros de índices que este comando crea só poderán ser modificados polo usuario que executa o comando e executalo con outro usuario podería dar problemas de permisos ao arrancar o servidor LDAP.<br />
'''root@dserver00:~# service slapd stop<br />
'' [ ok ] Stopping OpenLDAP: slapd.<br />
'''root@dserver00:~# su - openldap -s /bin/bash<br />
'''openldap@dserver00:~$ /usr/sbin/slapindex -v<br />
'' indexing id=00000001<br />
'' indexing id=00000002<br />
'' indexing id=00000014<br />
'' indexing id=00000015<br />
'' indexing id=00000016<br />
'' indexing id=00000017<br />
'' indexing id=00000018<br />
'' indexing id=00000019<br />
'' indexing id=0000001a<br />
'' indexing id=00000024<br />
'' indexing id=00000025<br />
'''openldap@dserver00:~$ exit<br />
'' logout<br />
'''root@dserver00:~# service slapd start<br />
'' [ ok ] Starting OpenLDAP: slapd.<br />
<br />
<br />
-- [[Usuario:Antonio|Antonio de Andrés Lema]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] --</div>Carrion