Samba y LDAP en Ubuntu

INSTALACIÓN DE SAMBA

imageimage
En primer lugar instalaremos los paquetes necesarios para instalar el servidor de samba:

apt-get install samba samba-doc smbldap-tools libpam-smbpass smbclient libtalloc1

Crearemos también una serie de carpetas en las que posteriormente podremos copiar los perfiles de los usuarios, scripts de inicio,…

mkdir /home/samba/
mkdir /home/samba/netlogon
mkdir /home/samba/profiles

Configuración de LDAP en samba, el esquema samba

A continuación agregaremos el esquema de samba a nuestro servidor LDAP. En primer lugar descomprimimos y copiamos el fichero del esquema que nos acabamos de descargar incluído en el paquete samba-doc:

cd /usr/share/doc/samba-doc/examples/LDAP
gunzip samba.schema.gz
cp samba.schema /etc/ldap/schema

Tras esto, en las versiones antiguas o en las que LDAP no emplee el sistema “cn=config”, lo único que tendríamos que hacer es añadir la línea include /etc/ldap/schema/samba.schema. Si hemos empleado el sistema config a la hora de configurar LDAP, deberemos emplear slaptest para crear el fichero del esquema. En primer lugar creamos un fichero temp.conf e incluimos las siguientes líneas:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/samba.schema

Creamos un fichero temporal para la salida:

mkdir /tmp/ldif_output

Empleamos slaptest o slapcat para convertir los ficheros de esquema:

slapcat -f temp.conf -F /tmp/ldif_output -n0 -s «cn={12}samba,cn=schema,cn=config» > /tmp/cn=samba.ldif

Editamos el fichero /tmp/cn\=samba.ldif cambiando los siguientes atributos:

dn: cn=samba,cn=schema,cn=config

cn: samba

Y borramos las siguientes líneas del final del fichero (los valores pueden cambiar dependiendo de la fecha de creación del fichero:

structuralObjectClass: olcSchemaConfig
entryUUID: b53b75ca-083f-102d-9fff-2f64fd123c95
creatorsName: cn=config
createTimestamp: 20080827045234Z
entryCSN: 20080827045234.341425Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20080827045234Z

Finalmente empleamos ldapadd para añadir el esquema nuevo al directorio:
ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=samba.ldif
para permitir indexar los parámetros que emplearemos para realizar las búsquedas, copiamos y pegamos el siguiente texto en un fichero llamado samba_indexes.ldif:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub

Usamos ldapmodify para cargar los nuevos índices:

ldapmodify -x -D cn=admin,cn=config -W -f samba_indexes.ldif

Si todo va bien deberíamos ver los nuevos índices usando ldapsearch:

ldapsearch -xLLL -D cn=admin,cn=config -x -b cn=config -W olcDatabase={1}hdb

A continuación empleamos smbldap-tools para configurar nuestro entorno, de hecho incluye un script que nos realizará una serie de preguntas sobre las necesidades de nuestro entorno, para ejecutar el script teclearemos:

sudo gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz
sudo perl /usr/share/doc/smbldap-tools/configure.pl

Una vez respondidas tendremos en /etc/smbldap-tools los ficheros de configuración smbldap.conf y smbldap_bind.conf, que también podremos editar directamente.

Añadiendo grupos y usuarios samba a LDAP desde un terminal

El script smbldap-populate añadirá los usuarios, grupos y objetos LDAP requeridos por Samba. Antes de hacerlo podemos hacer una copia de seguridad de los datos LDIF de nuestro LDAP. Podemos realizarlo simplemente:

sudo slapcat -l backup.ldif

Una vez tenemos la copia ejecutamos:

sudo smbldap-populate

Podemos crear previamente un fichero LDIF que contenga los objetos Samba que vamos a crear ejecutando sudo smbldap-populate -e samba.ldif. Esto nos permitirá echarle un vistazo a los cambios para asegurarnos de que todo es correcto.
A continuación también explico cómo podríamos emplear también phpldapadmin para crear la estructura, tal y cómo se puede ver en el siquiente punto.
Tras la instalación reiniciamos slpad:
/etc/init.d/slapd restart

Añadiendo grupos y usuarios samba a LDAP desde PHPLDAPADMIN

Ahora emplearé Phpldapadmin para añadir una unidad organizativa “Equipos” dónde se integrarán los equipos que se unan al dominio que complementará a la ya existente “Usuarios” y “Grupos”.
Dentro de Grupos -para distinguirlos de los grupos que creamos antes- podemos crear nuevos grupos para usar en Samba. En primer lugar consultamos el SID de nuestro dominio ejecutando: net getlocalsid
image

Añadiendo grupos desde Phpldapadmin

Seleccionamos la unidad organizativa “grupos” y dentro de ella seleccionamos crear nuevo “Samba 3 Group Mapping” y creamos los siguientes grupos
image
Es importante que después de crear cada uno de los grupos, los editemos para asegurarnos de que en el sambaSID aparece correctamente el SID de nuestro dominio seguido del número que figura en la tabla el RID del grupo. Puede ayudarnos la siguiente explicación sobre los grupos en Samba
RID: abreviatura de Relative IDentifier. Es un identificador por medio del cual un grupo corriente se convierte en un grupo especial con ciertas características especiales en nuestro dominio.
GID: abreviatura de Group IDentifier. Es el identificador único de un grupo.
A partir de Samba-3 tenemos la disponibilidad de crear mapeos o asociaciones entre los grupos de Windows y los grupos de UNIX. Esto es algo necesario debido a que existen grupos especiales propios de los dominios Windows que tienen características y privilegios específicos (Domain Admins, Domain Controllers, Builtin Print Operators,etc.) En esencia lo que se hace para mapear un grupo en Samba, es asignarle el RID específico a dicho grupo para que adquiera las características específicas y especiales del grupo Windows correspondiente.
La siguiente tabla muestra los grupos Windows y sus correspondientes RIDs, así como su tipo y si es esencial enel directorio LDAP o no: (los RIDs no son declarados por mí, son valores ya establecidos)
image
Podemos probar que hemos creado los grupos ejecutando: getent group. Si por otro lado, queremos acelerar la resolución de nombres podemos instalar nscd, demonio que proporciona una caché para la mayoría de peticiones comunes de nombres de servicio -configurable mediante /etc/nscd.conf-. Proporciona caché para las bases de datos passwd, group y hosts a través de estándares como getpwnam, getpwuid, getgrnam, getgrgid, gethostbyname,…, para instalarla simplemente: apt-get install nscd.

Agregando usuarios desde phpldapadmin

Voy a agregar tres usuarios, por un lado Administrador que tendrá permisos de administrador de dominio y podrá añadir máquinas al dominio (UID 0), el usuario c8 que pertenecerá al grupo administradores y el usuario d8 que será un usuario normal.
image
Debemos asegurarnos al crear los usuarios de que el samba primary group sea el SID de nuestro dominio (net getlocalsid) seguido del RID del grupo al que va a pertenecer (consultar la tabla de RIDs).
image
Podemos editar el usuario después de crearlo. Para asegurarnos de que hemos creado los usuarios correctamente:

getent passwd

Si hemos añadido la línea “session required pam_mkhomedir.so skel=/etc/skel/ umask=0022” al fichero /etc/pam.d/common-session nos creará los directorios de los usuarios la primera vez que entren en el sistema, en caso contrario deberemos crearlas:

mkdir /home/c8
cp /etc/skel/.* /home/c8/
chown -R juan /home/c8
chgrp -R sambaadmins /home/c8

También se pueden crear desde samba, añadiendo en el fichero smb.conf -que veremos después- en la sección homes: root preexec = /etc/samba/mk_sambadir “home/%u””%u””%g” y creando el fichero mk_sambadir con las siguientes líneas:

#!/bin/bash
if [ ! -d $1 ]
then
mkdir $1
fi
chmod 770 $1 -R
chown $2 $1 -R
chgrp $3 $1 -R

Agregando OBJECTCLASS

Tenemos que ir a phpldapadmin el atributo sambaunixidpool para el dominio samba
así que le damos click a la entrada sambadomainname=mczones y en el espacio de la derecha
vamos a buscar donde está el o los atributos tipo objectclass, le damos click en donde dice add value, escogemos
sambaunixidpool y en la siguiente página digitamos los valores de uid y gid iniciales de la siguiente forma: el gid 20003 corresponde al grupo sambamachines el uid 30000 es el número inicial que yo quise utilizar para las cuentas de máquinas, una vez echo esto ya podemos registrar nuestras maquinas win$ al dominio.

Configuración de samba

Además de los ficheros smbldap.conf y smbldap_bind.conf que hemos configurado previamente mediante el script perl /usr/share/doc/smbldap-tools/configure.pl pero que deberíamos comprobar igualmente, podemos configurar el funcionamiento samba en el fichero /etc/samba/smb.conf. En concreto deberemos asegurarnos de establecer bien, al menos los parámetros de conexión con el servidor ldap:

# parametros para el soporte de LDAP
passdb backend = ldapsam:ldap://127.0.0.1
ldap suffix = dc=mczones,dc=es
ldap machine suffix = ou=equipos
ldap user suffix = ou=usuarios
ldap group suffix = ou=grupos
ldap admin dn = cn=admin,dc=mczones,dc=es
ldap delete dn = no
ldap password sync = yes
enable privileges = yes

# para permitir a los usuarios cambiar su clave desde Windows

ldap password sync = yes

También podemos automatizar el ingreso de máquinas windows a nuestro dominio:

add machine script = /usr/sbin/smbldap-useradd -w «%u»

Para clientes xp debemos añadir las siguientes líneas:

server signing = auto
server schannel = Auto

Al final del fichero debemos abrir una sección para cada perfil, script, carpeta o impresora que queramos compartir -adjunto los ficheros de configuración para que se puedan consultar-, por ejemplo, para compartir una carpeta entre todos los usuarios podríamos hacer:

[comun]
path = /home/samba/comun
comment = Carpeta Comun
browseable = yes
writeable = yes
read only = no
guest ok = yes
inherit permissions = yes
create mask = 0770
directory mask = 0770

Tras ello debemos reiniciar samba /etc/init.d/samba restart

Uso de ldap-tools

Este paquete nos provee de los siguientes comandos que podemos ejecutar desde una consola:
  • smbldap-groupadd – añadir un nuevo grupo
  • smbldap-groupdel – borrar un grupo
  • smbldap-groupmod – modificar un grupo, incluyendo añadir y eliminar miembros.
  • Smbldap-groupshow – mostrar las propiedades de un grupo incluyendo miembros
  • smbldap-passwd – cambiar el password de un usuario
  • smbldap-populate – crear la estrucutra necesaria para samba
  • smbldap-useradd – añadir una cuenta de usuario
  • smbldap-userdel – borrar un usuario
  • smbldap-userlist – listar usuarios o equipos con alguna información
  • smbldap-usershow – mostrar información para la cuenta de un usuario
  • smbldap-usermod – modificar las propiedades Unix y samba de la cuenta de un usuario
  • smbldap-userinfo – modificar la información en una cuenta, sólo algunas propiedades.
    Por ejemplo, añadimos el usuario c9 y root y c9 al grupo Administrators de Samba:

sudo smbldap-useradd -a -m -P c9
sudo /usr/sbin/smbldap-groupmod -m ‘root’ ‘Administrators’
sudo /usr/sbin/smbldap-groupmod -m ‘c9’ ‘Administrators’
smbldap-groupshow Administrators

Comprobación de funcionamiento

Cliente linux

Podemos comprobar el funcionamiento directamente desde la consola:

smbclient –user=administrador //192.168.2.3/administrador
image

desde nautilus, pulsando CTRL+L y administrador@mczones.es/administrador, nos pedirá la contraseña:
image image
tras lo que habremos conectado.
image
También podremos entrar en el dominio si configuramos el equipo cliente para ello tal y cómo vimos en la práctica de LDAP.
A continuación muestro cómo hacerlo con un cliente Windows.

Cliente Windows

Podemos directamente conectarnos seleccionando Inicio → Ejecutar → \\192.168.2.3, nos pedirá usuario y contraseña (introduzco administrador y “1234” respectivamente):
image
image
También podemos integrarlo en el dominio directamente para poder iniciar sesión con las cuentas de usuario que hemos dado de alta en ldap, para ello vamos a Inicio → Panel de control → Sistema → Nombre de equipo → Cambiar e introducimos el nombre del dominio, para lo que nos pedirá el nombre de un usuario con permiso suficiente para incluir un equipo en el dominio (el administrador que hemos dado de alta en LDAP). Una vez integrado reiniciamos y ya podremos seleccionar el dominio en los logs podemos comprobar que está funcionando:
image
 imageimage

para continuar viendo el resto de manuales Linux siga el enlace:administración de servidores con Linux

Enlaces:

Samba PDC en Debian :: Improvisa :: Magazine Digital :: Informatica …
http://jorge.herskovic.cl/nerdumentos/instalar_ubuntu_server_como/ubuntu_server_pdc_-_pagina__5.html

1 Comentario

  1. strra123

    Muy buen artículo! También vi una entrada sobre: ALMACENAJE EN REDES : STORCENTER IX2-200 NETWORK STORAGE, sabes si es posible autenticar con LDAP en este equipo Iomega? de esta forma se podría usar como un servidor de respaldos..gracias por la información

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *