Copyright © 2006 Jorge Armando Medina
Se otorga permiso para copiar, distribuir y/o modificar 鳴e documento bajo los t鲭inos de la Licencia de Documentaciibre GNU, Versi.2 o cualquier otra posterior publicada por la Fundacie 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.
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.
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).
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.
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).
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.
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.
Instalando y compilando el software clave (Samba y OpenLDAP), tratamos de mantener dos principios claves:
Deberemos de reforzar las recomendaciones de File Hierarchy Standard (FHS 3),
Seguiremos las recomendaciones de Linux Standard Base (LSB 4)
Debemos de pensar que nuestra PDC sera usado en una configuracion High Available (para un futuro de este HOWTO).
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.
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
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
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.
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).
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:
un usuario humano en la compañia,
Una cuenta de usaurio para sistemas Microsoft Windows y Unix,
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.
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 eqEntonces, 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 * readFinalmente, 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==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.
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
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.
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
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
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
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.
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
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
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).
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.
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.
Necesitamos agregar algunas entradas iniciales a el nuevo servidor OpenLDAP recien configurado:
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)
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
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
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
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?
Para:
iniciar/detener el servidor OpenLDAP:
/etc/init.d/slapd start/stop
iniciar/detener el servidor Samba:
/etc/init.d/samba start/stop
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/
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:
copia /etc/passwd y /etc/shadow a un directorio temporal:
cp /etc/passwd /etc/shadow /tmp/
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
doneNo olvides remover el usuario nobody ya que es creado cuando el directorio es inicializado con smbldap-populate.
Migracion de cuentas:
/usr/share/doc/smbldap-tools-*/smbldap-migrate-passwd -a -P /tmp/passwd -S /tmp/shadow
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
Ahora migraremos los grupos de el archivo /etc/group. El proceso de migracion debera de hacerse como sigue:
copiar /etc/grooup a un directorio tempora:
cp /etc/group /tmp/
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
doneMigrar grupos:
/usr/share/doc/smbldap-tools-*/smbldap-migrate-group -a -G /tmp/group
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.