Posts Usuarios, grupos y ACLs en LDAP
Post
Cancel

Usuarios, grupos y ACLs en LDAP

  • Crea 10 usuarios con los nombres que prefieras en LDAP, esos usuarios deben ser objetos de los tipos posixAccount e inetOrgPerson. Estos usuarios tendrán un atributo userPassword
  • Crea 3 grupos en LDAP dentro de una unidad organizativa diferente que sean objetos del tipo groupOfNames. Estos grupos serán: comercial, almacen y admin
  • Añade usuarios que pertenezcan a: – Solo al grupo comercial – Solo al grupo almacen – Al grupo comercial y almacen – Al grupo admin y comercial – Solo al grupo admin
  • Modifica OpenLDAP apropiadamente para que se pueda obtener los grupos a los que pertenece cada usuario a través del atributo “memberOf”
  • Crea las ACLs necesarias para que los usuarios del grupo almacen puedan ver todos los atributos de todos los usuarios pero solo puedan modificar las suyas
  • Crea las ACLs necesarias para que los usuarios del grupo admin puedan ver y modificar cualquier atributo de cualquier objeto

Creamos las 2 unidades organizativas.

1
2
3
4
5
6
7
8
9
10
11
debian@croqueta:~$ nano asir/organizativas.ldif

dn: ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: organizationalUnit
ou: Group

dn: ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: organizationalUnit
ou: People

Añadimos las unidades:

1
2
3
4
5
6
debian@croqueta:~/asir$ ldapadd -x -D "cn=admin,dc=ernesto,dc=gonzalonazareno,dc=org" -f organizativas.ldif -W

Enter LDAP Password: 
adding new entry "ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

Añadimos las personas al siguiente fichero:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
debian@croqueta:~/asir$ nano users.ldif

dn: uid=juandi,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn:: SnVhbiBEaWVnbyBBYmFkw61hIE5vZ3VlcmEK
uid: juandi
uidNumber: 2001
gidNumber: 2500
homeDirectory: /home/juandi
loginShell: /bin/bash
userPassword: {SSHA}VglrKCl/cjco9Rtd1hMJeak3exlJCJlD
sn: abadia
mail: juandi@gmail.com
givenName: juandi

dn: uid=francisco,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn:: RnJhbmNpc2NvIEplc8O6cyBIdXrDs24gVmlsbGFyCg==
uid: francisco
uidNumber: 2002
gidNumber: 2501
homeDirectory: /home/francisco
loginShell: /bin/bash
userPassword: {SSHA}x6uuvLPwelprdhf/knMmMFjQJiLRVq1q
sn: huzon
mail: francisco@gmail.com
givenName: francisco

dn: uid=paco,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn:: RnJhbmNpc2NvIEd1aWxsZXJtbyBHYXJjw61hCg==
uid: paco
uidNumber: 2003
gidNumber: 2502
homeDirectory: /home/paco
loginShell: /bin/bash
userPassword: {SSHA}C0+XQSQ1N0Yzqn6tGcZmyiCYTcz1dYla
sn: guillermo
mail: paco@gmail.com
givenName: paco

dn: uid=victor,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn:: VsOtY3RvciBNYW51ZWwgUnVpego=
uid: victor
uidNumber: 2004
gidNumber: 2503
homeDirectory: /home/victor
loginShell: /bin/bash
userPassword: {SSHA}kdrLIPnG/JZJU6HEsGd5nYN6KLPEm5Ah
sn: ruiz
mail: victor@gmail.com
givenName: victor

dn: uid=carlos,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Carlos Hijano Martel
uid: carlos
uidNumber: 2005
gidNumber: 2504
homeDirectory: /home/carlos
loginShell: /bin/bash
userPassword: {SSHA}1/wUpb7o25xlgqWQFa7FdZUKIodTEjrx
sn: hijano
mail: carlos@gmail.com
givenName: carlos

dn: uid=ismael,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn:: SXNtYWVsIFNhbnRpYWdvIEVzdMOpdmV6Cg==
uid: ismael
uidNumber: 2006
gidNumber: 2505
homeDirectory: /home/ismael
loginShell: /bin/bash
userPassword: {SSHA}B2ISEFSRzZ0y4QS6IX+5VuIJ7vIQDHUn
sn: santiago
mail: ismael@gmail.com
givenName: ismael

dn: uid=luis,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn:: THVpcyBWw6F6cXVleiBBbGVqbwo=
uid: luis
uidNumber: 2007
gidNumber: 2506
homeDirectory: /home/luis
loginShell: /bin/bash
userPassword: {SSHA}mvDyqfda020FVzrx7+So59W8p/o73qtD
sn: vazquez
mail: luis@gmail.com
givenName: luis

dn: uid=juanan,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: SnVhbiBBbnRvbmlvIFJlaWZzIFJhbcOtcmV6Cg==
uid: juanan
uidNumber: 2008
gidNumber: 2507
homeDirectory: /home/juanan
loginShell: /bin/bash
userPassword: {SSHA}FgJv3yW+OIDG2YZA6Ey1t/50Kin6D5T/
sn: reifs
mail: juanan@gmail.com
givenName: juanan

dn: uid=juanlu,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn:: SnVhbiBMdWlzIE1pbGzDoW4gSGlkYWxnbwo=
uid: juanlu
uidNumber: 2009
gidNumber: 2508
homeDirectory: /home/juanlu
loginShell: /bin/bash
userPassword: {SSHA}OPU9XouuaBmkqvqS+jwibsquHZDQKLfq
sn: millan
mail: juanlu@gmail.com
givenName: juanlu

dn: uid=alejandro,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Alejandro Morales Gracia
uid: alejandro
uidNumber: 2010
gidNumber: 2509
homeDirectory: /home/alejandro
loginShell: /bin/bash
userPassword: {SSHA}i7tt+PYy9JJRU+VMcHcEFD+I3OpuhLSZ
sn: morales
mail: alejandro@gmail.com
givenName: alejandro

Añadimos los usuarios:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
debian@croqueta:~/asir$ ldapadd -x -D cn=admin,dc=ernesto,dc=gonzalonazareno,dc=org -W -f users.ldif 

Enter LDAP Password: 
adding new entry "uid=juandi,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "uid=francisco,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "uid=paco,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "uid=victor,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "uid=carlos,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "uid=ismael,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "uid=luis,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "uid=juanan,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "uid=juanlu,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "uid=alejandro,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org" 

debian@croqueta:~/asir$ 

Creación del grupo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
debian@croqueta:~/asir$ sudo nano grupos.ldif

dn: cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: groupOfNames
cn: comercial
member:

dn: cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: groupOfNames
cn: almacen
member:

dn: cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: groupOfNames
cn: admin
member:

Lo añadimos al LDAP:

1
2
3
4
5
6
7
8
9
10
debian@croqueta:~/asir$ ldapadd -x -D "cn=admin,dc=ernesto,dc=gonzalonazareno,dc=org" -f grupos.ldif -W

Enter LDAP Password: 
adding new entry "cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

debian@croqueta:~/asir$ 

Añadimos los usuario para que pertenezcan a los diferentes grupos que hemos creado previamente.

  • Solo al grupo comercial
  • Solo al grupo almacen
  • Al grupo comercial y almacen
  • Al grupo admin y comercial
  • Solo al grupo admin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
debian@croqueta:~/asir$ nano gruposusers.ldif

dn: cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
changetype:modify
replace: member
member: uid=juandi,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org

dn: cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
changetype:modify
replace: member
member: uid=francisco,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org

dn: cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=victor,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org

dn: cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=victor,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org

dn: cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
changetype:modify
replace: member
member: uid=carlos,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org

dn: cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=carlos,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org

dn: cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=luis,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org

Agregamos los cambios al LDAP:

debian@croqueta:~/asir$ ldapmodify -x -D "cn=admin,dc=ernesto,dc=gonzalonazareno,dc=org" -f gruposusers.ldif -W
Enter LDAP Password: 
modifying entry "cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

debian@croqueta:~/asir$ 

Modificamos OpenLDAP.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
debian@croqueta:~/asir$ nano memberof_load_configure.ldif

dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
objectclass: top
olcModuleLoad: memberof.la
olcModulePath: /usr/lib/ldap

dn: olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

Relación entre ellos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
debian@croqueta:~/asir$ nano refint_configure.ldif

dn: cn=module,cn=config
cn: module
objectclass: olcModuleList
objectclass: top
olcmoduleload: refint.la
olcmodulepath: /usr/lib/ldap

dn: olcOverlay={1}refint,olcDatabase={1}mdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: {1}refint
olcRefintAttribute: memberof member manager owner

Añadimos los cambios a LDAP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
debian@croqueta:~/asir$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f memberof_load_configure.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config" 

adding new entry "olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config" 

debian@croqueta:~/asir$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f refint_configure.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config" 

adding new entry "olcOverlay={1}refint,olcDatabase={1}mdb,cn=config" 

debian@croqueta:~/asir$ 

Borramos los grupos y lo añadimos de nuevo para que se guarden los cambios.

1
2
3
4
5
debian@croqueta:~/asir$ sudo ldapdelete -x -D "cn=admin,dc=ernesto,dc=gonzalonazareno,dc=org" 'cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org' -W

debian@croqueta:~/asir$ sudo ldapdelete -x -D "cn=admin,dc=ernesto,dc=gonzalonazareno,dc=org" 'cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org' -W

debian@croqueta:~/asir$ sudo ldapdelete -x -D "cn=admin,dc=ernesto,dc=gonzalonazareno,dc=org" 'cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org' -W

Añadimos de nuevo los grupos y usuarios a LDAP:

1
2
3
4
5
6
7
8
debian@croqueta:~/asir$ ldapadd -x -D "cn=admin,dc=ernesto,dc=gonzalonazareno,dc=org" -f grupos.ldif -W
Enter LDAP Password: 

adding new entry "cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

adding new entry "cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
debian@croqueta:~/asir$ ldapmodify -x -D "cn=admin,dc=ernesto,dc=gonzalonazareno,dc=org" -f gruposusers.ldif -W
Enter LDAP Password: 

modifying entry "cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

modifying entry "cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org" 

Comprobación.

1
2
3
4
5
6
7
8
debian@croqueta:~/asir$ ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=juandi)" -b dc=ernesto,dc=gonzalonazareno,dc=org memberOf
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: uid=juandi,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
memberOf: cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
1
2
3
4
5
6
7
8
debian@croqueta:~/asir$ ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=francisco)" -b dc=ernesto,dc=gonzalonazareno,dc=org memberOf
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: uid=francisco,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
memberOf: cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
1
2
3
4
5
6
7
8
9
debian@croqueta:~/asir$ ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=victor)" -b dc=ernesto,dc=gonzalonazareno,dc=org memberOf
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: uid=victor,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
memberOf: cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
memberOf: cn=almacen,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
1
2
3
4
5
6
7
8
9
debian@croqueta:~/asir$ ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=carlos)" -b dc=ernesto,dc=gonzalonazareno,dc=org memberOf
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: uid=carlos,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
memberOf: cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
memberOf: cn=comercial,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
1
2
3
4
5
6
7
8
debian@croqueta:~/asir$ ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=luis)" -b dc=ernesto,dc=gonzalonazareno,dc=org memberOf
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: uid=luis,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
memberOf: cn=admin,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
This post is licensed under CC BY 4.0 by the author.