SAMBA LDAP HOWTO DEBIAN SARGE

Esta manual tiene como objetivo el describir de cómo instalé y configuré un controlador de dominios con samba y ldap en un sistema de Linux Debian Sarge( ojo para etch existen variaciones), No hay razón por la que no trabajaría en ningún otro sistema de linux, .

*********** INSTALACION DE SLAPD *****************

1.-Instalación de servidor LDAP :

$ apt-get update
$ apt-get upgrade
$ apt-get install slapd db4.2-util

Responder las siguientes perguntas:

DNS domain name: silcom.com.pe
Name of organisation: silcom.com.pe
Admin password: password
Confirm password: password
Allow LDAP v2: yes

****** INSTALACION PHPLADADMIN **********


1.- Phpldapadmin requiere un servidor web instalado. En una nueva instalación, nosotros necesitaremos instalar apache. Si usted tiene instalado apache omitir este paso.


$ apt-get install apache

Y responder con lo siguiente:

Enable SuExec: no

2.- instalar phpldapadmin nos provee un frontend para administrar LDAP

$ apt-get install phpldapadmin

use las siguientes respuestas :

Authentication type: session
Configure webserver: apache-ssl
Restart: yes

3.- Phpldapadmin requiere una utilidad llamada mkntpwd para crear las contraseñas Samba hashes. esta incluida en smbldap-tools pero esta no parece estar incluida para Debian así que se requiere descargarla.

$ cd /opt/
$ wget http://www.silcom.com.pe/soft/mkntpwd.tar.gz
$ tar -zxf mkntpwd.tar.gz
$ cd mkntpwd
$ make
$ cp mkntpwd /usr/local/bin

Chequeamos que esta corriendo:

$ mkntpwd

************* INSTALACION DE SAMBA ***********

1.- Ahora instalamos los paquetes samba y samba-doc

$ apt-get install samba samba-doc

Y respondemos con lo siguiente:

Domain Name: silcom
Use Password Encryption: Yes
Modify smb.conf to use WINS settings via DHCP: No
How to run Samba: daemons
Create password database: Yes

************* CONFIGURANDO Y POPULANDO LDAP *********
1.- slapd necesita Samba schema para trabajar. Hacemos lo siguiente:

$ cd /usr/share/doc/samba-doc/examples/LDAP/
$ gunzip samba.schema.gz

$ cp samba.schema /etc/ldap/schema/

Ahora incluimos las siguiente linea en /etc/ldap/slapd.conf :

include /etc/ldap/schema/samba.schema

Y reiniciamos slapd:$ /etc/init.d/slapd restart

2.- Se necesita crear unidades organizativas en LDAP para nuestros usuarios, grupos and maquinas.ingresar a phpldapadmin http://debian.silcom.com.pe/phpldapadmin/ (obiamente ingresar su direccion ip o dominio).

Ingresar con la contraseña para el usuario admin en LDAP.
Expandir la raiz del arbol, y hacer click en «Create New Entry Here»
Seleccionar «Organizational Unit» (ou): llamar a la ou «users» y confirmar.

repetir estos pasos, y aderir dos ou’s llamadas groups y machines. El arbol debe quedar de la siguien forma:

p2.jpg

************** CONFIGURAR SAMBA ***************

1.- Ahora se configurara samba. abrir el archivo /etc/samba/smb.conf y buscar la linea:

passdb backend = tdbsam guest

Esta linea necesita ser reemplazada por lo siguiente :

passdb backend = ldapsam:ldap://127.0.0.1
ldap suffix = dc=silcom,dc=com,dc=pe
ldap machine suffix = ou=machines
ldap user suffix = ou=users
ldap group suffix = ou=groups
ldap admin dn = cn=admin,dc=silcom,dc=com,dc=pe
ldap delete dn = no

# para PDC
domain logons = yes

# permitir privilegios a usuarios
enable privileges = yes

2.- ejecutar testparm para verificar que la configuracion no tiene errores.

$ testparm

3.- le enviamos a samba la contraseña del admin de LDAP del siguiente modo:

$ smbpasswd -w password

4.- Reiniciar samba:

$ /etc/init.d/samba restart

5.- Ahora mire en phpldapadmin, y serciorese que se ha creado una nueva entrada como esta : sambaDomainName=SILCOM

copiar el valor de sambaSID (eg S-1-5-21-2620819820-906013693-4274777306 ), ya que sera necesaria mas adelante.

p4.jpg

************* CONFIGURAR PHPLDAPADMIN ********************

1.- Editar el archivo
/usr/share/phpldapadmin/templates/template_config.php . Buscar las siguiente linea :

// uncomment to set the base dn of posix groups
// default is set to the base dn of the server
//$base_posix_groups=»ou=People,dc=example,dc=com»;

$samba3_domains[] =
array( ‘name’ => ‘My Samba domain Name’,
‘sid’ => ‘S-1-5-21-4147564533-719371898-3834029857’ );

// The base dn of samba group. (CUSTOMIZE)
//$samba_base_groups = «ou=Groups,ou=samba,dc=example,dc=org»;

Cambiarla por esta:

// uncomment to set the base dn of posix groups
// default is set to the base dn of the server
$base_posix_groups=»ou=groups,dc=silcom,dc=com,dc=pe»;

$samba3_domains[] =
array( ‘name’ => ‘silcom’,
‘sid’ => ‘S-1-5-21-2620819820-906013693-4274777306’ );

// The base dn of samba group. (CUSTOMIZE)
$samba_base_groups = «ou=groups,dc=silcom,dc=com,dc=pe»;

donde el valos de sid se obtiene de phpldapadmin.

*********** INSGRESAR GRUPOS POR DEFECTO **************

1.- Se necesitara crear algunos grupos por defecto . para crearlos en phpladpadmin use Samba 3 Group Mappings sobre ou=groups:

Unix name Samba Name gid Samba Sid
admins Domain Admins 20000 Built-In -> Domain Admins
users Domain Users 20001 Built-In -> Domain Users
guests Domain Guests 20002 Built-In -> Domain Guests

p5.jpg


************ CONFIGURACION AUTENTIFICACION UNIX ************

Configuraremos el servidor de modo que los usuariaros de LDAP aparescan como usuarios del sistema linux.

1.- Instalar libnss-ldap package y configurar:

$ apt-get install libnss-ldap

LDAP Server Host: 127.0.0.1
DN of Search Base: dc=silcom,dc=com,dc=pe
LDAP Version: 3
Database requires login: no
Make config readable by owner only: yes

2.- Editar el archivo /etc/nsswitch.conf de la siguiente forma:

passwd: compat ldap
group: compat ldap
shadow: compat ldap

3.- Ahora use la utilidad getent para confirmar que los grupos han sido correctamente configurados de la siguiente forma:

$ getent group
ssh:x:103:
users:x:20001:
guests:x:20002:
admins:x:20000:

4.- Instalar el paquete libpam-ldap

$ apt-get install libpam-ldap

Make local root db admin: yes
Database requires logging in : no
Root login account : cn=admin,dc=silcom,dc=com,dc=pe
Root password : password
Crypt : MD5

5.- Samba requiere un usuario Administrator (con un uidNumber de 0) para ingresar a las maquinas Windows al dominio.
No recomiendo tener un usuario el usuario root en LDAP ya que puede ser capaz de abrirse una sesión a los sitios de trabajo de Linux, para esto agregamos un filtro en /etc/pam_ldap.conf .

si no les incomoda este aspecto se puede saltar este paso.

Ingresar la siguiente linea en al final del archivo /etc/pam_ldap.conf

pam_filter !(uidNumber=0)

6.-Los siguientes archivos son necesarios para configurar PAM para LDAP:

/etc/pam.d/common-account

# Comentar esta linea
#account required pam_unix.so

# e insertar estas dos
account sufficient pam_ldap.so
account required pam_unix.so try_first_pass

/etc/pam.d/common-auth

# comentar esta linea
#auth required pam_unix.so nullok_secure

# e insertar estas dos
auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass

/etc/pam.d/common-password

# comentar
#password required pam_unix.so nullok obscure min=4 max=8 md5

# insertar estas lineas
password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass

7.- Reiniciar ssh y samba

$ /etc/init.d/ssh restart
$ /etc/init.d/samba restart

8.- Instalar el servicio de caching para nombres:

$ apt-get install nscd

************ AGREGAR USUARIOS *****************

1.- Ahora se podra agregar algunos usuario. Se necesesita un Administrator (uid=0) y otro usuario para realizar las pruebas.
crear un nuevo : Samba 3 User(s) sobre ou=users de la siguiente forma:

Uid First Name User Name User Password Encryption Windows Group
0 Admin Administrator password MD5 Domain Admins
10000 Simon simon ******** MD5 Domain Admins

user1.jpg

user2.jpg

2.- Verificamos con getent que nss esta funcionando correctamente sobre el servidor linux.

$ getent passwd
simon:x:10000:20000:Simon Newton:/home/simon:/bin/bash
Administrator:x:0:20000:admin :/home/administrator:/bin/bash

3.- Creamos los directorios home para los usuarios:

$ mkdir /home/simon
$ cp /etc/skel/.* /home/simon/
$ chown -R simon /home/simon
$ chgrp -R users /home/simon

************ ASIGNANDO PRIVILEGIOS Y AUTOMATIZANDO *************

Ingresar computadoras al dominio automaticamente

1.- INstalar los siguientes modulos de Perl :

$ apt-get install libnet-ldap-perl libcrypt-smbhash-perl

2.- copiar el script smbldap-useradd (y archivos de configuracion) del paquete Samba-doc . en la ubicacion /usr/local/smbldaptools

$ mkdir /usr/local/smbldaptools
$ cd /usr/share/doc/samba-doc/examples/LDAP/smbldap-tools-0.8.7
$ cp smbldap_bind.conf smbldap_tools.pm.gz smbldap.conf.gz smbldap-useradd.gz /usr/local/smbldaptools/
$ gunzip /usr/local/smbldaptools/*.gz
$ cd /usr/local/smbldaptools
$ chmod go-r *
$ chmod u+x smbldap-useradd

Editar el archivo /usr/local/smbldaptools/smbldap.conf para que queden de esta manera:

SID=»S-1-5-21-3131077580-1338128831-1697195685″
suffix=»dc=silcom,dc=com,dc=pe»
usersdn=»ou=users,${suffix}»
computersdn=»ou=machines,${suffix}»
groupsdn=»ou=groups,${suffix}»
sambaUnixIdPooldn=»sambaDomainName=SILCOM,${suffix}»
hash_encrypt=»MD5″

Editar el archivo /usr/local/smbldaptools/smbldap_bind.conf:

slaveDN=»cn=admin,dc=silcom,dc=com,dc=pe»
slavePw=»password»
masterDN=»cn=admin,dc=silcom,dc=com,dc=pe»
masterPw=»password»

Editar /usr/local/smbldaptools/smbldap_tools.pm para enlazar los archivos correctos para la configuracion:

my $smbldap_conf=»/usr/local/smbldaptools/smbldap.conf»;
my $smbldap_bind_conf=»/usr/local/smbldaptools/smbldap_bind.conf»;

3.- Ubicar el objeto sambaDomainName=SILCOM en phpldapadmin.
Hacer click y Agregar un nuevo valor sobre el object class y escoger sambaUnixIdPool luego hacer click
en siguiente e ingresar un numero de uid y gid de inicio para este caso sera el 30000.

4.- Probar la configuracion ingresando una maquina de la siguiente manera:

$./smbldap-useradd -w «quigon»

si no emitio agun error todo esta correcto, se creara un nuevo objeto uid=quigon$ en el ou machines.
Nos daremos cuenta que el uidNumber en el objeto sambaDomainName=SILCOM se habra actualizado a 30001 ahora.

Este objeto solo sirve para verificar que todo esta trabajando bien ,procederemos a eliminarlo del arbol

5.- Finalmente agregar la siguiente linea en el archivo smb.conf :

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

6.- Si deseamos que un usuario normal agregue las maquinas al dominio. podemos conceder al usuario derechos
para agregar las maquinas al dominio usando lo siguiente:

net rpc -UAdministrator rights grant simon SeMachineAccountPrivilege

************ SCRIPS DE INICIO DE SESION *****************

Vamos a usar KiXtart para escribir los archivos de inicio.

$ cd /opt/
$ wget http://www.kixtart.org/binary/distrib/KiX2010_453.zip
$ apt-get install unzip
$ unzip /opt/KiX2010_453.zip

1.- crear el netlogon, y hacer que el grupo administrador tenga a acceso a escribir

$ mkdir -p /data/samba/netlogon
$ chgrp admins /data/samba/netlogon

Y agregar las siguientes lines en /etc/samba/smb.conf:

# put this in the main section
logon script = logon.bat

# share for the logon scripts
[netlogon]
comment = Network logon service
path = /data/samba/netlogon
write list = «@admins»
guest ok = Yes

2.- Para el inicio de sesion de una maquina windows a un usuario en el grupos Domain Admins.Se tiene que tener aceso a escritura sobre la capeta netlogon

Download KiXstart,
extract, and put the following files into the netlogon share:

KIX32.EXE
KX32.dll

$ cp /opt/KiX2010.453/KIX32.EXE /data/samba/netlogon/
$ cp /opt/KiX2010.453/KX32.dll /data/samba/netlogon/

3.- crear un archivo logon.bat en la carpeta netlogon e ingresar lo siguiente
en el archivo:

\\pdc\netlogon\kix32 \\debian\netlogon\logon.kix /f

4.- crear un archivo logon.kix. eset se ejecutara cuando el usuario se loguee.
se puede montar unidades compartidas, sincronizar la hora etc. como este ejemplo:

; logon script

setconsole(‘hide’)

; delete all mapped drives
USE * /delete

; sync time
$timeserver = «\\pdc»
Settime $timeserver

IF INGROUP(«SILCOM\Domain Admins»)
use n: \\pdc\netlogon
ENDIF

; add more drive mappings here

; map homedirectory
use u: @HOMEDIR

Hasta aqui se debiar poder configurar una estacion de trabajo que se autentifique contral el dominio
***************** HABILITAR PROFILES **********************

mkdir /data/samba/profiles

[profiles]
path = /data/samba/profiles
comment = Profiles
writeable = yes
browseable = no
create mask = 0600
directory mask = 0700

************* CREACION DE HOME POR DEFECTO *************

Por defecto cuando se registra un usuario en ldap no crea el home respectivo
para corregir esto utilizamos lo siguiente:

editar /etc/pam.d/common-session y agregar en la primera linea

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022

************ PERMITIR CAMBIO DE CONTRASEÑA ******************
Es bueno permitirle a los usuarios de windows cambiar su contraseña en el servidor ldap
para esto se hara lo siguiente:

cd /usr/share/doc/samba-doc/examples/LDAP/smbldap-tools-0.8.7
cp smbldap-passwd.gz /usr/local/smbldaptools/
cd /usr/local/smbldaptools/
gunzip smbldap-passwd.gz
chmod u+x smbldap-passwd

en el archivo /etc/samba/smb.conf modificar las siguientes lineas :

unix password sync = no
passwd program = /usr/bin/passwd %u

por estas :

unix password sync = yes
passwd program = /usr/local/smbldaptools/smbldap-passwd -o %u

Juan Oliva

Consultor en Ciberseguridad con mas de 17 años de experiencia en el campo, muy involucrado en proyectos de Ethical Hacking, análisis y explotación de vulnerabilidades en infraestructura, aplicaciones web, APIs y Móviles, pruebas de ingeniería social y revisión de código.