Necesitamos permitir, que los usuarios que accedan por LDAP a los clientes, puedan hacer sudo su en las máquinas.
Para ello, hay 2 formas, o agregamos el usuario al fichero /etc/sudoers de cada máquina cliente o lo hacemos a través del LDAP.
Nosotros lo haremos vía LDAP para tenerlo centralizado.
En primer lugar, accederemos al servidor de LDAP y crearemos el “schema” SUDOers para LDAP en la siguiente ruta:
cd /etc/openldap/schema/
#vi sudo.schema
Agregaremos la siguiente información:
######################################################
###Se crea sudo.schema para que sea el LDAP el que ###
###permita hacer sudo en los hosts del LDAP. ###
######################################################
attributetype ( 1.3.6.1.4.1.15953.9.1.1
NAME 'sudoUser'
DESC 'User(s) who may run sudo'
EQUALITY caseExactIA5Match
SUBSTR caseExactIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.4.1.15953.9.1.2
NAME 'sudoHost'
DESC 'Host(s) who may run sudo'
EQUALITY caseExactIA5Match
SUBSTR caseExactIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.4.1.15953.9.1.3
NAME 'sudoCommand'
DESC 'Command(s) to be executed by sudo'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.4.1.15953.9.1.4
NAME 'sudoRunAs'
DESC 'User(s) impersonated by sudo'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.4.1.15953.9.1.5
NAME 'sudoOption'
DESC 'Options(s) followed by sudo'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.4.1.15953.9.1.6
NAME 'sudoRunAsUser'
DESC 'User(s) impersonated by sudo'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.4.1.15953.9.1.7
NAME 'sudoRunAsGroup'
DESC 'Group(s) impersonated by sudo'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.4.1.15953.9.1.8
NAME 'sudoNotBefore'
DESC 'Start of time interval for which the entry is valid'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
attributetype ( 1.3.6.1.4.1.15953.9.1.9
NAME 'sudoNotAfter'
DESC 'End of time interval for which the entry is valid'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
attributeTypes ( 1.3.6.1.4.1.15953.9.1.10
NAME 'sudoOrder'
DESC 'an integer to order the sudoRole entries'
EQUALITY integerMatch
ORDERING integerOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top AUXILIARY
DESC 'Sudoer Entries'
MUST ( cn )
MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ sudoNotBefore $ sudoNotAfter $ sudoOrder $ description )
)
Esta información define el esquema del rol SUDOers, si comenzamos desde arriba, veremos todos los atributos de los que disponemos, las últimas líneas, pertenecen al Objeto SudoRole, si os fijáis he puesto AUXILIARY, si buscáis mas info sobre este esquema, encontraréis que pone ESTRUCTURAL, con ambos funciona, pero si usáis PHPLdapAdmin, os recomiendo que pongáis AUXILIARY, ya que si no, hay posibilidades de que el ROL no aparezca para elegirlo, pero si aparecerá en la estructura.
Una vez guardado el fichero, le indicaremos al LDAP su existencia:
#vi /etc/openldap/slapd.conf
include /etc/openldap/schema/sudo.schema
Reiniciamos el servicio de LDAP:
#/etc/init.d/ldap restart
Aquí es donde si no tenéis PHPLdapAdmin, tendréis que pasaros a otra guía, ya sabéis que no me gusta subir cosas que no he probado.
Pero sólo podrán hacer “sudo su” los usuarios que se encuentren en el grupo SUDOers del LDAP.
Para ello, abriremos el PHPLdapAdmin y crearemos la OU “SUDOers”, una vez creado, agregaremos un nuevo ObjectClass, este será SudoRole, que con los cambios realizados anteriormente, debería aparecer.
Al agregarlo, nos obligará a identificar un CN, este CN sería el nombre del grupo, por decirlo de algún modo.
Ahora podremos agregar los atributos que necesitamos:
sudoCommand
sudoHost
sudoUser
sudoOption
En sudoCommand, pondremos ALL para poder ejecutar cualquier comando, se pueden poner comandos específicos o ![comando] para denegar la ejecución de un comando específico.
En sudoHost, podemos poner ALL para cualquier PC o la ip o nombre del host.
En sudoUser pondremos los nombres de los usuarios que puedan acceder.
En sudoOption podemos indicar que o hace falta password al hacer “sudo su” con un NOPASSWD.
Ya tenemos finalizada la configuración del servidor, ahora pasemos a la de los clientes.
En el cliente, editamos el siguiente fichero:
#vi /etc/ldap.conf
Y agregamos estas líneas al final:
sudoers_base ou=SUDOers,dc=dominio,dc=raíz
#sudoers_debug 2
Con esto, indicamos la ruta de búsqueda de los usuarios que pueden realizar un “sudo su”. La línea de sudoers, la descomentaremos, si tenemos algún problema al realizar el sudo y que nos muestre si la conexión se está realizando correctamente o donde puede estar el fallo.
Con esto se finaliza la configuración de Sudo desde LDAP.