martes, 5 de noviembre de 2013

Crear network-bridges en Xen 4.1 usando Debian Wheezy

1.   BRIDGE

Un bridge en el ambiente de redes es un dispositivo que une dos o más segmentos de red de forma transparente, por ende un bridge es independiente de cualquier protocolo de red o transporte, ya que actúa únicamente en la capa 2.

Un bridge no re-enruta paquetes como lo haría un router por el contrario al trabajar únicamente en la capa 2 del modelo OSI, este se dedica a aprender las direcciones MAC de las máquinas conectadas a él, direcciones que luego utiliza para comunicar una estación con otra separando a ambas en dominios de colisiones distintos.

2.   ALCANCE

Básicamente el alcance de este documento tiene como finalidad crear una interfaz tipo Bridge en una interfaz física para el balanceo de cargas en máquinas virtuales de Xen 4.1 en Debian Wheezy, ya que los scripts que Xen 4.1 trae por default tienen errores para generar dicha solución en esta distribución.

3.   SISTEMA OPERATIVO

La presente instalación, se la hará en un Sistema Operativo Linux, Distribución Debian, Versión 7 (Squeeze).

4.   PAQUETES INSTALADOS

bridge-utils (Mismo que se encuentra al instalar Xen 4.1)

5.   INSTALACIÓN DEL PAQUETE

Primeramente instalar el paquete (Si es que aún no está instalado):

# apt-get install bridge-utils

Ahora previo a la configuración de las interfaces físicas y puentes, verificar que el script network-bridge, propio de xen, esté configurado por default.

5.1.     CONFIGURACIÓN DE INTERFACES

Identificar el número de interfaces físicas de red en el equipo. Luego editar el archivo:

# nano /etc/udev/rules.d/70-persistent-net.rules

Y se verán las n interfaces de red que se tienen conectadas al equipo. En este ejemplo se ven 2 interfaces:

# PCI device 0x1186:/sys/devices/pci0000:00/0000:00:1e.0/0000:03:00.0 (skge)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:21:91:91:82:38", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:/sys/devices/pci0000:00/0000:00:19.0 (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="70:71:bc:19:44:99", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

Donde NAME=”ethx” determina el nombre de la interfaz. Ahora con la interfaz eth0 no existe problemas con el script de network-bridge de xen, así que nos centraremos en las demás interfaces donde se desea crear el puente, en este caso eth1 se renombrará a peth1, para trabajar bajo el mismo esquema de la eth0 que se verá más adelante.

Cambiar:

NAME="eth1"

Por:

NAME="peth1"

Para que tome los efectos necesarios, se debe reiniciar el equipo. Una vez reiniciado, verificar que efectivamente se cambió el nombre del dispositivo con el comando:

# dmesg | grep eth

Aquí se podrá verificar que

[    6.050968] udevd[426]: renamed network interface eth1 to peth1

Ahora el siguiente paso será crear el script de inicio que permita levantar las interfaces de red al inicio y el puente de la interfaz peth1. Para ello crear el archivo

# nano /etc/init.d/red.sh

Y pegar el siguiente contenido

#!/bin/bash
### BEGIN INIT INFO
# Provides: red
# Required-Start: $syslog $remote_fs xen
# Required-Stop: $syslog $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: LEVANTA INTERFACES DE RED SOLUCIONANDO EL PROBLEMA DEL SCRIPT DE XEN 4.1
### END INIT INFO

# EN ESTA SECCION SE LEVANTAN LAS INTERFACES DE RED FÍSICAS
/etc/init.d/networking stop
echo "eth0=eth0" >> /etc/network/run/ifstate
echo "peth1=peth1" >> /etc/network/run/ifstate
ifdown eth0
ifdown peth1
ifup eth0
ifup peth1

# EN ESTA SECCION SE CREA LA INTERFAZ TIPO BRIDGE PARA PETH1
brctl addbr eth1
brctl addif eth1 peth1
ifconfig eth1 up

Grabar el archivo y ejecutar:

insserv red

Y con esto quedará creado el script de inicio para que se levanten las interfaces de red y su respectivo puente.

Ahora para verificar que los puentes están creados en la respectiva interfaz de red, ejecutar:

root@debian:/etc/xen# brctl show

Y deberá desplegarse una información similar a esto:

bridge name  bridge id           STP enabled  interfaces
eth0          8000.002191918238   no           peth0
eth1         8000.7071bc194499   no           peth1

Donde nos indica el nombre del bridge, el id, y cual interfaz física está sirviendo como switch.

Finalmente, ejecutar una máquinas virtual utilizando cada bridge configurado y volver a ejecutar brctl show, y se deberá visualizar algo similar a esto:

bridge name  bridge id           STP enabled  interfaces
eth0         8000.002191918238   no           peth0
                                               vif1.0
eth1         8000.7071bc194499   no           peth1
                                               vif8.0

Donde se pueden ver las distintas interfaces virtuales vif que utilizan los distintos puentes peth.


6.   RECOMENDACIONES

martes, 1 de octubre de 2013

Controlador de Dominio con SAMBA 4 exactamente como un Microsoft Active Directory

1. CONTROLADOR PRIMARIO DE DOMINIO CON SAMBA 4 (ACTIVE DIRECTORY)

2.1 SAMBA 4

Samba es el Active Directory de Linux, es Open Source y te permite compartir tus archivos y documentos en una misma red en una máquina UNIX. Utiliza para ello el protocolo SMB compatible para todos los sistemas operativos de Linux pero además con sistemas Windows o Mac, incluso para el sistema operativo antiguo de Windows MS-DOS.
Samba 4, soporta el inicio de sesión de ‘Active Directory’ y protocolos de clientes de administración compatibles con Windows XP, Windows 7 y Mac OS X.
Soporta la política de grupos.
Tiene un servidor interno de LDAP con semántica AD.
Integra un servidor Kerberos, para permitir Single Sign-On en la red.
Nueva infraestructura de RPC.
Soporte para Python.

2.2. CONTROLADOR ACTIVE DIRECTORY

Sin duda, Active Directory es la característica más atractiva a la hora de decidirnos por Windows Server como servidor de nuestra red local. El conjunto de servicios y utilidades que ofrece para la gestión de usuarios y equipos permite una gestión tremendamente productiva, especialmente si trabajamos con clientes Windows.
Por otro lado Samba, la implementación para el mundo Linux del protocolo CFIS de Windows, permitía hasta la fecha implantar un servidor de dominio NT, que aunque permite la autenticación centralizada, quedaba muchos pasos atrás respecto las funcionalidades de cualquier Windows Server de 2003 hacia adelante. Pero, ahora la nueva versión de Samba, Samba 4, permite implementar un DC (Domain Controller) basado en Active Directory.

3. SISTEMA OPERATIVO

La presente instalación, se la hará en un Sistema Operativo Linux, Distribución Debian, Versión 7 (Wheezy).

4. PAQUETES INSTALADOS

samba4
samba-common
smbclient4
ntp
krb5-client

5. LEVANTAMIENTO Y CONFIGURACIÓN DEL DOMINIO

5.1. INSTALACIÓN DE SAMBA4

En primer lugar configuraremos la  red de nuestro servidor PDC, editando el archivo /etc/network/interfaces, y utilizaremos la IP 172.16.5.216 como PDC.

auto eth0
iface eth0 inet static
address 172.16.5.216
netmask 255.255.0.0
gateway 172.16.4.4
dns-nameservers 172.16.5.216 8.8.8.8
dns-search cardcam.com

Nótese que como primer servidor de nombres (DNS principal), se ha establecido al mismo PDC, como secundario elegimos alguno que nos permita acceder a Internet ( podría ser el que provee el ISP o único público de Google en este caso), y que la búsqueda dns se hace sobre el nombre de dominio de ejemplo CARDCAM.COM

A continuación instalaremos el servicio NTP (Network Time Protocol) para asegurar que nuestro equipo siempre tenga la hora correcta (el funcionamiento de Kerberos exige que los equipos estén sincronizados en cuanto la hora). Para instalar el servicio:

# apt-get install ntp

Una vez instalado, configuraremos el servicio para elegir el servidor horario de nuestra preferencia, en nuestro caso, elegimos los servidores ubicados en España. Así mismo, habilitamos el servicio para que nuestra red pueda consultar la hora al servidor (podemos consultar los servidores disponibles en la página de NTP project; para agregar servidores NTP, editar el archivo /etc/ntp.conf

server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst

A continuación procederemos a instalar Samba 4. Aunque se puede descargar como paquete ya construido mediante apt-get, la página de Samba recomienda bajar las fuentes y compilarlas. De hecho, si se intenta bajar el paquete del repositorio da un error a media instalación. En primer lugar, se debe instalar los archivos necesarios o prerequisitos:

# apt-get install build-essential libacl1-dev python-dev libldap2-dev pkg-config gdb libgnutls-dev libreadline-dev libattr1-dev python-dnspython libpopt-dev libbsd-dev attr docbook-xsl libcups2-dev git acl

Una vez finalizada la instalación, verificar que el puerto 9418 que es por el cual se hace la descarga GIT, sea admitido por el Firewall, ya que de no ser así, git dará error; una vez verificado, se bajará la versión más reciente del repositorio GIT, para ello:

# git clone git://git.samba.org/samba.git /usr/src/samba4/

Una vez finalizada la descarga se procede a compilar:

# cd /usr/src/samba4
# ./configure –enable-debug
# make
# make install

Luego, agregue los paths en el archivo /etc/profiles. Ya que estos paths contienen varias herramientas de samba para ejectuarlas directamente desde la consola:

/usr/local/samba/sbin:/usr/local/samba/bin:

Una vez terminada la compilación del paquete, se procederá a configurar el Controlador de Dominio, para ello haga un reinicio de la máquina, y a continuación escriba:

# samba-tool domain provision --realm cardcam.com --domain CARDCAM --adminpass P@ssword --server-role=dc --use-ntvfs

Note que debe reemplazar “cardcam.com” por el nombre del dominio a levantar, y adicionalmente que la “adminpass” es una password compleja que contiene un caracter mayúsculo con al menos un número y caracter especial, si no se cumple esta condición en la password, tendrá que volver a compilar el paquete de samba y vovler a ejecutar la instrucción con mucho cuidado.

Luego de ello, el archivo de configuración de samba que OJO, se encuentra en /usr/local/samba/etc/smb.conf deberá contener algo similar a lo siguiente:

# Global parameters
[global]
        workgroup = CARDCAM
        realm = cardcam.com
        netbios name = PDC
        server role = active directory domain controller
        dns forwarder = 8.8.8.8
       server services = rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd,$ kcc, dnsupdate, dns, smb
        dcerpc endpoint servers = epmapper, wkssvc, rpcecho, samr, netlogon, lsarpc,$ spoolss, drsuapi, dssetup, unixinfo, browser, eventlog6, backupke$
        allow dns updates = nonsecure
[netlogon]
        path = /usr/local/samba/var/locks/sysvol/cardcam.com/scripts
        read only = No
        Browseable = No
[sysvol]
        path = /usr/local/samba/var/locks/sysvol
        read only = No
        Browseable = No

Nótese que el parámetro allow dns updates debe tener el valor nonsecure en vez de True como en la versión de Samba 4.0.
Ahora se instalará el servicio Kerberos, para ello instalaremos la utilidad de cliente:

# apt-get install krb5-user

Cuando nos pida el reino Kerberos, deberemos poner el que hemos elegido, y cuando solicite el servidor administrativo, escribimos el hostname donde se aloja el Samba4, pero muy importante en mayúsculas! Una vez instalado podemos testear por ejemplo la password de administrador.
Luego, editar el archivo /etc/resolv y verificar que el nameserver sea el PDC y se especifique el dominio de la siguiente manera:

search cardcam.com
domain cardcam.com
nameserver 172.16.5.216

Finalmente, reiniciar el equipo y arrancar el servicio de Samba para que se levante el controlador de dominio:

# /usr/local/samba/sbin/samba start

Ahora lo que queda es realizar varias pruebas para verificar la funcionalidad del servicio, para ello verificar:

# host -t SRV _ldap._tcp.cardcam.com.
_ldap._tcp.cardcam.com has SRV record 0 100 389 pdc.cardcam.com.

5.1.2 CREAR SCRIPT DEL SERVICIO

Lo primero que haremos es bajar de su repositorio samba4.init y guardarlo en /etc/init.d de nuestro sistema:

# wget http://anonscm.debian.org/loggerhead/pkg-samba/samba4/unstable/download/head:/1833%40fc4039ab-9d04-0410-8cac-899223bdd6b0:trunk%252Fsamba4:debian%252Fsamba4.init/samba4.init -O /etc/init.d/samba4

Ahora, asignaremos permisos de ejecución al script que acabamos de bajar:

# chmod +x /etc/init.d/samba4

Perfecto, ahora cambiaremos las rutas por defecto donde tenemos instalado nuestro Samba4.

# sed -i 's|/usr/sbin|/usr/local/samba/sbin|g' /etc/init.d/samba4
# sed -i 's|/etc/samba|/usr/local/samba/etc|g' /etc/init.d/samba4

Desde este preciso momento ya podemos iniciar o parar nuestro servicio con:

# /etc/init.d/samba4 start
# /etc/init.d/samba4 stop

Ahora, solo nos falta configurar el inicio automático del servicio con el siguiente comando para tener todo listo:

# update-rc.d samba4 defaults

5.2. UNIR MÁQUINAS MS-WIN AL DOMINIO

Para agregar un equipo Windows al dominio, ya no será necesario editar el registro de Windows para unir a “Otros Dominios”, ya que Samba 4 es reconocido como si se tratase de un Control de Dominio Microsoft.

Ahora procederemos a agregar el equipo al dominio:



Comprobamos como el cliente se ha agregado correctamente al dominio:



5.3. ADMINISTRAR EL DOMINIO

En esta sección, procederemos a configurar una herramienta que servirá para administrar el dominio y realizar algunas de las tareas básicas (creación de usuarios, grupos, configuración de perfiles, políticas de grupo, etc.).

Para ello, vamos a utilizar el conjunto de herramientas gratuitas que ofrece Microsoft, conocido como RSAT (Remote Server Administration Tool). Dichas herramientas, disponibles tanto para Windows 7 como Windows 8, permitirán gestionar nuestro controlador de dominio, de forma idéntica a si estuviéramos delante de un Windows 2008R2 Server.

El primer paso será descargar de la página de Microsoft la versión RSAT adecuada a nuestro equipo cliente. http://www.microsoft.com/es-es/download/details.aspx?id=7887:




Una vez instalado el paquete de herramientas, procederemos a habilitar aquellas que necesitemos, para ello deberemos ir a > Panel de Control > Programas y características > Activar características de Windows, y sobretodo activar “Usuarios y Equipos de Active Directory, DNS y Políticas de grupo”:





miércoles, 20 de marzo de 2013

Controlador Primario de Dominio PDC (samba+ldap)


1. CONTROLADOR PRIMARIO DE DOMINIO (SAMBA+LDAP) EN DEBIAN SQUEEZE


2. SERVICIOS


2.1. SAMBA


Samba es una suite de aplicaciones Unix que habla el protocolo SMB (Server Message Block). Muchos sistemas operativos, incluidos Windows y OS/2, usan SMB para operaciones de red cliente-servidor. Mediante el soporte de este protocolo, Samba permite a los servidores Unix entrar en acción, comunicando con el mismo protocolo de red que los productos de Microsoft Windows. De este modo, una máquina Unix con Samba puede enmascararse como servidor en una red Microsoft y ofrecer los siguientes servicios:
  • Compartir uno o más sistemas de archivos.
  • Compartir impresoras, instaladas tanto en el servidor como en los clientes.
  • Ayudar a los clientes, con visualizador de Clientes de Red.
  • Autentificar clientes logeándose contra un dominio Windows.
Las funcionalidades de samba no se quedan solo en una simple compartición de archivos e impresoras sino que permite a un PC con Linux comportarse como un controlador de dominio de Windows para redes Microsoft con prestaciones superiores a las que nos ofrecería un servidor con Windows NT Server 4.0.

Dominio Windows
Un Dominio de Windows es una agrupación lógica de PCs en los cuales existe al menos un servidor especial llamado Controlador del Dominio en el que se centralizan las tareas de administración de todos los PCs de la red.

Controlador de Dominio
El controlador de dominio es el centro nervioso de un dominio Windows, tal como un servidor NIS lo es del servicio de información de una red Unix. Los controladores de dominio tienen una serie de responsabilidades. Una de las que te va a implicar a ti es la autentificación. La autentificación es el proceso de garantizar o denegar a un usuario el acceso a recursos compartidos o a otra máquina de la red, normalmente a través del uso de una password.


2.2. LDAP


LDAP son las siglas de Lightweight Directory Access Protocol (en español Protocolo Ligero de Acceso a Directorios) que hacen referencia a un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP también se considera una base de datos (aunque su sistema de almacenamiento puede ser diferente) a la que pueden realizarse consultas.

Un directorio es un conjunto de objetos con atributos organizados en una manera lógica y jerárquica. El ejemplo más común es el directorio telefónico, que consiste en una serie de nombres (personas u organizaciones) que están ordenados alfabéticamente, con cada nombre teniendo una dirección y un número de teléfono adjuntos. Para entender mejor, es un libro o carpeta, en la cual se escriben nombres de personas, teléfonos y direcciones, y se ordena alfabéticamente.

Un árbol de directorio LDAP a veces refleja varios límites políticos, geográficos u organizacionales, dependiendo del modelo elegido. Los despliegues actuales de LDAP tienden a usar nombres de Sistema de Nombres de Dominio (DNS por sus siglas en inglés) para estructurar los niveles más altos de la jerarquía. Conforme se desciende en el directorio pueden aparecer entradas que representan personas, unidades organizacionales, impresoras, documentos, grupos de personas o cualquier cosa que representa una entrada dada en el árbol (o múltiples entradas).


3. SISTEMA OPERATIVO


La presente instalación, se la hará en un Sistema Operativo Linux, Distribución Debian, Versión 6 (Squeeze).


4. PAQUETES INSTALADOS


samba ; samba-common ; smbclient ; smbfs ; smbldap-tools ; phpldapadmin ; open-ldap ; sladp


5. INSTALACIÓN DE SAMBA+LDAP COMO PDC


Instalación
Paso 1:

Instalar paquetes para cliente ldap:

# apt-get install libnss-ldap libpam-ldap ldap-utils


En el asistente de instalación, seleccionar/ingresar los siguientes parámetros conforme este vaya pidiendo:


* LDAP server Uniform Resource Identifier:
ldap://127.0.0.1/


* Distinguished name of the search base:
dc=mi,dc=dominio,dc=cu


* LDAP version to use:
3


* LDAP account for root:
cn=admin,dc=mi,dc=dominio,dc=cu


* LDAP root account password:
clave personalizada


* nsswitch.conf not managed automatically Para que el libnss-ldap trabaje necesita modificar /etc/nsswitch.conf
para usar el "ldap" datasource. Hay un ejemplo de configuracion en /usr/share/doc/libnss-ldap/examples/nsswirch.ldap
el cual puede ser usado como ejemplo para la config del nsswitch.
Ok


* Esta opción permitirá utilidades de passwords que usa PAM para cambiar passwords locales.
La cuenta de administrador de LDAP se almacenara en un archivo separado, el cual debera ser solamente legible por el usuario root. Si /etc está montado por NFS, esta opción debe deshabilitarse. Allow LDAP admin account to behave like local root?
Yes


*Does the LDAP database require login?
No


* LDAP administrative account:
cn=admin,dc=mi,dc=dominio,dc=cu


* LDAP administrative password:
clave personalizada


Luego, modificar el archivo nsswitch.conf


# cp -pf /etc/nsswitch.conf /etc/nsswitch.conf.orig
# nano /etc/nsswitch.conf


Agregar/Cambiar lo que está en negrita:


passwd:    compat ldap
group:     compat ldap
shadow:    compat ldap
hosts:     files dns
networks:  files
protocols: db files
services:  db files
ethers:    db files
rpc:       db files
netgroup:  ldap


Seguido, hacer algunas modificaciones a los archivos relacionados con el servicio de pam.d


# cp -pf /etc/pam.d/common-password
/etc/pam.d/common-password.orig
# nano /etc/pam.d/common-password


Borrar lo que está en negrita:


password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass


# cp -pf /etc/pam.d/common-session /etc/pam.d/common-session.orig
# nano /etc/pam.d/common-session


Agregar al final del archivo:


session optional pam_mkhomedir.so skel=/etc/skel umask=077
# end of pam-auth-update config


Paso 2:



Instalar el servidor ldap y sus dependencias


# apt-get install slapd ldap-utils


Establecer una clave


Administrator password: clave personalizada
Confirm password: clave personalizada


# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn


SASL/EXTERNAL authentication started
SASL username:
gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config
dn: cn=module{0},cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
dn: olcBackend={0}hdb,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}hdb,cn=config


Generar y copiar la clave que se genera en codificación SSHA


# slappasswd
New password: clave personalizada
Re-enter new password: clave personalizada
{SSHA}N6ZE0PfgwfV9kYlT0zKiI9kpG8sx3rVI


# ldapmodify -Y EXTERNAL -H ldapi:///
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={0}config,cn=config
add: olcRootPW
olcRootPW: {SSHA}N6ZE0PfgwfV9kYlT0zKiI9kpG8sx3rVI

Y presionar "Ctrl+D" para guardar


modifying entry "olcDatabase={0}config,cn=config"


Crear el .ldif para luego importarlo:


# nano config.ldif


dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mi,dc=dominio,dc=cu
-
replace: olcRootDN
olcRootDN: cn=admin,dc=mi,dc=dominio,dc=cu
-
replace: olcAccess
olcAccess: to attrs=userPassword by dn="cn=admin,dc=mi,dc=dominio,dc=cu" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=mi,dc=dominio,dc=cu" write by * read
-


Importar la configuración del ldif creado anteriormente:


# ldapmodify -Y EXTERNAL -H ldapi:/// -f config.ldif


SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}hdb,cn=config"


#ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}hdb
Enter LDAP Password: tu clave
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcLastMod: TRUE
olcRootPW: {SSHA}iBRORXu81Urzz26uD3LbPY919jigTO9Q
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcSuffix: dc=mi,dc=dominio,dc=cu
olcRootDN: cn=admin,dc=mi,dc=dominio,dc=cu
olcAccess: {0}to attrs=userPassword by dn="cn=admin,dc=mi,dc=dominio,dc=cu" writ
e by anonymous auth by self write by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to dn.base="" by * read
olcAccess: {3}to * by dn="cn=admin,dc=mi,dc=dominio,dc=cu" write by * read


Seguido, se instalará el PHPLDAPADMIN que es una aplicación para administrar de una manera gráfica y sencilla un servidor ldap:


# apt-get install phpldapadmin


Igualmente, un asistente de instalación preguntará por ciertos parámetros, para los que se deben ingresar:


*http://172.16.72.72/phpldapadmin
*Login: cn=admin,dc=mi,dc=dominio,dc=cu
*Pass: clave personalizada
*+ dc=mi,dc=dominio,dc=cu
*Default
*Delete this entry


Luego, crear otro ldif para el esquema base:


# nano base.ldif


dn: dc=mi,dc=dominio,dc=cu
objectClass: top
objectClass: dcObject
objectclass: organization
o: mi.dominio.cu
dc: Mi-Dominio
description: LDAP Server
dn: ou=people,dc=mi,dc=dominio,dc=cu
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=mi,dc=dominio,dc=cu
objectClass: organizationalUnit
ou: groups


Luego, importar el archivo base.ldif:


# ldapadd -x -D cn=admin,dc=mi,dc=dominio,dc=cu -W -f base.ldif


Enter LDAP Password: clave personalizada
adding new entry "dc=mi,dc=dominio,dc=cu"
adding new entry "ou=people,dc=mi,dc=dominio,dc=cu"
adding new entry "ou=groups,dc=mi,dc=dominio,dc=cu"


Luego, crear otro ldif para usuarios:


root@pdc:~# nano ldapuser.ldif


"dn: uid=echo $line | cut -d: -f1,ou=people,dc=tu,dc=dominio,dc=cu"
"objectClass: inetOrgPerson"
"objectClass: posixAccount"
"objectClass: shadowAccount"
"uid: echo $line | cut -d: -f1?
"sn: echo $NAME | awk '{print $2}'"
"givenName: echo $NAME | awk '{print $1}'"
"cn: echo $NAME | sed -e "s/%/ /""
"displayName: echo $NAME | sed -e "s/%/ /""
"uidNumber: echo $line | cut -d: -f3?
"gidNumber: echo $line | cut -d: -f4"
"userPassword: {crypt}grep $UID1 /etc/shadow | cut -d: -f2"
"gecos: echo $NAME | sed -e "s/%/ /""
"loginShell: echo $line | cut -d: -f7"
"homeDirectory: echo $line | cut -d: -f6"
"shadowExpire: passwd -S $UID1 | awk '{print $7}'"
"shadowFlag: grep $UID1 /etc/shadow | cut -d: -f9"
"shadowWarning: passwd -S $UID1 | awk '{print $6}'"
"shadowMin: passwd -S $UID1 | awk '{print $4}'"
"shadowMax: passwd -S $UID1 | awk '{print $5}'"
"shadowLastChange: grep $UID1 /etc/shadow | cut -d: -f3"


Luego, importar el archivo ldapuser.ldif:


root@pdc:~# ldapadd -x -D cn=admin,dc=mi,dc=dominio,dc=cu -W -f ldapuser.ldif


Enter LDAP Password: clave personalizada


Luego, crear otro ldif para grupos:


root@pdc:~#nano ldapgroup.ldif


"dn: cn=echo $line | cut -d: -f1,ou=groups,dc=tu,dc=dominio,dc=cu'"
"objectClass: posixGroup"
"cn: echo $line | cut -d: -f1"
"gidNumber: echo $line | cut -d: -f3"


root@pdc:~# ldapadd -x -D cn=admin,dc=mi,dc=dominio,dc=cu -W -f ldapgroup.ldif
Enter LDAP Password: tu clave

Paso 3:


El siguiente paso será instalar documentación de samba para integrar con el servidor LDAP.


root@pdc:~#apt-get install samba-doc
root@pdc:~# cp -Rpf /etc/ldap/ /etc/ldap.orig
root@pdc:~# cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/
root@pdc:~# gzip -d /etc/ldap/schema/samba.schema.gz


Crear y poblar el archivo schema_convert.conf con los siguientes esquemas:


root@pdc:~# nano schema_convert.conf
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/samba.schema


root@pdc:~# mkdir -p ./tmp/ldif_output
root@pdc:~# slapcat -f schema_convert.conf -F ./tmp/ldif_output -n0 -s


"cn={12}samba,cn=schema,cn=config" > ./tmp/cn=samba.ldif
root@pdc:~# cp -pf ./tmp/cn=samba.ldif ./tmp/cn=samba.ldif.orig


Luego, eliminar el {12} de la linea 1 y la linea 3 del archivo cn=samba.ldif:


root@pdc:~# nano ./tmp/cn=samba.ldif
dn: cn={12}samba,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: {12}samba


Quedando:


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


Luego, eliminar estas líneas al final del mismo archivo:


structuralObjectClass: olcSchemaConfig
entryUUID: bd8a7a82-3cb8-102f-8d5f-070b4e5d16f8
creatorsName: cn=config
createTimestamp: 20100815125953Z
entryCSN: 20100815125953.198505Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20100815125953Z


Seguido, agregar los esquemas de samba al directorio LDAP:


root@pdc:~# ldapadd -Y EXTERNAL -H ldapi:/// -f ./tmp/cn=samba.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry “cn=samba,cn=schema,cn=config”


Luego, crear el archivo samba_indexes.ldif:


root@pdc:~# nano samba_indexes.ldif


dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub
root@pdc:~# ldapmodify -Y EXTERNAL -H ldapi:/// -f samba_indexes.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry “olcDatabase={1}hdb,cn=config”
root@pdc:~# /etc/init.d/slapd restart
root@pdc:~# apt-get install smbldap-tools samba
Workgroup/Domain Name: MiDominio
root@pdc:~# mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
root@pdc:~# cp /usr/share/doc/smbldap-tools/examples/smb.conf /etc/samba/smb.conf
root@pdc:~# nano /etc/samba/smb.conf

Linea 3 cambiar el grupo de trabajo (nombre del dominio):



workgroup = MiDominio


Linea 12 comentarla:


#min passwd length = 3


Cambiar línea 22 a yes:


ldap passwd sync = yes


Cambiar línea 33 y 34 a:


Dos charset = CP932
Unix charset = UTF-8

Cambiar el nombre del dominio en la línea 48:



ldap admin dn = cn=admin,dc=mi,dc=dominio,dc=cu


Cambiar 50:


ldap suffix = dc=mi,dc=dominio,dc=cu
ldap group suffix = ou=groups
ldap user suffix = ou=people


60 descomentarla:


delete group script = /usr/sbin/smbldap-groupdel “%g”


64 agregar:


set primary group script = /usr/sbin/smbldap-usermod -g ‘%g’ ‘%u’
admin users = master
ldap ssl = no


Reiniciar los servicios de Samba, y asignar clave al usuario admin:


root@pdc:~# mkdir /home/netlogon
root@pdc:~# /etc/init.d/samba restart
root@pdc:~# smbpasswd -W
Setting stored password for “cn=admin,dc=mi,dc=dominio,dc=cu” in secrets.tdb
New SMB password: mi clave
Retype new SMB password: mi clave


Una vez instalado, SAMBA y phpldapadmin, este último requiere de una utilidad llamada mkntpwd para crear los hashes de Samba. Debido a que esta utilidad no ha sido incluida en el paquete smbldap-tools de Debian, habrá que descargar sus archivos fuente de Internet y compilarlos en nuestro sistema para que nos genere el ejecutable de mkntpwd:


root@pdc:~#cd /opt/
root@pdc:~#wget http://www.silcom.com.pe/soft/mkntpwd.tar.gz
pdc:~#tar -zxf mkntpwd.tar.gz
root@pdc:~#cd mkntpwd


Ahora, será necesario compilarlo con make, pero al parecer el compilador build-essencial que contiene los paquetes make en la librería gcc ya no están disponibles en los repositorios de Debian Squeeze, para lo cual se hará una maniobra de actualización de lista de paquetes con los repositorios de Debian Wheezy que aún está en Testing para instalar dichos paquetes.


root@pdc:~#nano /etc/apt/sources.list


Buscar y cambiar todas las palabras que contengan ‘squeeze’ por ‘wheezy, grabar y salir, entonces actualizar lista de paquetes:


root@pdc:~#apt-get update


Una vez actualizada la lista, instalar el paquete make y gcc:


root@pdc:~#apt-get install make gcc


Y finalmente compilarlo:


root@pdc:~#make
root@pdc:~#cp mkntpwd /usr/local/bin

Ahora, para verificar que el paquete se haya instalado correctamente, ejecutar:


root@pdc:~#mkntpwd


Entonces el sistema deberá desplegar algo como esto:


Usage: mkntpwd [-L lanmgrpwd] [-N ntpasswd]
mkntpwd password
mkntpwd -f [-] [filename]
-L lanmgrpasswd LanManager cleartextpwd ⇐ 14 chars
-N ntpasswd NT cleartextpwd ⇐128 chars (usually ⇐14)
with both options present the encrypted LanManager-Pwd is
printed first, followed by a ‘:’ and the encrypted NT-Pwd.
The second usage behaves like mkntpwd -L pwd -N pwd
The third usage reads the password from STDIN or a File. Printout is the same as second.
anton@genua.de


Ahora se procederá a configurar smbldap-tools:


root@pdc:~# gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz
root@pdc:~# perl /usr/share/doc/smbldap-tools/configure.pl


A todas las preguntas, dar ENTER (pero no está por demás leerlas), excepto a “logon home” y “logon path”, a las que se dará como respuesta un punto “.” y luego ENTER.
El password es “clave personalizada, como siempre.


Finalmente, se debe poblar el dominio samba con algunos grupos de dominio similar a la estructura de un Active Directory de Windows.


root@pdc:~# smbldap-populate
Populating LDAP directory for domain MiDominio (S-1-5-21-3529095435-2300348255-434367669) (using builtin directory structure)
entry dc=mi,dc=dominio,dc=cu already exist.
entry ou=people,dc=mi,dc=dominio,dc=cu already exist.
entry ou=groups,dc=mi,dc=dominio,dc=cu already exist.
adding new entry: ou=Computers,dc=mi,dc=dominio,dc=cu
adding new entry: ou=Idmap,dc=mi,dc=dominio,dc=cu
adding new entry: uid=root,ou=people,dc=mi,dc=dominio,dc=cu
adding new entry: uid=nobody,ou=people,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Domain Admins,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Domain Users,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Domain Guests,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Domain Computers,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Administrators,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Account Operators,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Print Operators,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Backup Operators,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Replicators,ou=groups,dc=mi,dc=dominio,dc=cu
entry sambaDomainName=MiDominio,dc=mi,dc=dominio,dc=cu already exist. Updating it…

Y todo quedará listo, bastará con crear las cuentas de usuario desde phpldapadmin dentro del grupo Domain Users o Domain Admins sea el caso que corresponda.

5.1. CREAR CUENTAS DE EQUIPO EN EL DOMINIO

Samba utiliza un script propio para la creación de cuentas de equipo automáticamente cuando se intente unir al dominio una estación de trabajo.


5.2. UNIR EQUIPOS CON WINDOWS A DOMINIO SAMBA


5.2.1. EN WINDOWS XP


Para Registrar máquinas con Windows XP se debe crear/modificar la siguiente etiqueta de registro usando regedit:


Situarse en:


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters]


Y agregar/cambiar el siguiente valor


requiresignorseal”=dword:00000000


Luego editar el archivo C:\WINDOWS\system32\drivers\etc\hosts en un bloc de notas


y agregar al final del archivo la ip del servidor PDC con el nombre del dominio


192.168.1.1 MiDominio


Finalmente, agregamo el cliente al dominio:
Botón derecho sobre “Mi PC” → Properties
Vamos a la solapa “Computer Name”
Clickeamos el botón que dice “Change …”
Seleccionamos la opción “Domain”
Domain: MiDominio → Ok
Username: MiDominio\root
Password: claveroot


5.2.2. EN WINDOWS 7

Para unir equipos con Microsoft Windows 7 a un dominio con Samba, primeramente se debe agregar/modificar un par de parámetros al registro del Sistema Operativo Cliente (Windows 7). Para ello, primero ejecutar el Editor de Registros (regedit), seguido de ello se debe ubicar en la siguiente diracción:


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl\Setservices\LanmanWorkstation\Parameters]


Una vez ahí, se debe agregar 2 nuevos valores DWORD, e ingresar los siguientes nombres, con los siguientes valores:


"DomainCompatibilityMode" = 1
"DNSNameResolutionRequired" = 0


Luego situarse en:


[HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\Netlogon\Parameters]


Y agregar/modificar:


RequireSignOrSeal”=dword:00000000
RequireStrongKey”=dword:00000001


Luego crear/modificar los valores DWORD:


[\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System]


LocalProfile” = 1
ReadOnlyProfile” = 1


Ir al > Panel de Control, en > Herramientas administrativas, > Configuración de seguridad, > Directivas locales, > Opciones de seguridad y buscar los siguientes dos renglones pertenecientes a > Seguridad de red:


seguridad de sesión mínima para clientes NTLM basados en SSP
seguridad de sesión mínima para servidores NTLM basados en SSP


En ambos, quitar la marca en Requerir cifrado de 128 bits”, Reiniciar el sistema y probar la unión al dominio, de la manera habitual.


5.3. DAR DE ALTA USUARIOS Y GRUPOS EN EL DOMINIO

Para crear grupos y usuarios de dominio, bastará con ingresar por phpldapadmin y agregar grupo o usuario según sea el caso.


6. RECOMENDACIONES


Para agregar usuarios con permisos administrativos en el dominio, será necesario asignar el gidNumber y uidNumber con 0, de esta manera se puede conservar la clave de root secreta sólo para el administrador.