miércoles, 15 de mayo de 2013

Configurar Sudo con LDAP y PHPLdapAdmin.


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.

No hay comentarios: