Академический Документы
Профессиональный Документы
Культура Документы
PUESTA EN MARCHA DE UN SERVIDOR LDAP CON CERTIFICACIN TLS Y CONFIGURACIN DE CLIENTES LINUX Y WINDOWS PARA AUTENTIFICARSE CONTRA L
E-mail white.lists@gmail.com
Descripcin HowTo y Conceptos para levantar un servidor LDAP y autenticar clientes Linux/Windows contra l Versin: Pginas totales: Nombre de Archivo: v.0.0 52
DISCLAIMER: La informacin que aqu aparece puede no ser 100% correcta. He intentado hacerlo lo mejor posible, pero puede que haya cometido errores, principalmente por falta de conocimientos. Cualquier comentario, crtica, pregunta o correccin ser muy bien recibida en white.lists@gmail.com
ndice
Introduccin Instalacin y configuracin del servidor LDAP 2.1 Instalacin de LAM (Ldap Account Manager). 2.2. Aadir usuarios y grupos al servidor. 2.3. Probando el servidor 2.3.3 Posibles problemas 3. Instalacin y configuracin del cliente Linux. 3.1 Instalacin del software. 3.2 Indicar el servidor al que conectarse. 3.3 Resolucin de nombres del sistema 3.4 Haciendo login. 4. Introduccin de TLS 4.1 Creando la entidad certificadora (CA) 4.2 Creando certificados de las mquinas 4.3 Asegurando el servidor 4.4 Haciendo un cliente confiable 4.5 Posibles problemas 4.5.1 TLS Already started 4.5.2 I have no name! 4.5.3 Handshake failure 5. Autentificacin de una mquina Windows 5.1 Configuracin en el servidor. 5.1.1 Instalando el software 5.1.2 Aadir el esquema Samba a LDAP 5.1.3. Configurar Samba 5.1.3 Configurar y utilizar las smbldap-tools 5.2 Configuracin del cliente Windows 5.2.1 Comprobar que podemos acceder al servidor con test 5.2.2 Unirse al dominio JOME. 6. Links y referencias usados 1. 2. 4 6 9 11 14 19 21 21 21 22 25 28 28 29 32 33 38 38 38 39 40 40 40 40 41 42 48 48 49 52
1. Introduccin
Este tutorial se hizo con dos ordenadores que estn dentro de una LAN privada (formada conectando dos PCs en un router de telefnica) como la que cualquiera puede tener en su casa.
CLIENTE
CLIENTE
Xubuntu 7.10 (Gutsy Gibbon) Hostname: xxxx IPAddress: 192.168.1.30 Windows 2000 Professional SP4 Hostname: Enano IPAddress: dhcp
El ordenador cliente dispone de un arranque dual que le permite entrar tanto en una Debian como en un Windows 2000 Professional. Se va a instalar un servidor LDAP en xxxx, y all se crear un usuario de nombre test y password test (usuario que solamente existir en la base de datos de Ldap) y se va a explicar el proceso necesario para poder iniciar sesin con este usuario en el ordenador cliente (ya sea bajo Linux o bajo Windows). Este usuario pertenecer al grupo test, grupo que tambin existir nicamente en la base de datos Ldap. Para aclarar conceptos hay que entender antes de nada que Ldap no autentifica nada de por s; es nicamente una base de datos especialmente rpida en las lecturas, lo que pasa es que, como veremos ms adelante, se le puede decir el
HowTo Servidor LDAP y clientes Linux/Windows nombre de los usuarios lo coges de la tabla llamada tal, el nombre de los grupos de la tabla llamada cual pero tiene muchas ms utilidades; por ejemplo, puede usarse para almacenar direcciones de correo (agenda) en la que no se utiliza para autentificacin ni mucho menos. Para cuestiones de autentificacin existen otros mtodos, como NIS (o NIS+) y que, de hecho, para la autentificacin Linux Linux son mucho ms sencillos de configurar, pero son incompatibles con Windows. Tambin quiero aclarar que no se pretende migrar todos los usuarios del servidor a LDAP: solamente uno.
En este caso, el nombre del dominio es jome Despus, hay que buscar y configurar el fichero slapd.conf. En Ubuntu 7.10 este fichero se encuentra en /etc/ldap/slapd.conf. En distribuciones que utilicen otras versiones del servidor LDAP, como Fedora, puede encontrarse bajo /etc/openldap/. Si la re-configuracin con dpkg-reconfigure ha sido correcta, en el fichero /etc/ldap/slapd.conf ya se habrn escrito algunos datos bsicos. En negrita aparece lo ms relevante a la hora de para comprobar que la configuracin es correcta.
# Allow LDAPv2 binds allow bind_v2 # This is the main slapd configuration file. See slapd.conf(5) for more # info on the configuration options. ####################################################################### # Global Directives: # Features to permit #allow bind_v2 # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema # Where the pid file is put. The init.d script # will not stop the server if you change this. pidfile /var/run/slapd/slapd.pid # List of arguments that were passed to the server argsfile /var/run/slapd/slapd.args # Read slapd.conf(5) for possible values loglevel 0
1
# Indexing options for database #1 index objectClass eq # Save the time that the entry gets modified, for database #1 lastmod on # Where to store the replica logs for database #1 # replogfile /var/lib/ldap/replog # The userPassword by default can be changed # by the entry owning it if they are authenticated. # Others should not be able to see it, except the # admin entry below # These access lines apply to database #1 only access to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=jome" write by anonymous auth by self write by * none # # # # Ensure read access to the base for things like supportedSASLMechanisms. Without this you may have problems with SASL not knowing what mechanisms are available and the like.
En este momento el demonio slapd se habr puesto en marcha. En estas primeras etapas se puede comprobar si es as haciendo una bsqueda simple. # ldapsearch -x -b dc=jome Que debera proporcionar una salida vaca.
# extended LDIF # # LDAPv3 # base <dc=tured,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 34 Invalid DN syntax text: invalid DN # numResponses: 1
Si no funciona, o se quiere ms informacin se puede lanzar el servidor en una consola en modo foreground (no como demonio) con mucha salida de depurado. ~$killall slapd (para matar los demonios que haya corriendo) ~$slapd d 1 Esto iniciar el servidor en la mquina identificada como localhost, y puede que en la bsqueda haya que decrselo explcitamente: ~$ldapsearch x h localhost b dc=jome Tambin existe la funcin slapcat, que muestra el contenido del servidor en formato LDIF. Una herramienta para chequear este fichero y estudie su sintaxis, proporcionando incluso avisos de seguridad es el comando slaptest (~#slaptest v) 8
2.1
La forma ms rpida de gestionar un servidor y ver su contenido es utilizar una herramienta web de gestin, como LAM 2 . Es un paquete que existe ya en Ubuntu, con lo cual, instalarlo es fcil: ~$apt-get install ldap-account-mannager Al ser una herramienta web de gestin depende, entre otros, de Apache y Php. Una vez funcionando, puede utilizarse tecleando en la barra de cualquier navegador http://direccin_del_servidor/lam. Por ejemplo, si el servidor est en 192.168.1.30:
Puede que no est bien configurado por defecto: es decir, que el servidor o el nombre del usuario administrador no sean los correctos. En ese caso, hay que acudir al link LAM configuration que aparece en la parte superior derecha de la pgina: Al hacer clic en l, se abrir una nueva pgina en la que podremos controlar configuracin en general o configuracin de datos del servidor:
Al intentar hacer cambios pide passwords. Cuidado! No hay que escribir aqu el del servidor LDAP, sino los de la aplicacin LAM. Puede tener varios passwords distintos: Uno de es necesario para aadir, borrar y renombrar perfiles de
2
HowTo Servidor LDAP y clientes Linux/Windows configuracin globales y se almacena en /etc/ldap-accountmanager/config.cfg. El otro es el password de un perfil de conexin concreto (puede que utilicemos la misma instancia de LAM para supervisar varios servidores).Se puede establecer en Edit server profiles como se detalla a continuacin Entrando en Edit server profiles aparece lo que se debe ajustar:
Los campos ms importantes son los que aparecen arriba del todo (Preferencias del servidor) y al final (Preferencias de seguridad).El nombre del servidor es importante. Depende de cmo se arranque el demonio slapd. Es lo que se le indica con el parmetro h si se arranca en consola, o lo que se establezca en las opciones por defecto que aparecen en /etc/default/slapd (lo veremos ms adelante, en la pgina 13).
10
Se deben crear, en la base de datos de LDAP, las entradas que se correspondern con los usuarios, los grupos y los hosts. Para entender esto, obsrvese las primeras lneas de /etc/nsswitch.conf. All aparecen: passwd group shadow Se desea que (en los clientes que se autentificarn contra nuestro servidor) esas entradas tambin se vayan a resolver con LDAP y que un usuario que solo exista en el servidor LDAP pueda iniciar sesin. Para ello, hay que aadir unas tablas en la base de datos de LDAP: People: para almacenar los usuarios (y el shadow) Groups: para almacenar los grupos Hosts: para almacenar informacin sobre las mquinas (ser til, como veremos ms adelante, para Samba)
Como se ver a lo largo del documento, no tienen necesariamente que llamarse as. Estos campos (o tablas) pueden crearse muy fcilmente con la herramienta LAM. Si no se quiere (o no se puede) utilizar, deben aadirse por consola en formato ldif3 . Para aadir estos grupos, crear un fichero (donde sea, puede ser incluso en /tmp) que contenga lo siguiente:
dn: ou=Groups,dc=jome objectClass: top objectClass: organizationalUnit ou: Group dn: ou=People,dc=jome objectClass: top objectClass: organizationalUnit ou: People dn: ou=Hosts,dc=jome objectClass: top objectClass: organizationalUnit ou: Hosts
11
HowTo Servidor LDAP y clientes Linux/Windows El nombre del fichero no es relevante. Suponiendo que en este caso fuese OUs.ldif, habra que hacer lo siguiente para introducir su informacin el servidor:
root@xxxx:/tmp# ldapadd -x -D 'cn=Admin,dc=jome' -W -f OUs.ldif Enter LDAP Password: LDAPpassword adding new entry "ou=People,dc=jome" adding new entry "ou=Groups,dc=jome" adding new entry "ou=Hosts,dc=jome"
Grficamente se puede ver lo ocurrido: En LAM, hacer clic sobre el link Refrescar y ah aparecen:
Ahora hay que aadir un grupo y un usuario de test. Se puede hacer grficamente con LAM o con una entrada Ldif. Vemoslo ms detalladamente con este ltimo mtodo. De momento, el usuario ser una cuenta normal (para eso tiene que ser una objectClass: posixAccount). El usuario tendr un password, que ser test. ste puede almacenarse en texto plano (con lo cual, el campo userPassword del usuario no tiene ms que ser: userPassword: test) o encriptado. Siempre es ms seguro una encriptacin md5. Para ver qu hash Md5 se corresponde con la cadena test, ejecutar: root@xxxx:~# slappasswd h {MD5} s test {MD5}CY9rzUYh03PK3k6DJie09g== Para aadir el usuario y el grupo, poner en un fichero .ldif lo siguiente:
# Fichero /tmp/user_group.ldif # Testing Group#
dn: cn=test,ou=Group,dc=jome objectClass: top objectClass: posixGroup cn: test gidNumber: 2000
dn: uid=test,ou=People,dc=jome objectClass: top objectClass: account objectClass: posixAccount uid: test cn: Test User userPassword: {MD5}CY9rzUYh03PK3k6DJie09g== gecos: Test User uidNumber: 2000 gidNumber: 2000 homeDirectory: /home/test loginShell: /bin/bash
HowTo Servidor LDAP y clientes Linux/Windows Con LAM puede verse grficamente lo ocurrido:
Ya prcticamente est configurado el servidor. Ahora se deben indicar las opciones de arranque por defecto. Eso se hace en el fichero /etc/default/slapd.
# Default location of the slapd.conf file SLAPD_CONF="/etc/ldap/slapd.conf" # System account to run the slapd server under. If empty the server # will run as root. SLAPD_USER="openldap" # System group to run the slapd server under. If empty the server will # run in the primary group of its user. SLAPD_GROUP="openldap" # Path to the pid file of the slapd server. If not set the init.d script # will try to figure it out from $SLAPD_CONF (/etc/ldap/slapd.conf) SLAPD_PIDFILE= # Configure if the slurpd daemon should be started. Possible values: # - yes: Always start slurpd # - no: Never start slurpd # - auto: Start slurpd if a replica option is found in slapd.conf (default) SLURPD_START=auto # slapd normally serves ldap only on all TCP-ports 389. slapd can also # service requests on TCP-port 636 (ldaps) and requests via unix # sockets. # Example usage: SLAPD_SERVICES="ldap://xxxx:389/ ldaps://xxxx:636/ ldapi:///" # Additional options to pass to slapd and slurpd SLAPD_OPTIONS="" SLURPD_OPTIONS=""
Son importantes los servicios que se arrancarn (lnea en negrita). Si desde el exterior se accede al servidor LDAP de la mquina xxxx, hay que arrancarlo as. Es decir (suponiendo que la IP de la mquina xxxx fuese la 192.168.1.30) no es lo mismo arrancar con ldap://192.168.1.30:389/ que con ldap://xxxx:389/.
13
passwd: group: shadow: hosts: networks: protocols: services: ethers: rpc: netgroup:
files mdns4_minimal [NOTFOUND=return] dns mdns4 files db db db db files files files files
nis
Para buscar los passwd, group y shadow el sistema acudir primero a los ficheros locales y luego al servidor LDAP. Inicialmente estn nicamente en compat, que es que acuda a mirar a ficheros locales (la diferencia con files es que compat permite la compatibilidad con formatos de fichero antiguos) 2.3.2 Identificar las bases de datos del sistema con las OUs de LDAP Ahora hay que indicar qu OUs almacenan qu datos del sistema. Indicarle al sistema que los usuarios los tiene que ir a buscar a la OU:People, los grupos a la OU:Groups y en qu servidores se encuentran dichas OUs. En Ubuntu eso se hace en el fichero /etc/ldap.conf. Versiones anteriores de LDAP (como la usada en Debian Etch) dividen este fichero en dos que son prcticamente redundantes. Ahora estn unidos. Una posibilidad es:
###DEBCONF### ## ## Configuration of this file will be managed by debconf as long as the ## first line of the file says '###DEBCONF###' ## ## You should use dpkg-reconfigure to configure this file via debconf ## # # # # # # # # # @(#)$Id: ldap.conf,v 1.38 2006/05/15 08:13:31 lukeh Exp $ This is the configuration file for the LDAP nameservice switch library and the LDAP PAM module. PADL Software http://www.padl.com
# Your LDAP server. Must be resolvable without using LDAP. # Multiple hosts may be specified, each separated by a
14
15
16
17
test:*:2000:2000:Test User:/home/test:/bin/bash
18
HowTo Servidor LDAP y clientes Linux/Windows Efectivamente, aparece al final. Puede observarse que en campo correspondiente al password aparece un *. Eso es porque este usuario no es shadow. Para que lo sea, hay que aadir un nuevo atributo a nuestro usuario en LDAP: hay que aadirle la objectClass: shadowAccount. En nuestro caso, estos fueron sus campos: objectClass shadowExpire shadowFlag shadowInactive shadowLastChange shadowMax shadowMin shadowWarning Ahora ya s:
root@xxxx: getent passwd root:x:0:0:Admin:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh openldap:x:109:120:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
[. . .]
test:x:2000:2000:Test User:/home/test:/bin/bash
Ahora debera ser posible crear un fichero cualquiera y establecer como propietario al usuario test del grupo test (con el comando chown test:test <fichero>)
/etc/ldap/MisChastillas/nsswitch.conf.Sin.Ldap
# # # # # # /etc/nsswitch.conf Example configuration of GNU Name Service Switch functionality. If you have the `glibc-doc-reference' and `info' packages installed, try: `info libc "Name Service Switch"' for information about this file.
19
nis
nis
A continuacin, modificar los mtodos start() y stop() del script de inicio de LDAP (/etc/init.d/slapd). En la versin que nos ocupa, estos mtodos se encontraban entre las lneas 179 y 210 de dicho fichero, y quedaron as:
# Start the OpenLDAP daemons start() { echo -n "Starting OpenLDAP:" trap 'report_failure' 0 start_slapd start_slurpd trap "-" 0 rm /etc/nsswitch.conf if [ -f "$SLAPD_PIDFILE" ]; then echo -n "\nSlapdRunning (PID found): Moviendo fichero Nsswitch" ln -s /etc/ldap/MisChastillas/nsswitch.conf.ConLdap /etc/nsswitch.conf else echo -n "\nError rasing SLAPD" ln -s /etc/ldap/MisChastillas/nsswitch.conf.SinLdap /etc/nsswitch.conf fi echo . } # Stop the OpenLDAP daemons stop() { echo -n "Stopping OpenLDAP:" trap 'report_failure' 0 stop_slurpd stop_slapd rm /etc/nsswitch.conf ln -s /etc/ldap/MisChastillas/nsswitch.conf.SinLdap /etc/nsswitch.conf trap "-" 0 echo . }
20
3.2
Lo primero es decirle al sistema qu servidor debe utilizar para consultas al servidor. Eso se hace en el fichero /etc/ldap/ldap.conf. En este caso, y de momento, se utiliza una conexin sin encriptar (al puerto 389). El servidor est iniciado con ldap://xxxx:389, as que desde la mquina cliente se debe poder saber a qu IP corresponde ese hostname, es decir que un ping xxxx devuelva una respuesta satisfactoria. Si este nombre no aparece en los DNS del sistema (que ser lo ms probable), la forma ms fcil es retocar el fichero /etc/hosts y aadir la siguiente lnea: 192.168.1.30 xxxx.Jome xxxx Por claridad, es recomendable ponerlo justo antes de la seccin de IPv6. Con esto, se puede modificar /etc/ldap/ldap.conf indicando cual va a ser el servidor por defecto (para eso vale el fichero ldap.conf: para indicar opciones de LDAP por defecto a todo el sistema). El fichero /etc/ldap/ldap.conf puede quedar as:
# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57: # # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. #BASE dc=example, dc=com BASE dc=jome URI ldap://xxxx:389 #URI ldap://ldap.example.com ldap://ldap-master.example.com:666
21
3.3
Al igual que se haba explicado en el caso del servidor, (pgina 14) hay que modificar la forma de resolver los nombres en el sistema, indicando que se debe usar LDAP. Para ello, modificar las entradas passwd, shadow y hosts de /etc/nsswitch.conf para que quede: passwd: group: shadow: files ldap files ldap files ldap
A continuacin, y como se haca tambin en el caso del servidor (pgina 14), hay que indicar con qu entradas de LDAP deben corresponderse las entradas de las bases de datos locales. Como se ha adelantado en el punto 3.1, eso se hace con el fichero /etc/libnss-ldap.conf (a diferencia de Ubuntu, en el que se haca en /etc/ldap.conf). Es muy probable que al instalar el paquete libnss-ldap, se hayan hecho una serie de preguntas como cual es el servidor LDAP (que es xxxx), qu usuario tiene permisos de administracin (cn=admin,dc=jome), la versin de LDAP a usar (3), preguntas que ya habrn dado pie a una cierta auto-configuracin de este fichero libnss-ldap.conf, de manera que lo nico que haya que cambiar sean las entradas en las que se le dice al sistema con qu tablas de la base de datos LDAP debe hacer corresponder a las bases de datos del sistema. Debe quedar una cosa parecida a esto (NOTA: Se han eliminado bloques completos de comentarios para que ocupe menos. En los puntos en los que se ha eliminado informacin, aparece: [ . . .])
###DEBCONF### # the configuration of this file will be done by debconf as long as the # first line of the file says '###DEBCONF###' # # Your LDAP server. Must be resolvable without using LDAP. # Multiple hosts may be specified, each separated by a # space. How long nss_ldap takes to failover depends on # whether your LDAP client library supports configurable # network or connect timeouts (see bind_timelimit). #host 127.0.0.1 # The distinguished name of the search base. base dc=jome # Another way to specify your LDAP server is to provide an uri ldap://xxxx/ # Unix Domain Sockets to connect to a local LDAP Server. #uri ldap://127.0.0.1/ #uri ldaps://127.0.0.1/ #uri ldapi://%2fvar%2frun%2fldapi_sock/ # Note: %2f encodes the '/' used as directory separator # The LDAP version to use (defaults to 3 # if supported by client library) ldap_version 3 # The distinguished name to bind to the server with. # Optional: default is to bind anonymously. # Please do not put double quotes around it as they # would be included literally. #binddn cn=proxyuser,dc=padl,dc=com
22
[ . . . ]
# Remove old password first, then update in # cleartext. Necessary for use with Novell # Directory Services (NDS) #pam_password nds # RACF is an alias for the above. For use with # IBM RACF #pam_password racf # Update Active Directory password, by # creating Unicode password and updating # unicodePwd attribute. #pam_password ad # Use the OpenLDAP password change # extended operation to update the password. #pam_password exop # Redirect users to a URL or somesuch on password # changes. #pam_password_prohibit_message Please visit http://internal to change your password # Use backlinks for answering initgroups() #nss_initgroups backlink # Enable support for RFC2307bis (distinguished names in group # members) #nss_schema rfc2307bis # RFC2307bis naming contexts # Syntax: # nss_base_XXX base?scope?filter # where scope is {base,one,sub} # and filter is a filter to be &'d with the # default filter. # You can omit the suffix eg: # nss_base_passwd ou=People, # to append the default base DN but this # may incur a small performance impact. nss_base_passwd ou=People,dc=jome?one nss_base_shadow ou=People,dc=jome?one nss_base_group ou=Groups,dc=jome?one nss_base_hosts ou=Hosts,dc=jome?one #nss_base_services ou=Services,dc=padl,dc=com?one #nss_base_networks ou=Networks,dc=padl,dc=com?one
23
[ . . . ]
# CA certificates for server certificate verification # At least one of these are required if tls_checkpeer is "yes" #tls_cacertfile /etc/ssl/ca.cert #tls_cacertdir /etc/ssl/certs # Seed the PRNG if /dev/urandom is not provided #tls_randfile /var/run/egd-pool # SSL cipher suite # See man ciphers for syntax #tls_ciphers TLSv1 # Client certificate and key # Use these, if your server requires client authentication. #tls_cert #tls_key # Disable SASL security layers. This is needed for AD. #sasl_secprops maxssf=0 # Override the default Kerberos ticket cache location. #krb5_ccname FILE:/etc/.ldapcache
test:x:2000:2000:Test User:/home/test:/bin/bash
Y se pueden tener ficheros cuyo dueo sea test: Enano:/tmp# touch prueba Enano:/tmp# chown test:test prueba 24
HowTo Servidor LDAP y clientes Linux/Windows Enano:/tmp# ls -l total 3 -rw-r--r-- 1 test test
Si el servidor LDAP se cayese, quedaran el Uid y el Gid preservados: Enano:/tmp# ls -l total 3 -rw-r--r-- 1 2000 2000
Hay que decir que el password para el usuario administrador de LDAP (cn=admin, dc=jome) debe estar almacenado en texto claro en /etc/libnss-ldap.secret. Por eso, ese fichero nicamente debe ser legible por root: Enano:/etc# ls l /etc/libnss-ldap.secret -rw------- 1 root root 8 2008-01-12 23:47 /etc/libnss-ldap.secret Esto debera ser suficiente para entrar en sesin con test. De momento, la nica manera de hacerlo es pasar desde el usuario root al usuario test, porque cuando root quiere convertirse en un usuario normal, no se le pide password. Enano:~#su test test@Enano:/root$
3.4
Haciendo login.
Ahora solo nos queda que el usuario test pueda loguearse. Para ello, hay que retocar el fichero /etc/pam_ldap.conf. De forma resumida (sin comentarios) porque es prcticamente igual que /etc/libnss-ldap.conf), debe quedar:
###DEBCONF### base dc=jome uri ldap://xxxx/ ldap_version 3 rootbinddn cn=Admin,dc=jome pam_password md5 # RFC2307bis naming contexts # Syntax: # nss_base_XXX base?scope?filter # where scope is {base,one,sub} # and filter is a filter to be &'d with the # default filter. # You can omit the suffix eg: # nss_base_passwd ou=People, # to append the default base DN but this # may incur a small performance impact. nss_base_passwd ou=People,dc=jome?one nss_base_shadow ou=People,dc=jome?one nss_base_group ou=Groups,dc=jome?one nss_base_hosts ou=Hosts,dc=jome?one #nss_base_services ou=Services,dc=padl,dc=com?one #nss_base_networks ou=Networks,dc=padl,dc=com?one #nss_base_protocols ou=Protocols,dc=padl,dc=com?one
25
HowTo Servidor LDAP y clientes Linux/Windows Luego hay que modificar tambin los ficheros de pilas PAM (que se encuentran en /etc/pam.d/) Conviene entender que, en Linux, cuando un usuario intenta ejecutar algn servicio que requiere validacin, el sistema acude a los archivos de /etc/pam.d/ y mira con qu modulo PAM debe intentar autentificar el servicio en cuestin (ms informacin en http://www.linuxjournal.com/article/2120). Hay unos ficheros comunes que comienzan por common- que se van importando conforme se necesitan en las pilas PAM de los servicios que requieren autentificacin. Esos son los que hay que modificar 5 (aunque no es necesario modificar common-session). common-account (Qu hacer para a la hora de mapear cuentas del sistema) account account sufficient required pam_ldap.so pam_unix.so
common-auth (Qu hacer cuando se quiera autentificar un usuario) auth auth sufficient required pam_ldap.so pam_unix.so use_first_pass nullok_secure
common-password (Qu hacer cuando se quieran cambiar contraseas) password sufficient password required pam_ldap.so pam_unix.so md5 nullok obscure min4 max8 md5
As ya debera poderse entrar en el sistema con el usuario test, e incluso cambiar su password con el comando estndar passwd. Se puede observar que, efectivamente, al modificar el pasword se modifica en LDAP. test@Enano:/$passwd Enter login(LDAP) password:test New password: testar Re-enter new password:testar LDAP password information changed for test passwd: contrasea actualizada correctamente Eso s: como en realidad su directorio home no existe, el sistema lo reenviar al directorio raz / (al loguearnos aparecer un mensaje del estilo No directory, logging in with HOME=/) Una buena manera de comprobar que la configuracin PAM funciona correctamente es utilizando el comando pamtest que proporciona el paquete libpam-dotfile. Hace pruebas contra los mdulos PAM (se explica al final de http://informatica.iescuravalera.es/iflica/gtfinal/libro/x4915.html) Una vez instalado (con ~# apt-get install libpam-dotfile) podr chequearse si un determinado usuario consigue autentificarse en un determinado servicio. Por ejemplo, para saber si el usuario test puede cambiar su contrasea, se ejecutara: Enano:~# pamtest passwd test Trying to authenticate <test> for service <passwd>. Password: test
5
Utilizado: http://help.ubuntu.com/community/LDAPClientAuthentication
26
HowTo Servidor LDAP y clientes Linux/Windows Authentication successful. Sin embargo, al intentar hacer login con un usuario inexistente: Enano:~# pamtest login pepe Trying to authenticate <pepe> for service <login>. Password: pepe Failed to authenticate: User not known to the authentication module
underlying
27
4. Introduccin de TLS
Para hacer esto se ha seguido la gua encontrada en http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html (puntos 4.2 en adelante y 5) Si no se dispone de una entidad certificadora externa, hay que crear una propia. Esto ser suficiente para una red local.
28
Esto debera crear un directorio llamado demoCA con todos los datos necesarios de la entidad certificadora (incluyendo su propio certificado, cacert.pem)
root@xxxx:/var/lib/ldap/certs/myCA# ls -l demoCA/ total 40 -rw-r--r-drwxr-xr-x drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x drwxr-xr-x -rw-r--r--rw-r--r-1 2 2 1 1 1 2 2 1 1 root root root root root root root root root root root root root root root root root root root root 802 4096 4096 133 21 0 4096 4096 3 3 2008-04-10 2008-04-10 2008-04-10 2008-04-10 2008-04-10 2008-04-10 2008-04-10 2008-04-10 2008-04-10 2008-04-10 15:58 15:56 15:56 15:59 15:59 15:56 15:59 15:56 15:59 15:56
careq.pem certs crl index.txt index.txt.attr index.txt.old newcerts private serial serial.old
4.2
Ahora hay que crear el certificado del servidor y de los clientes para que la CA lo firme. Tcnicamente es una clave RSA, pero es preferible no llamarla key porque est sin firmar. La key ser este certificado firmado por la CA. Cuidado: aqu es importante que el Common name que preguntar durante el proceso sea el hostname de la mquina que se va a certificar con este certificado. En el caso del servidor, xxxx, y en el del cliente, Enano. Si no es as, el certificado no ser vlido. El proceso para el servidor y para los clientes es igual, pero cambiando el Common name. Como ejemplo, se detalla lo hecho para obtener un certificado para el servidor:
root@xxxx:/var/lib/ldap/certs# openssl req -newkey rsa:1024 -nodes -keyout newreq.pem -out newreq.pem Generating a 1024 bit RSA private key .............................++++++ .++++++ writing new private key to 'newreq.pem' ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN.
29
Efectivamente, el request se ha creado root@xxxx:/var/lib/ldap/certs# ls myCA newreq.pem Ahora, que lo firme la entidad certificadora. Para que sta lo vea, tiene que estar dentro del directorio myCA/
root@xxxx:/var/lib/ldap/certs# mv newreq.pem myCA/ root@xxxx:/var/lib/ldap/certs# cd myCA/ root@xxxx:/var/lib/ldap/certs/myCA# /usr/lib/ssl/misc/CA.sh -sign Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: rootCA Check that the request matches the signature La que se haya Signature ok puesto al crear la CA Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Apr 10 14:23:12 2008 GMT Not After : Apr 10 14:23:12 2009 GMT Subject: countryName = es stateOrProvinceName = Aragon localityName = Zaragoza organizationName = jome organizationalUnitName = ninguna commonName = xxxx emailAddress = white.lists@gmail.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 28:F0:5F:D8:7E:33:93:67:ED:21:7A:E3:4B:5E:0A:53:AF:70:4B:74 X509v3 Authority Key Identifier: keyid:C8:9D:23:B6:F6:CF:25:CA:07:31:50:C7:75:22:B7:B6:8F:D2:5B:F2 Certificate is to be certified until Apr 10 14:23:12 2009 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption
30
Efectivamente, ah aparece: root@xxxx:/var/lib/ldap/certs/myCA# ls demoCA newcert.pem newreq.pem Ahora solo queda mover los datos necesarios (la CA, key del servidor y key del servidor firmada) a sus directorios (pueden ser cualquiera).
root@xxxx: mkdir /var/lib/ldap/certs/Server root@xxxx:/var/lib/ldap/certs/myCA# cp demoCA/cacert.pem /var/lib/ldap/certs/cacert.pem root@xxxx:/var/lib/ldap/certs/myCA# mv newcert.pem /var/lib/ldap/certs/Server/server_crt.pem root@xxxx:/var/lib/ldap/certs/myCA# mv newreq.pem /var/lib/ldap/certs/Server/server_key.pem root@xxxx:/var/lib/ldap/certs/myCA# chmod 400 /var/lib/ldap/certs/Server/server_key.pem
Cuidado: Ahora el demonio que arranque LDAP tiene que tener permisos para leer estos certificados (si no, no arrancar). Tal y como est hecho hasta ahora, solo el usuario root tiene acceso (de solo lectura a la server_key.pem). Viendo /etc/default/slapd se observa una opcin que dice: SLAPD_USER=openldap con lo cual, no podr arrancar. Hay que cambiar al dueo de server_key.pem:
root@xxxx: chown openldap /var/lib/ldap/certs/Server/server_key.pem
31
HowTo Servidor LDAP y clientes Linux/Windows La entidad certificadora recin creada puede usarse para crear los certificados de los clientes. Ser como lo hecho para crear un certificado para el servidor y que la CA lo firme, pero cambiando el Common Name por el de los clientes. Por ejemplo, un cliente ser la mquina Enano. Pues los pasos a seguir para crear un certificado para Enano son, de manera muy resumida:
root@xxxx:/var/lib/ldap/certs# openssl req -newkey rsa:1024 -nodes newreq.pem -out newreq.pem (Decirle que el Common name es Enano) root@xxxx:/var/lib/ldap/certs/myCA# /usr/lib/ssl/misc/CA.sh -sign -keyout
Esto proporcionar, al igual que antes, dos certificados (newreq.pem y newcert.pem). Estos certificados, y el de la entidad certificadora (cacert.pm) hay que llevarlos a la mquina Enano
4.3
Asegurando el servidor
con TLS, aadir al final de
TLSCipherSuite HIGH:MEDIUM+SSLv2 TLSACertificateFile /var/lib/ldap/certs/cacert.pem TLSCertificateFile /var/lib/ldap/certs/Server/server_crt.pem TLSCertificateKeyFile /var/lib/ldap/certs/Server/server_key.pem TLSVerifyClient hard
Es importante saber los niveles de verificacin del cliente. Pueden ser never | allow | try | demand,hard6 .Lo ideal es hard.. Con esto, se debera poder arrancar el servidor siempre en modo seguro. Es decir, se puede editar /etc/default/slapd y hacer: SLAPD_SERVICES=ldaps://xxxx:636 ldapi:/// Reiniciar el servidor y ver que los cambios han quedado correctamente reflejados:
root@xxxx:/home/hector# /etc/init.d/slapd restart Stopping OpenLDAP: slapd. Starting OpenLDAP: slapd root@xxxx:/home/hector# ps aux|grep slapd root 7004 0.0 0.0 2988 772 pts/0 S+
openldap 6999 0.0 0.1 15084 2700 ? Ssl 15:42 0:00 /usr/sbin/slapd -h ldaps://xxxx:636/ ldapi:/// -g openldap -u openldap -f /etc/ldap/slapd.conf
15:42 0:00 grep slapd
Se puede ver que el nico puerto en el que LDAP est escuchando es el puerto seguro:
root@xxxx:/home/hector# netstat -l -p -tcp Conexiones activas de Internet (solo servidores) Protocolo Recv-Q Send-Q Direccin Local Direccin Externa tcp 0 0 *:kshell *:* tcp 0 0 *:kerberos-adm *:* tcp 0 0 *:pop3 *:* tcp 0 0 *:www *:* tcp 0 0 *:ftp *:* tcp 0 0 localhost:ipp *:* tcp 0 0 *:telnet *:*
6
Estado PID/Program name ESCUCHAR 5982/inetd ESCUCHAR 5982/inetd ESCUCHAR 5982/inetd ESCUCHAR 6241/apache2 ESCUCHAR 5982/inetd ESCUCHAR 5870/cupsd ESCUCHAR 5982/inetd
32
tcp
0
0 0 0 0
0 xxxx:ldaps
0 0 0 0
*:*
*:* *:* *:* *:*
ESCUCHAR
ESCUCHAR ESCUCHAR ESCUCHAR ESCUCHAR
6999/slapd
5982/inetd 5836/sshd 5870/cupsd 5944/kdc
4.4
En /etc/ldap/ldap.conf se permite indicar la ruta a la entidad certificadora (con la directiva TLS_CACERT) y si se debe intentar validar el certificado proporcionado por el servidor (con TLS_REQCERT). La opcin ms restrictiva y segura es hard (al igual que lo que ocurra con las opciones del aseguramiento del servidor, explicadas en la pgina 32) As, un fichero /etc/ldap/ldap.conf viable podra ser:
# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 kurt Exp $ # # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. #BASE dc=example, dc=com BASE dc=jome URI ldaps://xxxx:636 #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 TLS_CACERT /var/lib/ldap/certs/cacert.pem TLS_REQCERT hard
Por otro lado, hay que indicarle la ruta a los certificados. Esto no puede indicarse en fichero /etc/ldap/ldap.conf (que contiene opciones genricas) y hay que crear, en cada directorio $HOME de los usuarios que se vayan a conectar al servidor un fichero llamado .ldaprc (o ldaprc, sin el punto) con esa informacin. Est bien explicado en http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html#5.2.1 Un fichero /root/.ldaprc vlido sera:
#/root/.ldaprc TLS_CERT /var/lib/ldap/certs/client_crt.pem TLS_KEY /var/lib/ldap/certs/client_key.pem
Aqu hay que tener cuidado con dos cosas: 1. Los contenidos de este fichero tienen prioridad sobre las opciones genricas establecidas en /etc/ldap/ldap.conf (con lo cual, si hubisemos puesto en .ldaprc que TLS_REQCERT never, no se intentara chequear la validez del servidor). 2. El usuario al que pertenezca este fichero tiene que tener permisos para leer los certificados. Normalmente la client_key tendr permisos a 400, es decir, solo root lo puede leer. En este caso, no hay problema, porque es root el usuario de este .ldaprc, pero podra ser que no. 33
HowTo Servidor LDAP y clientes Linux/Windows El siguiente paso es modificar los ficheros /etc/libnss-ldap.conf y /etc/pam_ldap.conf (si el cliente es Debian, como en el presente caso) o /etc/ldap.conf si el cliente fuese Ubuntu (como ocurre en el servidor, que acta como cliente conectndose a s mismo). Como para cualquiera de los casos, la configuracin es igual, solamente se va a detallar el utilizado en xxxx (que, al ser una Ubuntu, se tratar del fichero /etc/ldap.conf). El lector ser los suficientemente inteligente como para darse cuenta de que hay cosas, como las rutas a los certificados (opciones tls_cert y tls_key), que varan en funcin de la mquina en la que estn los ficheros.
###DEBCONF### ## ## Configuration of this file will be managed by debconf as long as the ## first line of the file says '###DEBCONF###' ## ## You should use dpkg-reconfigure to configure this file via debconf ## # # # # # # # # # @(#)$Id: ldap.conf,v 1.38 2006/05/15 08:13:31 lukeh Exp $ This is the configuration file for the LDAP nameservice switch library and the LDAP PAM module. PADL Software http://www.padl.com
# Your LDAP server. Must be resolvable without using LDAP. # Multiple hosts may be specified, each separated by a # space. How long nss_ldap takes to failover depends on # whether your LDAP client library supports configurable # network or connect timeouts (see bind_timelimit). #host xxxx # The distinguished name of the search base. base dc=jome # Another way to specify your LDAP server is to provide an # uri with the server name. This allows to use # Unix Domain Sockets to connect to a local LDAP Server. #uri ldap://127.0.0.1/ #uri ldaps://127.0.0.1/ #uri ldapi://%2fvar%2frun%2fldapi_sock/ # Note: %2f encodes the '/' used as directory separator uri ldaps://xxxx:636 # The LDAP version to use (defaults to 3 # if supported by client library) ldap_version 3 # The distinguished name to bind to the server with. # Optional: default is to bind anonymously. #binddn cn=proxyuser,dc=padl,dc=com # The credentials to bind with. # Optional: default is no credential. #bindpw secret # The distinguished name to bind to the server with # if the effective user ID is root. Password is # stored in /etc/ldap.secret (mode 600) rootbinddn cn=Admin,dc=jome # The port. # Optional: default is 389. #port 636 # The search scope. #scope sub #scope one #scope base
34
35
36
37
Es decir, que no es capaz de resolver el usuario que se corresponde con Uid=2000. De hecho, esto es lo que ocurre al hacer un whoami: I have no name!@Enano:/$ whoami whoami: cannot find name for user ID 2000 38
Eso es porque el cliente no est proporcionando los certificados correctamente. De hecho, al ejecutar el servidor en foreground y salida verbosa, aparece lo siguiente:
root@xxxx:/home/hector# slapd -h "ldaps://xxxx:636" -d 1 @(#) $OpenLDAP: slapd 2.3.35 (Mar 5 2008 15:11:54) $ buildd@terranova:/build/buildd/openldap2.32.3.35/debian/build/servers/slapd daemon_init: listen on ldaps://xxxx:636
TLS trace: SSL_accept:error in SSLv3 read client certificate A TLS trace: SSL_accept:error in SSLv3 read client certificate A
connection_get(11): got connid=0 connection_read(11): checking for input on id=0 TLS trace: SSL3 alert write:fatal:handshake failure TLS trace: SSL_accept:error in SSLv3 read client certificate B TLS: can't accept. connection_read(11): TLS accept failure error=-1 id=0, closing connection_closing: readying conn=0 sd=11 for close connection_close: conn=0 sd=11
Chequear que existe el fichero $HOME/.ldaprc y que en su contenido se han establecido correctamente TLS_CERT y TLS_KEY apuntando a los certificados del cliente.
39
5.1
Configuracin en el servidor.
tutorial:
Es muy importante utilizar la versin 0.9.5 7 de smblap-tools o posterior, ya que existen problemas graves a la hora de crear mquinas Samba en el servidor LDAP con versiones anteriores (no crea los campos Samba necesarios).
[ . . . ]
40
41
HowTo Servidor LDAP y clientes Linux/Windows Samba debe conocer el password del usuario administrador especificado en este fichero (en la lnea ldap admin dn = cn=Admin,dc=jome). Se le proporciona ejecutando: ~# smbpasswd w password_del_admin_LDAP Setting stored password for cn=Admin,dc=jome in secrets.tdb (El password se almacenar en /var/lib/samba/secrets.tdb) Para comprobar que el fichero de configuracin no contiene errores, ejecutar el comando testparm.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software
42
############################################################################## # # General Configuration # ############################################################################## # Put your own SID. To obtain this number do: "net getlocalsid". # If not defined, parameter is taking from "net getlocalsid" return SID="S-1-5-21-2710697030-1106397243-3057445555" # Domain name the Samba server is in charged. # If not defined, parameter is taking from smb.conf configuration file # Ex: sambaDomain="IDEALX-NT" sambaDomain="JOME" ############################################################################## # # LDAP Configuration # ############################################################################## # # # # # # # Notes: to use to dual ldap servers backend for Samba, you must patch Samba with the dual-head patch from IDEALX. If not using this patch just use the same server for slaveLDAP and masterLDAP. Those two servers declarations can also be used when you have . one master LDAP server where all writing operations must be done . one slave LDAP server where all reading operations must be done (typically a replication directory)
# Slave LDAP server # Ex: slaveLDAP=127.0.0.1 # If not defined, parameter is set to "127.0.0.1" slaveLDAP="xxxx" # Slave LDAP port # If not defined, parameter is set to "389" slavePort="389" # Master LDAP server: needed for write operations # Ex: masterLDAP=127.0.0.1 # If not defined, parameter is set to "127.0.0.1" masterLDAP="xxxx" # Master LDAP port # If not defined, parameter is set to "389" masterPort="389" # Use TLS for LDAP # If set to 1, this option will use start_tls for connection # (you should also used the port 389) # If not defined, parameter is set to "1" ldapTLS="1" # How to verify the server's certificate (none, optional or require) # see "man Net::LDAP" in start_tls section for more details verify="require" # CA certificate # see "man Net::LDAP" in start_tls section for more details cafile="/var/lib/ldap/certs/cacert.pem" # certificate to use to connect to the ldap server # see "man Net::LDAP" in start_tls section for more details clientcert="/var/lib/ldap/certs/Server/server_crt.pem" # key certificate to use to connect to the ldap server # see "man Net::LDAP" in start_tls section for more details clientkey="/var/lib/ldap/certs/Server/server_key.pem" # LDAP Suffix # Ex: suffix=dc=IDEALX,dc=ORG suffix="dc=jome" # Where are stored Users
43
# Where to store next uidNumber and gidNumber available for new users and groups # If not defined, entries are stored in sambaDomainName object. # Ex: sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}" # Ex: sambaUnixIdPooldn="cn=NextFreeUnixId,${suffix}" sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}" # Default scope Used scope="sub" # Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT) hash_encrypt="MD5" # if hash_encrypt is set to CRYPT, you may set a salt format. # default is "%s", but many systems will generate MD5 hashed # passwords if you use "$1$%.8s". This parameter is optional! crypt_salt_format="%s" ############################################################################## # # Unix Accounts Configuration # ############################################################################## # Login defs # Default Login Shell # Ex: userLoginShell="/bin/bash" userLoginShell="/bin/bash" # Home directory # Ex: userHome="/home/%U" userHome="/home/%U" # Default mode used for user homeDirectory userHomeDirectoryMode="700" # Gecos userGecos="System User" # Default User (POSIX and Samba) GID defaultUserGid="513" # Default Computer (Samba) GID defaultComputerGid="515" # Skel dir skeletonDir="/etc/skel" # Default password validation time (time in days) Comment the next line if # you don't want password to be enable for defaultMaxPasswordAge days (be # careful to the sambaPwdMustChange attribute's value) defaultMaxPasswordAge="45" ############################################################################## # # SAMBA Configuration # ############################################################################## # The UNC path to home drives location (%U username substitution) # Just set it to a null string if you want to use the smb.conf 'logon home' # directive and/or disable roaming profiles
44
6. Editar el fichero de configuracin /etc/smbldap-tools/smbldap_bind.conf para que las smbldap-tools se puedan conectar como administrador (cn=admin., dc=jome) al servidor LDAP.
############################ # Credential Configuration # ############################ # Notes: you can specify two differents configuration if you use a # master ldap for writing access and a slave ldap server for reading access # By default, we will use the same DN (so it will work for standard Samba # release) slaveDN="cn=Admin,dc=jome" slavePw="password_del_administrador_del_servidor_Ldap" masterDN="cn=Admin,dc=jome" masterPw="password_del_administrador_del_servidor_Ldap"
Aqu las contraseas no pueden ponerse cifradas, as que este fichero tiene que ser legible (y editable) nicamente por root. (Ejecutar: chmod 600 /etc/smbldaptools/smbldap_bind.conf). 7. Aadir grupos Samba y algunos usuarios necesarios con el script smbldappopulate:
root@xxxx:/etc/smbldap-tools# smbldap-populate Populating LDAP directory for domain JOME (S-1-5-21-2710697030-1106397243-3057445555) (using builtin directory structure) entry dc=jome already exist.
45
Cuidado: Este root no es el del sistema. Es un usuario auxiliar que se ha aadido al servidor LDAP y que servir para, desde Windows, acceder a las cuentas de mquinas (mquinas Windows) sin necesidad de utilizar al root del sistema. Se puede ver que entre sus OUs aparece que es una sambaSamAccount y mltiples campos Samba:
root@xxxx:/mnt# ldapsearch -H "ldap://xxxx:389" -x -D "cn=Admin,dc=jome" \ -w password_del_Admin_LDAP uid=root # root, People, jome dn: uid=root,ou=People,dc=jome cn: root sn: root objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: sambaSamAccount objectClass: posixAccount objectClass: shadowAccount gidNumber: 0 uid: root uidNumber: 0 homeDirectory: /home/root sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaHomePath: \\PDC-SRV\root sambaHomeDrive: H: sambaProfilePath: \\PDC-SRV\profiles\root sambaPrimaryGroupSID: S-1-5-21-2710697030-1106397243-3057445555-512 sambaSID: S-1-5-21-2710697030-1106397243-3057445555-500 loginShell: /bin/false gecos: Netbios Domain Administrator sambaLMPassword: 157D69E4420D91787584248B8D2C9F9E sambaAcctFlags: [U] sambaNTPassword: 1BD788147CD18F08197106040F68B844 sambaPwdLastSet: 1208193287 sambaPwdMustChange: 1212081287 userPassword:: e01ENX1RZFJCZllNcUNEd1pCdkdscTZ6a0NnPT0= shadowLastChange: 13983 shadowMax: 45
Para poder utilizar este usuario como falso root (como dice en el tutorial: http://download.gna.org/smbldap-tools/docs/samba-ldap-howto/#htoc67 ) hay que darle privilegios: 46
8. Hacer que el usuario test sea un usuario vlido para Windows. Viendo los campos del usuario test, se observa que no tiene campos Samba, con lo cual, Windows no lo aceptar al intentar loguerase con l. Hay que hacer que los tenga. Lo primero es hacer que el grupo test al que pertenece nuestro usuario sea reconocido como grupo Samba. Para eso: root@xxxx:/# smbldap-groupmod a test A continuacin, aprovechar los scripts de smbldap-tools para aadir los campos Samba a test (lo ms importante es la opcin P, para dotarle de un password Samba).
root@xxxx:/home/hector# smbldap-usermod -P --givenName "test" -a -A "1" -B "1" \ -Z "cn=Test,displayName=Test User" test Use of uninitialized value in string at /usr/sbin/smbldap-usermod line 306. Use of uninitialized value in string eq at /usr/sbin/smbldap-usermod line 307. Use of uninitialized value in string eq at /usr/sbin/smbldap-usermod line 307. Use of uninitialized value in string eq at /usr/sbin/smbldap-usermod line 307. Use of uninitialized value in concatenation (.) or string at /usr/sbin/smbldapusermod line 307. Changing UNIX and samba passwords for test New password: test Retype new password:test
9. Aadir la mquina enano a los hosts. root@xxxx:/# smbldap-useradd -W enano Esto debera proporcionar una cuenta de mquina en el servidor LDAP (nota: para seguir la nomenclatura de Windows, el nombre que recibe es enano$.
root@xxxx:/home/hector# ldapsearch -H "ldap://xxxx:389" -x -D "cn=Admin,dc=jome" \ -w rutldap uid=enano$ # enano$, Hosts, jome dn: uid=enano$,ou=Hosts,dc=jome cn: enano$ uid: enano$ uidNumber: 1002 gidNumber: 515 homeDirectory: /dev/null loginShell: /bin/false description: Computer gecos: Computer objectClass: posixAccount objectClass: account objectClass: sambaSamAccount sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaPwdMustChange: 2147483647 sambaPwdLastSet: 1208202135 sambaAcctFlags: [W ] sambaSID: S-1-5-21-2710697030-1106397243-3057445555-3004 sambaPrimaryGroupSID: S-1-5-21-2710697030-1106397243-3057445555-515 displayName: enano$ sambaDomainName: JOME sambaNTPassword: FB950D358A0164C0D1D936A21389A505
47
HowTo Servidor LDAP y clientes Linux/Windows En teora, los scripts de smbldap-tools son capaces de crear automticamente estas cuentas cuando una mquina se intenta unir al dominio, pero en la prctica estn dando muchos problemas.
5.2
En este punto se detallarn los pasos seguidos para que la mquina Windows pueda loguearse con nuestro usuario test.
Una vez encontrado, hacer doble clic sobre l. Se nos pedir un nombre de usuario y contrasea para acceder a los recursos. Se puede comprobar que no todos los usuarios pueden acceder. Sin embargo, entrando con test (password test) s conseguimos acceder a los recursos compartidos:
48
Antes de nada hay que desconectarse de xxxx. Para ello, ejecutar (en una consola o en Inicio Ejecutar) el comando net use \\xxxx /delete. Hacer doble clic sobre Mi PC y seleccionar Propiedades en el men que se desplegar. Ir a la segunda pestaa, Identificacin de red. Seleccionar en el radio button Dominio en lugar de Grupo de trabajo que probablemente ser el que est seleccionado:
Escribir JOME:
49
Y aceptar. Pedir el nombre de un usuario (y su contrasea) que tenga permisos para crear entidades en el dominio:
Este es el momento de introducir el password del falso root que se cre en el punto 7 de la pgina 45. Si todo va bien, tendremos esto:
Reiniciar el sistema. Debera pedir que se presione Alt + Ctrl + Supr para iniciar sesin. Al hacerlo, saldr una pantalla parecida a la que hay bajo estas lneas:
50
HowTo Servidor LDAP y clientes Linux/Windows En el combo, podemos elegir si queremos entrar con cuentas de usuarios locales o del dominio. Si elegimos el dominio JOME, deberamos poder entrar con el usuario Test de password test. Eso si, como los profiles no estn bien definidos y los directorios home tampoco, saldrn un par de mensajes de error, pero entrar en sesin correctamente.
51
6.
Gua rpida para levantar un servidor LDAP (sin TLS): http://bulma.net/body.phtml?nIdNoticia=1991 Gua ms detallada que la anterior para levantar un servidor LDAP (sin TLS) http://bulma.net/body.phtml?nIdNoticia=1343&nIdPage=3 Gua del administrador OpenLdap 2. 4. http://www.openldap.org/doc/admin24/ OpenLdap con TLS (como crear certificados, asegurar el servidor) http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html Tutorial rpido de LDAP y Samba en Ubuntu 7.10. http://www.howtoforge.com/openldap-samba-domain-controller-ubuntu7.10 Tutorial rpido de LDAP y Samba. http://www.fatofthelan.com/articles/articles.php?pid=24 Buen tutorial Ldap + Samba (aunque habla de alguna herramienta que yo no he encontrado) http://www.debianperu.org/node/358 Tutorial Ldap + Samba (muy buena la parte de Samba) http://dns.bdat.net/documentos/validacion_ldap/book1.html Tutorial sobre integracin de sistemas Windows Linux (completsimo: siver tanto para servidores Linux / clientes Windows como para servidores Windows / clientes Linux) http://fferrer.dsic.upv.es/cursos/Integracion/html/index.html Explicaciones sobre PAM: http://www.freebsd.org/doc/en_US.ISO8859-1/articles/pam/pam-config.html Tutorial rpido de Samba como P.D.C http://dns.bdat.net/documentos/samba/validacion_winbind/t1.html Tutorial rpido de Samba como P.D.C. (se puede usar para referencias de comandos y as) http://www.linuxparatodos.net/portal/staticpages/index.php?page=13-como-samba Gua oficial de referencia Samba http://us1.samba.org/samba/docs/man/Samba-HOWTO-Collection/index.html Gua oficial de las SmbLdapTools: http://download.gna.org/smbldap-tools/docs/samba-ldap-howto/
52