El COMO de SAMBA LDAP en Linux

Jorge Armando Medina

Se otorga permiso para copiar, distribuir y/o modificar 鳴e documento bajo los t鲭inos de la Licencia de Documentaci󮠌ibre GNU, Versi󮠱.2 o cualquier otra posterior publicada por la Fundaci󮠤e Software Libre; sin secciones invariantes, sin textos en portada y contraportada. Una copia de la licencia se incluye en la secci󮊠 titulada “Licencia de Documentaci󮊠 Libre GNU”.

2006-06-08

Abstract

Este Howto explica como configurar y usar un servidor departamental Linux con Samba y OpenLDAP para reemplazar un servidor Controlador de Dominio Microsoft Windows y proveer servicios de autenticacion centralizada, recursos compartidos de archivos e impresoras para clientes Microsoft Windows y Unix.


1. Introduccion
1.1. Software Usado
1.2. Actualizaciones de este documento
1.3. Disponibilidad de este documento
2. Contexto de este COMO
2.1. Parametros globales.
2.2. Gentoo Base
2.3. FHS, LSB y Alta diponibilidad (Hight Availability)
3. Instalacion
3.1. OpenLDAP 2.x.xx
3.2. Samba
3.3. smbldap-tools
4. Configuracion
4.1. Openldap
4.1.1. Schemas
4.1.2. Configuracion de el servidor
4.1.3. Configuracion de Clientes
4.1.4. Iniciar el Servidor
4.2. Sistema Operativo Linux
4.2.1. pam_ldap, nss_ldap y nscd
4.2.2. /etc/ldap.conf
4.2.3. /etc/ldap.secret
4.2.4. /etc/nsswitch.conf
4.3. SAMBA
4.3.1. Configuracion
4.3.2. Preparacion
4.3.3. Entradas iniciales
4.3.4. Probando
4.4. Los scripts smbldap-tools
4.4.1. Configuracion
4.4.2. Entradas Iniciales
4.5. Prueba tu sistema
5. Consideraciones de seguridad
5.1. Usar una cuenta la cual no sea el Root DN
5.2. Conexiones Seguras: use TLS !
5.3. Respaldar tus datos
6. Iniciar-Detener los servidores
7. Migrando cuentas y grupos POSIX
7.1. migracion de usuarios (from /etc/shadow)
7.2. Migracion de grupos ( de /etc/group)
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.

1. Introduccion

Las smbldapt-tools te ayudara para usar Software Libre, LInux, Samba y OpenLDAP para reemplazar servidores Controladores de Dominio Microsoft Windows. Explica como configurar y usar un Servidor Departamental Linux con Samba y OpenLDAP para ofrecer autenticacion centralizada (Controlador de Dominio), recursos compartidos de archivos e impresoras para clientes Microsoft Windows y Unix.

1.1. Software Usado

Este Howto actualmente core:

  • Samba 3.0.XXXX,

  • Microsoft Windows, Microsoft Windows NT 4.0, Windows 2000 y Windows XP Workstation y Servers,

  • Gentoo Linux (debe de trabajar en otras distribuciones _Ver documento original para redhat),

  • OpenLDAP 2.x.2x (debe de trabajar con otros releases de OpenLDAP, y cualquier otra implementacion de LDAP , por ejemplo el servidor IPlanet Directory).

1.2. Actualizaciones de este documento

La version mas actualizada de este documento puede ser encontrada en la pagina de el projecto smbldap-tools disponible en http://samba.IDEALX.org/

Si encuentras algun bug en este documento, o quieres integrar a este documento alguna informacion adicional, por favor envianos un correo electroinco con el bug report y/o e requerimiento de cambio a samba@IDEALX.org.

1.3. Disponibilidad de este documento

Este documento es Propiedad de IDEALX (http://www.IDEALX.org/).

Se garantiza permiso para distribuir este documento bajo los terminos de la Licencia de Documentacion Libre GNU ( Ver http://www.gnu.copleft.fd1.html).

2. Contexto de este COMO

Este documento ayuda a configurar un Controlador de Dominio Primario (PDC) con Samba + OpenLDAP para estaciones de trabajo Microsoft Windows (y, usando nss_ldap y pam_ldap, como una unica fuente de autenticacion para todas las estaciones de trabajo, incluyendo Linux y otros sistemas Unix).

2.1. Parametros globales.

  • Todas las estaciones de trabajo y servidores estan en la misma LAN 192.168.1.0/24

  • La resolucion DNS esta OK (Usando Bind o Djbdns), fuera de el ambito de este COMO.

  • Vamos a configurar un DOminio Microsoft Windows NT llamado TUXJM.

  • Tendremos un Controlador de Dominio Primario central llamado PDC-SRV (nombre netbios) en el host 192.168.1.1/32,

  • Queremos este PDC que sea el servidor WINS y el Servidor Master Browser para el dominio TUXJM,

  • Todos los objetos de autenticacion (usuarios y grupos) seran almacenados en un servidor OpenLDAP, usando el DN base: dc=tuxjm,dc=net,

  • Las cuentas de usuario seran almacenadas en ou=Users,dc=tuxjm,dc=net,

  • Las cuentas de COmputadora seran almacenadas en ou=Computers,dc=tuxjm,dc=net,

  • Las cuentas de Grupos seran almacenadas en ou=Groups,dc=tuxjm,dc=net.

2.2. Gentoo Base

En este Howto, tomamos a Gentoo Linux 2005 como la base ya que trae incluido soporte para todo lo que necesitaremos (Samba, OpenLDAP, smbldap-tools,...) y son faciles de instalar para nuestra configuracion.

2.3. FHS, LSB y Alta diponibilidad (Hight Availability)

Instalando y compilando el software clave (Samba y OpenLDAP), tratamos de mantener dos principios claves:

  1. Deberemos de reforzar las recomendaciones de File Hierarchy Standard (FHS 3),

  2. Seguiremos las recomendaciones de Linux Standard Base (LSB 4)

  3. Debemos de pensar que nuestra PDC sera usado en una configuracion High Available (para un futuro de este HOWTO).

3. Instalacion

Para poder seguir ese COMO, debes de serguir los siguientes requerimientos ante de bajar o instalar nada:

  • Gentoo Linux instalado y operacional (con la red incluida),

  • Debes de estar preparado (si no es que ya lo estas) para usar pam_ldap y nss_ldap ( lo veremos depues como configurarlos correctamente).

Ademas debes de instalar los siguiente paquetes:

  • OpenLDAP,

  • Samba

  • nss_ldap y pam_ldap,

  • smbldap-tools.

Todos estos vienen incluidos en Gentoo.

3.1. OpenLDAP 2.x.xx

usaremos OpenLDAP, y la version que usaremos sera la 2.2.28

# emerge -pv openldap

These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   R   ] net-nds/openldap-2.2.28-r3  -berkdb +crypt -debug +gdbm -ipv6 -kerberos -minimal -odbc +perl +readline -samba -sasl (-selinux) -slp +ssl +tcpd 0 kB

Esa configuracion esta BIEN. Lo instalamos:

# emerge net-nds/openldap

3.2. Samba

Instalaremos samba-3.0.22 COnfiguraremos las FLAGS para sporte LDAP y otras mas:

[ebuild  N    ] net-fs/samba-3.0.22  -acl -async -automount +cups -doc -examples -kerberos +ldap -ldapsam -libclamav +mysql -oav +pam -postgres -python -quotas +readline (-selinux) -swat -syslog -winbind -xml +xml2 17,147 kB

Activaremos soporte para ACL, DOC, EXAMPLES, LDAP (explicitamente) PAM, PYTHON, QUOTAS, READLINE, WINDBIND, XML y XML2

# echo "net-fs/samba acl cups doc examples -kerberos ldap -mysql pam -postgres python quotas readline winbind xml xml2" >> /etc/portage/package.use

3.3. smbldap-tools

smbldap-tools es un paquete que contiene algunos scripts utiles para administrar usuarios/grupos cuando usas LDAP como la fuente de datos para usuarios/grupos (Para Unix y para Samba). Usamos estos scripts en este COMO para agregar/borrar/modificar usuarios y grupos. Instalaremos smbldap-tools desde portage:

# emerge smbldap-tools

Ya que smbldap-tools cambia muy seguido se recomienda ver el ChangeLog antes de actualizar a alguna version mas nueva para ver si cambia algo en la configuracion.

4. Configuracion

4.1. Openldap

Necesitaras configurar tu servidor OpenLDAP para que sea una base de datos SAM (Security Account Manager). Siguiendo nuestro contexto de ejemplo, debes de configurarlo para:

  • Acceptar el esquema de samba 3.0.11rc1 LDAP v3,

  • Correr en el DN base dc=tuxjm,dc=net,

  • Contener las entradas minimas necesarias para iniciarlo.

Para las necesidades de este Howto de ejemplo, usamos el siguiente LDAP DIT:

(Usando notacion DN Relativa)

dc=TUXJM,dc=net
 |
 ,___ ou=Users :     Para almacenar cuentas de usuario para sistemas Unix y Windows
 |
 ,___ ou=Computers : Para almacenar cuentas de computadoras para sistemas Windows
 |
 ,___ ou=Groups :    Para alamacenar grupos de sistema para sistemas Unix y Windows
 |                   ( o para cualquier otro sistema LDAP-aware).
 |
 ,___ ou=DSA :       Para almacenar cuentas especiales de sistema (simpleSecurityObject)
                     ( o para cualquier otro sistema LDAP-aware).

Este DIT sigue las recomendaciones de el RFC 2307bis. No usamos ou=Hosts para almacenar cuentas de computadoras ya que hay una diferencia entre hosts TCP/IP y cuentas de computadoras Microsoft Windows. Usamos ou=DSA para alamacenar cuentas de seguridad especificas para clientes LDAP, en el contexto de smbldap-tools ( ver la seccion 5 para mas detalles y ejemplos). Puedes escojer usar otro arbol LDAP para almacenar objetos, por ejmplo, todas las cuentas (shadowAccounts y sambaSAMAccounts) "bajo" el mismo DN. Nosotros elejimos este DIT porque comple con las recomendaciones de el RFC 2307bis, y porque pensamos que de esta manera es mas claro para la compresion humana. Usando Samba VERSION y OpenLDAP, almacenaremos:

  • CUentas de usuario Microsft Windows usando la object class sambasAMAaccount (samba.schema),

  • Cuentas de computadora Microsoft Windows usando la object class sambaSAMAaccount,

  • cuentas de usuario Unix usando el objectclass posixAccount y el object shadowAccount para para la suite de contraseñas shadow (nis.schema)

  • Grupos usando el object class posixGroup y sambaGroupMapping.

  • Cuentas de seguridad usadas por software cliente (Samba y Linux) usando el objectclass simpleSecurityObject (core.schema).

4.1.1. Schemas

El schema de Samba debe de ser soportado por el servidor OpenLDAP. Para hacerlo, y usando el paquete de smbldap-tools, solo verifica que tu archivo /etc/openldap/slapd.conf incluya las lineas como el ejemplo de aqui abajo:

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/samba.schema

NOTA: el orden de los schemas son importantes.

NOTA: Si el schema para samba no existe en /etc/openldap/schema/ entonces hay que copiar /usr/share/doc/samba-3.0.14a-r2/examples/LDAP/samba.schema a /etc/openldap/schemas

# cp -v /usr/share/doc/samba-3.0.14a-r2/examples/LDAP/samba.schema /etc/openldap/schema/

Como puedes ver, usamos el objectclass inetOrgPerson porque queremos mezclar datos organizacionales y tecnicos. Haciendolo asi facilitaremos la administracion ya que una cuenta de usuario sera usada para definir:

  1. un usuario humano en la compañia,

  2. Una cuenta de usaurio para sistemas Microsoft Windows y Unix,

  3. Una cuenta de usaurio para cualquier aplicaicon LDAP-aware.

Hacerlo asi no es obligatorio: sientete libre de usar un contexto que se ajuste mejor a tus necesidades si esta no es la manera que tu quires seguir. Note que usamos el samba.schema incluido con las fuentes de samba 3.0.11rc1.

4.1.2. Configuracion de el servidor

Configurar el servidor slapd para ser e servidor maestro para el siguiente sufijo: dc=tuxjm,dc=net. Esto resultara en las lsiguientes lineas en el archivo de configuracion slapd.conf:

database        ldbm
directory       "/var/lib/openldap-ldbm"

suffix          "dc=tuxjm,dc=net"
rootdn          "cn=root,dc=tuxjm,dc=net"

index           objectClass,uidNumber,gidNumber                 eq
index           cn,sn,uid,displayName                           pres,sub,eq
index           memberUid,mail,givenname                        eq,subinitial
index           sambaSID,sambaPrimaryGroupSID,sambaDomainName   eq

Entonces, crea la Lista de Control de Acceso (ACL) para proteger los datos. Esto resultara en las siguientes liena de el archivo de configuracion:

access to attrs=userPassword,sambaLMPassword,sambaNTPassword
        by self write
        by anonymous auth
        by * none
access to *
        by * read

Finalmente, define la contraseña para el Root DN de el servidor, esto resultara en la siguiente linea:

rootpw    mysecretpwd

No olvides poner el modo 600 a el archivo /etc/openldap/slapd.conf para proteger tu contraseña de el Root DN, si es que no estan puestos ya. Tambien puedes poner un password hash en el archivo, usa el comando slappasswd. Por ejemplo, para tener la palabra "secreto" hashed con el algoritmo MD5, usa el comando:

# slappasswd -h {Md5} -s secreto
{MD5}4gGZTcqTIPyUM2YDsc/JcA==

Los algoritmos disponibles son CRYPT, MD5, SMD5, SSHA, y SHA. El predeterminado es SSHA. las lineas resultantes en el archivo /etc/openldap/slapd.conf seran:

rootpw    {MD5}4gGZTcqTIPyUM2YDsc/JcA==

4.1.3. Configuracion de Clientes

Configura las opciones predeterminadas para clientes LDAP editando /etc/openldap/ldap.conf como en el siguiente ejemplo:

HOST 127.0.0.1
BASE dc=tuxjm,dc=net
###URI ldap://127.0.0.

4.1.4. Iniciar el Servidor

Ejecutar el comando slaptest para hacer una revision de la sintaxis en el archivo de configuracion /etc/openldap/slapd.conf

# slaptest -v
config file testing succeeded

Si regresa algun error revisar la configuracion. Ahora es tiempo de ejecutar el servidor LDAP asi:

# /etc/init.d/slapd start
 * Caching service dependencies ...                                                                                  [ ok ]
 * Starting ldap-server ...                                                                                          [ ok ]

Confirmar que el servicio esta corriendo:

# netstat -plutn | grep slapd
tcp   0   0 0.0.0.0:389   0.0.0.0:*   LISTEN   25058/slapd

Y ahora hay que hacer una consulta al servidor LDAP:

# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
# extended LDIF
#
# LDAPv3
# base <> with scope base
# filter: (objectclass=*)
# requesting: namingContexts
#

#
dn:
namingContexts: dc=tuxjm,dc=net

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Si sale algo asi significa que el servidor esta corriendo. Si quieres que el servidor slapd arranque al inicio del sistema ejecutar el siguiente comando:

# rc-update add slapd default
 * slapd added to runlevel default
 * rc-update complete.

Todo deberia de trabajar bien. Si no:

  • Verifica tus archivos de configuracion,

  • Verifica que el archivo de configuracion /etc/openldap/slapd.conf y el directorio /var/lib/openldap-ldbm existe y su dueño es el usuario con el que corre slapd ( ldap es el usuario en Gentoo),

  • Consulta la documentacion de OpenLDAP

4.2. Sistema Operativo Linux

Necesitas decirle a la caja Linux usar LDAP usando pam_ldap y nss_ldap. Entonces, deberas de correr nscd y finalizar tu configuracion de LDAP.

4.2.1. pam_ldap, nss_ldap y nscd

Primero tenemos que instalar los programas pam_ldap y nss_ldap:

# emerge pam_ldap
# emerge nss_ldap

Usar authconfig para configurar pam_ldap (WACALA):

Editar /etc/pam.d/system-auth para que quede asi:

#%PAM-1.0

auth       required     pam_env.so
auth       sufficient   pam_unix.so likeauth nullok
auth       sufficient   pam_ldap.so use_first_pass
auth       required     pam_deny.so

account    required     pam_unix.so
account    sufficient   pam_localuser.so
account    required     pam_ldap.so

password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password   sufficient   pam_unix.so nullok md5 shadow use_authtok
password   sufficient   pam_ldap.so use_authtok
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so
session    optional     pam_ldap.so

4.2.2. /etc/ldap.conf

Edita tu archivo de configuracion /etc/ldap.conf para configurar los parametros LDAP:

  • host: servidor LDAP,

  • base: nombre distinguido de la base de la busqueda predeterminada,

  • nss_base_passwd: naming context para las cuentas,

  • nss_base_group: naming context para los grupos,

  • rootbinddn y contraseña asociada: el nombre distinguido usado para amarrar si el ID efectivo es root ( para permitir a root por ejemplo para cambiar la contraseña de cualquier usuario).

El cual deberia de verse como sigue:

uri ldap://127.0.0.1/
ldap_version 3
scope one
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid
pam_password exop
nss_base_passwd         ou=Users,dc=tuxjm,dc=net
nss_base_passwd         ou=Computers,dc=tuxjm,dc=net
nss_base_shadow         ou=Users,dc=tuxjm,dc=net
nss_base_group          ou=Groups,dc=tuxjm,dc=net

4.2.3. /etc/ldap.secret

Debes de colocar en este archivo, protegido por el modo 600, el bind password asociado con el nombre distinguido usado por nss_ldap para amarrarse a el directorio OpenLDAP cuando el usuario local es root. En nuestro ejemplo, este archivo debe de contener la siguiente contraseña:

nssldapsecretpwd

4.2.4. /etc/nsswitch.conf

Edita tu archivo /etc/nsswitch.conf para configurar tu Name Service Switch para usar LDAP para usuarios y grupos:

passwd:      files ldap
shadow:      files ldap
group:       files ldap

4.3. SAMBA

Aqui, configuraremos Samba como el PDC para el dominio Microsoft Windows NT llamado TUXJM con la base de datos SAM almacenada en nuestro servidor OpenLDAP.

4.3.1. Configuracion

Necesitamos configurar /etc/samba/smb.conf como en el jemplo de 17.1.3 en la pagina 56, asumiendo que:

  • Nuestro nombre de dominio Microsoft Windows NT sera: TUXJM

  • Nuestro nombre de servidor Netbios sera: PDC-SRV

  • Nuestro servidor permitira roving/roaming profiles

  • Todos los recursos compartidos SAMBA estaran bajo /home/samba/* excepto para los directorios home ( siempre en /home/USERNAME).

  • Queremos que nuestro servidor PDC Samba-LDAP sea el domain browser para nuestra LAN.

Edita tu archivo /etc/samba.smb.conf como en el ejemplo 17.1.3 en la pagina 56 para configurar tu servidor Samba. Remarquemos algunas cosas acerca de este archivo:

La seccion global Esta seccion te permite configurar los parametros globales para el servidor. Es aqui donde toman logar todos los parametros que definiremos en el parrafo anterior. Tambien hemos definido el programa que un usuario usa para cambiar su contraseña (programa passwd) y el dialogo usado entre el servidor y el usuario durante dicho cambio.

La opcion "add machine script" permite a smbd agregar, como root, una nueva cuenta de maquina a el dominio. Cuando una maquina contacta el dominio, este script es llamado y la nueva cuenta de maquina es creada en el dominio. Esto hace facil la administracion de cuentas de maquina. Por razones de seguridad, la unica cuenta permitida para agregar cuentas de computadora en el dominio es "Administrator" la cual es una cuenta priviligiada.

Para usuarios franceses, agregamos una linea que permite a smbd mapear nombres de archivos entrantes de un codigo de pagina DOS. Esta opcion es muy util si quieres que los archivos y los directorios en los profiles sean guardados con todos los acentos que ellos tienen. No olvides leer la pagina de el manual para mas detalles: esta opcion es un un conjunto de caracteres Unix Western European.

El parametro client code page DEBE de ser ser configurado al codigo de pagina 850 para que la conversion a caracters UNIX sea correctamente hecha.

[global]
  workgroup = IDEALX-NT
  netbios name = PDC-SRV
  enable privileges = yes
  server string = SAMBA-LDAP PDC Server

  ...
  #unix password sync = Yes
  #passwd program = /usr/local/sbin/smbldap-passwd -u %u
  #passwd chat = "Changing password for*\nNew password*" %n\n "*Retype new password*" %n\n"
  ldap passwd sync = Yes
  ...
  ; SAMBA-LDAP declarations
  passdb backend = ldapsam:ldap://127.0.0.1/
  # ldap filter = (&(objectclass=sambaSamAccount)(uid=%u))
  ldap admin dn = cn=Manager,dc=IDEALX,dc=ORG
  ldap suffix = dc=IDEALX,dc=ORG
  ldap group suffix = ou=Groups
  ldap user suffix = ou=Users
  ldap machine suffix = ou=Computers
  ldap ssl = start_tls

  add machine script = /usr/local/sbin/smbldap-useradd -w "%u"
  add user script = /usr/local/sbin/smbldap-useradd -m "%u"
  ldap delete dn = Yes
  #delete user script = /usr/local/sbin/smbldap-userdel "%u"
  add group script = /usr/local/sbin/smbldap-groupadd -p "%g"
  #delete group script = /usr/local/sbin/smbldap-groupdel "%g"
  add user to group script = /usr/local/sbin/smbldap-groupmod -m "%u" "%g"
  delete user from group script = /usr/local/sbin/smbldap-groupmod -x "%u" "%g"
  set primary group script = /usr/local/sbin/smbldap-usermod -g "%g" "%u"

  ... 
  Dos charset = 850
  Unix charset = ISO8859-1

La secciion shares Aqui toma lugar toda la seccion de recursos compartidos. En particular, podemos definir los directorios para el home de los usuarios el cual es definido en la seccion [homes]:

[homes]
  comment = Home Directories
  valid users = %U
  read only = No
  create mask = 0664
  directory mask = 0775
  browseable = No

Los profiles de los usuarios seran almacenados en el recurso compartido llamado [profiles]. Este es el directorio raiz para los profiles la variable ldap sambaProfilePath especifica la ruta exacta para cada usuario. Por ejemplo si sambaProfilePath es puesta a \\PDC-SRV\profiles\testuser, entonces el directorio de el profile para el usuario testuser es /home/samba/profiles/testuser/. Asegurate de tener los correctos permisos para este directorio. El bit pegajoso (sticky bit) debe de ser puesto. Haz un simple chmod 1777 /home/samba/profiles y estar bien. No olvides que el sistema no toma estos cambios inmediatamente. Debes de esperar varios minutos antes de que cualquier profile tome lugar.

[profiles]
  path = /home/samba/profiles
  read only = No
  create mask = 0600
  directory mask = 0700
  browseable = No
  guest ok = Yes
  profile acls = Yes
  csc policy = disable
  # next line is a great way to secure the profiles
  force user = %U
  # next line allows administrator to access all profiles
  valid users = %U @"Domain Admins"

Si quieres que un archivo de comandos sea bajado y ejecutado cuando un usuario inicia sesion satisfactoriamente en una estacion de trabajo windows, debes de definir una seccion netlogon y un script netlogon. El script netlogon debe de tomar lugar en la seccion global y el script debe de estar en una ruta relativa a el servicio [netlogon]. Por ejemplo, si el servicio [netlogon] especifica la ruta /home/samba/netlogon (como en nuestro ejemplo, entonces si el script es definido como logon script = STARTUP.BAT, el archivo que sera bajado es /home/samba/netlogon/STARTUP.BAT. Finalmente, definidmos una seccion doc que autoriza a todos ver el directorio de documentos /usr/share/doc.

[global]
  ...
  logon script = STARTUP.BAT
  ...

[netlogon]
  path = /home/samba/netlogon/
  browseable = No
  read only = yes

[doc]
  path=/usr/share/doc
  public=yes
  writable=no
  read only=no
  create mask = 0750
  guest ok = Yes

Por ejemplo, podemos tener el script STARTUP.BAT que monta el directorio de documentacion en en el volumen "J" en los clientes windows. Otro comando util configura los windows para sincronizar el tiempo a el de el servidor:

NET USE J: \\PDC-SRV\doc
NET TIME \\PDC-SRV /SET /YES

4.3.2. Preparacion

Debes de crear algunos directorios, de acuerdo a /etc/samba/smb.conf:

mkdir /home/samba
mkdir /home/samba/netlogon
mkdir /home/samba/profiles
chmod 1777 /home/samba/profiles

4.3.3. Entradas iniciales

Samba debe de conocer la conraseña de el usuario ldap admin dn (cn=root,dc=TUXJM,dc=net) que haz especificado en smb.conf. Este usuario es usado por samba para amarrarse a el directorio DLAP y debe de tener los suficientes permisos para agregar/modificar cuentas almacenadas en el directorio LDAP. Para hacer eso. usa el siguiente comando ( asumiendo 'mysecretpwd' es la contraseña de ldap admin dn, ver tu archivo de configuracion /etc/openldap/slapd.conf para estar seguro):

[root@pdc-srv samba]# smbpasswd -w mysecretpwd
Setting stored password for "cn=Manager,dc=TUXJM,dc=ORG" in secrets.tdb

Samba almacenara estos datos en /var/lib/samba/private/secrets.tdb. Note que este "ldap admin dn" puede ser otra cuenta aparte de el Root DN: podrias usar otra cuenta ldap que tenga permisos para escribir cualquier atributo sambaSAMAaccount y posixAccounts (ver seccion 5 en la pagina 19 para consideraciones de seguridad).

4.3.4. Probando

Para validar tu configuracion Samba, usa testparm el cual debe de regresar "Loaded services file OK." sin ninguna advertencia o algun parametro desconocido. Ver man testparm para mas informacion.

4.4. Los scripts smbldap-tools

Finalmente, debes de configurar tu smbldap-tools para que concuerde la configuracion de tu sistema y LDAP. Esto puede ser hecho en los dos archivos /etc/smbldap-tools/smbldap.conf y /etc/smbldap-tools/smbldap_bind.conf.

4.4.1. Configuracion

  • En el archivo /etc/smbldap-tools/smbldap.conf encontraras otras opciones de configuracion: estas son los valores predeterminadas uadas por smbldap-tools cuando creas una cuenta (usuario o computadora). Sientete libre de cambiar esos valores si asi lo deseas. Consulta la documentacion de smbldap-tools para mas informacion acerca de la configuracion de los parametros. La opcion principal que necesitas definir es el Domain Secure ID (SID). puedes obtener su valor usando el comando:

net getlocalsid

Nota que necesitas iniciar samba por algunos segundos para que este comando termine satisfactoriamente.

  • El archivo /etc/smbldap-tools/smbldap_bind.conf se configura de acuerdo a tu configuracion LDAP (RootDN password y la direccion IP de el servidor LDAP). Encontraras dos entradas que confunden: slaveLDAP y masterLDAP. Para nuestro primer ejemplo, esos dos servidores LDAP seran el mismo, pero en una configuracion de la vida real, queras tener un servidor esclavo para servir todas tus consultas de lectura, y un servidor dedicado para consultas de escritura. De cualquier forma, en el ejemplo real, como construimos el PDC usando Samba y OpenLDAP en el mismo host, debes de especificar 127.0.0.1 para los dos servidores LDAP. Note que _no puedes puner las contraseñas en has aqui_! este archivo debe de ser solo leible por el usuario root.

4.4.2. Entradas Iniciales

Necesitamos agregar algunas entradas iniciales a el nuevo servidor OpenLDAP recien configurado:

  1. Entradas base:

    • base DN: dc=tuxjm,dc=net

    • categorias organizataivas base (ou=Users,dc=tuxjm,dc=net,ou=Groups,dc=tuxjm,dc=net,ou=Computers,dc=tuxjm,dc=net)

  2. Cuentas de seguridad usadas para programas cliente (Samba y Linux):

    • Samba server DN: cn=samba,ou=DSA,dc=tuxjm,dc=net

    • Linux DN: cn=nssldap,ou=DSA,dc=tuxjm,dc=net

    • smbldap-tools DN: cn=smbldap-tools,ou=DSA,dc=tuxjm,dc=net

La manera mas facil de configurar tu directorio LDAP y agregar las entradas base predeterminadas puede ser usando el script smbldap-populate:

[root@etoile root]# smbldap-populate
Populating LDAP directory for domain TUXJM (S-1-5-21-4205727931-4131263253-1851132061)
(using builtin directory structure)
adding new entry: dc=tuxjm,dc=net
adding new entry: ou=Users,dc=tuxjm,dc=net
adding new entry: ou=Groups,dc=tuxjm,dc=net
adding new entry: ou=Computers,dc=tuxjm,dc=net
adding new entry: uid=root,ou=Users,dc=tuxjm,dc=net
adding new entry: uid=nobody,ou=Users,dc=tuxjm,dc=net
adding new entry: cn=Domain Admins,ou=Groups,dc=tuxjm,dc=net
adding new entry: cn=Domain Users,ou=Groups,dc=tuxjm,dc=net
adding new entry: cn=Domain Guests,ou=Groups,dc=tuxjm,dc=net
adding new entry: cn=Domain Computers,ou=Groups,dc=tuxjm,dc=net
adding new entry: cn=Administrators,ou=Groups,dc=tuxjm,dc=net
adding new entry: cn=Account Operators,ou=Groups,dc=tuxjm,dc=net
adding new entry: cn=Print Operators,ou=Groups,dc=tuxjm,dc=net
adding new entry: cn=Backup Operators,ou=Groups,dc=tuxjm,dc=net
adding new entry: cn=Replicators,ou=Groups,dc=tuxjm,dc=net
adding new entry: sambaDomainName=IDEALX-NT,dc=tuxjm,dc=net
Please provide a password for the domain root:
Changing password for root
New password :
Retype new password :

12* si deseas hacer esto manualmente, un archivo LDIF de ejmplo presentado en la seccion 17.2 en la pagina 60 te da mas detalles en que objectos vas a agregar a la base de datos OpenLDAP. Copialo y pegalo en el archivo llamado smbldap-base.ldif y agregalo usando el comando (teclea la contraseña de tu admin DN, 'mysecretpw' para completar el comando cuando sea preguntado):

ldapadd -x -h localhost -D "cn=Manager,dc=TUXJM,dc=ORG" -f smbldap-base.ldif -W

La entrada sambaDomainName=TUXJM,dc=tuxjm,dc=net define el dominio samba y especificamente su SID de dominio. Tambien lo usamos para definir el siguiente uidNumber y el gidNumber disponible al crear usaurios y grupos. Los valores predeterminados para esos numersos son 1000. Puedes cambiarlo con la opcion -u y -g. Por ejemplo, si quieres que el que el primer valor disponible para uidNumbetr y gidNumber sea el 1500, puedes usar el siguiente comando:

smbldap-populate -u 1550 -g 1500

La contraseña de el usuario Administrator, por ejemplo la dcontraseña de root es definida inmediatamente. De hecho, cualquier usuario colocado en el grupo "Domain Admins" sera autorizado con permisos de Administrador de el Dominio Windows, pero solo la cuenta Administrator es permitida para unir computadoras a el dominio. Una vez agregado, Deberas de agregar las cuentas de seguridad para Samba y Linux. Para que sean procesadas Copia y pega las cuentas definidas en la seccion 17.3 y agregalas al directorio con el sigueinte comando:

# ldapadd -x -h localhost -D "cn=root,dc=tuxjm,dc=net" -f smbldap-dsa.ldif -W

Finalmente, establece la contraseña predeterminada para estas cuentas:

  • La cuenta de seguridad Samba, usando la contraseña 'sambasecretpw':

ldappaswd -x -h localhost -D "cn=root,dc=TUXJN,dc=NET" -s sambasecretpwd \
-W cn=samba,ou=DSA,dc=TUXJM,dc=NET
  • La cuenta Linux de seguridad (nss_ldap), usando la contraseña 'nssldapsecretpwd':

ldappaswd -x -h localhost -D "cn=root,dc=TUXJN,dc=NET" -s nssldapsecretpwd \
-W cn=nssldap,ou=DSA,dc=TUXJM,dc=NET

4.5. Prueba tu sistema

Para probar tu sistema, crearemos una cuetna de sistema en LDAP (digamos 'testuser'), y se tratara de logear con este nuevo usuario.

Para crear una cuenta de sistema en LDAP, usa el script smbldap-useradd 13 (asumiendo que ya haz configurado tus smbldap-tools):

[root@pdc-srv tmp]# smbldap-useradd -m testuser1
[root@pdc-srv tmp]# smbldap-passwd testuser1
Changing password for testuser1
New password :
Retype new password :

Entonces, intenta iniciar sesion en tu sistema (Unix login) como testuser1 (usando otra consola, o usando ssh). Todo deberia de estasr bien:

[user@host-one:~]$ ssh testuser1@pdc-srv
testuser1@pdc-srv’s password:
Last login: Sun Dec 23 15:49:40 2004 from host-one
[testuser1@pdc-srv testuser1]$ id
uid=1000(testuser1) gid=100(users) groupes=100(users)

No olvides eliminar esta cuenta testuser1 despues de hayas completado tus pruebas:

[root@pdc-srv]# smbldap-userdel -r testuser1

5. Consideraciones de seguridad

5.1. Usar una cuenta la cual no sea el Root DN

En este COMO, estamos usando el Root DN : el ldap admin dn deberia de ser otra cuenta diferente al Root DN : deberias de usar otra cuenta ldap que deba de tener permisos para escribir los atributos sambaSAMAccount y posixAccount. Asi que que si ya no quieres usar la cuenta cn=root,dc=tuxjm,dc=net, puedes usar una cuenta dedicada para Samba y otra para los scripts smbldap-tools. Los dos usuarios fueron creados in la seccioin 4.4.2 en la rama DSA : cn=samba,ou=DSA,dc=tuxjm,dc=net y cn=smbldap-tools,ou=DSA,dc=tuxjm,dc=net. Si la contraseña para esas cuentas fue samba y smbldap-tools respectivamente, puedes modificar los archivos de configuracion como sigue ( por supuesto, puedes usar la misma cuenta para samba y smbldap-tools):

  • Archivo /etc/smbldap-tools/smbldap_bind,conf

    slaveDN="cn=smbldap-tools,ou=DSA,dc=tuxjm,dc=net" slavePw="smbldapsecretpwd" masterDN="cn=smbldap-tools,ou=DSA,dc=tuxjm,dc=net" masterPw="smbldapsecretpwd"

  • Archivo /etc/samba/smb.conf

    ldap admin dn = cn=samba,ou=DSA,dc=tuxjm,dc=net

No olvides tampoco poner la contraseña de la cuenta samba en el archivo secrets.tdb :

smbpasswd -w sambasecretpwd
  • Archivo /etc/openldap/slapd.conf: varias ACL deben de ser puestas:

    - El usuario samba necesita acceso de escritura para todos los atributos samba y algunos otros (uidNumber,gidNumber ...). - smbldap-tools debe de tener acceso de escritura para agregar o borrar nuevos usuarios, grupos o cuentas de computadora - nssldap tambien necesita acceso de escritura para el atributo de el password unix ( por ejemplo si un usuario quiere cambiar su contraseña con el comando passwd).

  # users can authenticate and change their password
  access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChange
 	by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write
 	by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write
 	by dn="cn=nssldap,ou=DSA,dc=idealx,dc=org" write
 	by self write
 	by anonymous auth
 	by * none
  # some attributes need to be readable anonymously so that ’id user’ can answer correctly
  access to attrs=objectClass,entry,homeDirectory,uid,uidNumber,gidNumber,memberUid
	by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write
	by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write
	by * read
  # somme attributes can be writable by users themselves
  access to attrs=description,telephoneNumber,roomNumber,homePhone,loginShell,gecos,cn,sn,givenname
	by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write
	by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write
	by self write
	by * read
  # some attributes need to be writable for samba
  access to attrs=cn,sambaLMPassword,sambaNTPassword,sambaPwdLastSet,sambaLogonTime,sambaLogoffTime,sambaKickoffTime,
	by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write
	by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write
	by self read
	by * none
  # samba need to be able to create the samba domain account
  access to dn.base="dc=idealx,dc=org"
	by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write
	by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write
	by * none
  # samba need to be able to create new users account
  access to dn="ou=Users,dc=idealx,dc=org"
	by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write
	by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write
	by * none
  # samba need to be able to create new groups account
  access to dn="ou=Groups,dc=idealx,dc=org"
	by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write
	by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write
	by * none
  # samba need to be able to create new computers account
  access to dn="ou=Computers,dc=idealx,dc=org"
	by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write
	by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write
	by * none
  # this can be omitted but we leave it: there could be other branch
  # in the directory
  access to *
	by self read
	by * none

5.2. Conexiones Seguras: use TLS !

No Traducido AUN.

5.3. Respaldar tus datos

TODO: como respadar y restaurar tu PDC ! Crucial! Algunos scripts pueden ayudarte a hacer el trabajo (aun si no se usa, the will, explicara exactamente que respaldar, y como restaurar). De hecho, esos scripts solo tienen que respaldar: archivos de configuracion (ldap, nss, ldap, samba y tdbs.._ y la SAM (asi que un LDIF puede hacer el trabajo). un smbldap-backup y smbldap-restore?

6. Iniciar-Detener los servidores

Para:

  • iniciar/detener el servidor OpenLDAP:

    /etc/init.d/slapd start/stop
  • iniciar/detener el servidor Samba:

    /etc/init.d/samba start/stop

7. Migrando cuentas y grupos POSIX

Pawel Wielaba ha escrito dos scripts smbldap-migrate-unix-accounts y smbldap-migrate-unix-groups para ayudar en la migracioin de usuarios y grupos definidos en /etc/passwd (y/o /etc/shadow) y /etc/group. Puedes encontrar sus scripts con el paquete smbldap-tools ( el el directorio de documentacion en Gentoo /usr/share/doc/samba-3.0.22/examples/LDAP/smbldap-tools-0.9.1/doc/). Tambien pueden ser encontrados en su sitio : http://www.iem.pw.edu.pl/~wielebap/ldap/smbldap-tools/2/

7.1. migracion de usuarios (from /etc/shadow)

Suponemos que usas el shadow password. Entonces tambien el archivo shadow para migrar contraseñas de las cuentas. La migracion de usuarios debera hacerse como sigue:

  1. copia /etc/passwd y /etc/shadow a un directorio temporal:

    cp /etc/passwd /etc/shadow /tmp/
  2. remueve todas las cuentas en ambos archivos que no quieres que esten en el directorio:

    for user in root nobody bin daemon
    do
    export user
    perl -i -pe’s@^$ENV{user}:(.*)\n@@’ /tmp/passwd
    perl -i -pe’s@^$ENV{user}:(.*)\n@@’ /tmp/shadow
    done

    No olvides remover el usuario nobody ya que es creado cuando el directorio es inicializado con smbldap-populate.

  3. Migracion de cuentas:

    /usr/share/doc/smbldap-tools-*/smbldap-migrate-passwd -a -P /tmp/passwd -S /tmp/shadow
  4. Remover los usuarios migrados de /etc/passwd y /etc/shadow

    NOTA: con la opcion -a en smbldap-migrate-passwd, el sambaSAMAccount sera agregado a los usuarios.Todos los usuarios que previamente tenian definido un sell en /etc/passwd entocnes seran capaces de conectarse a el servidor y actualizar su contraseña "windows" usando el script /usr/sbin/smbldap-passwd

7.2. Migracion de grupos ( de /etc/group)

Ahora migraremos los grupos de el archivo /etc/group. El proceso de migracion debera de hacerse como sigue:

  1. copiar /etc/grooup a un directorio tempora:

    cp /etc/group /tmp/
  2. Remueve todos los grupos que no quieres que esten en el directorio:

    for group in root bin daemon
    do
            export group
            perl -i -pe’s@^$ENV{group}:(.*)\n@@’ /tmp/group
    done
  3. Migrar grupos:

    /usr/share/doc/smbldap-tools-*/smbldap-migrate-group -a -G /tmp/group
  4. Remover grupos migrados de /etc/group

    Nota: con la opcion -a en smbldap-migrate-group, el sambaGroupMapping sera agregado a los grupos de manera que ellos podran ser usados como grupos "windows" (entonces samba mapeara los grupos unix a los grupos windows). Deberias de eliminar esta opcion si no quieres esto.

8. 

9. 

10. 

11. 

12. 

13. 

14. 

15. 

16. 

17. 

18. 

19. 

20. 

21. 

22. 

23. 

24. 

25. 

26. 

27. 

28.