Server Ldap+Apache2+Samba

Tema: 

Pues bien muchos son los problemas que nos ocacionan avese los usuariuos a la hora del cambio de contraseñas y la gestion de los servicios en nustra red. pues aqui traigo una integracion perfecta del directorio ldap con los servicios necesarios. Partiendo de que ya tenemos instalado un server DNS que nos resuelve las consulta al 100% pues empezamos con la faena.
Para instalar es servidor ldap:

apt-get install slapd ldap-utils

Nos pedirá el dominio

prueba.miisp.cu

Aquí quedaría definida la base

dc=prueba,dc=miispdc=com

Luegos nos pedira la contraseña del root para el server Ldap.
Bien pero queremos que nustras contraseñas en los usuarios del server ldap sean cifrada; para ellos utilizaremos el modulo 5

slappasswd -h {md5}

Ponemos nuestro passwd y lo reafirmamos. Bueno esta baina comienza a tomar forma.
Ahora debemos detener nuestro servidor para la configuracion que deseamos.

/etc/init.d/slapd stop

Eliminamos las bases antiguas

rm /var/lib/ldap/*

Ahora reconfiguramos a nuestro estilo el Ldap

dpkg-reconfigure slapd

bien aca nos volverá a pedir el dominio primero, la base después, sería así:

prueba.miisp.com
dc=prueba,dc=miisp,dc=com

luego pediría la contraseña para el root, tambien pedira borrar las bases de datos antiguas, pero ojo ya las hemos borrado, y por que version van a bindiar los servicios, pues bien escogeremos por la version 2. Ya con esto tendremos nuestro servidor ldap, ahora debemos tener los schema para el samba, dhcp y los servicios. Pues debemos bajarlos de internet.
Modificamos el fichero /etc/ldap/slapd.conf

nano /etc/ldap/slapd.conf

y debería quedar de esta forma:

allow bind_v2

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema
include /etc/ldap/schema/services.schema
include /etc/ldap/schema/dhcp.schema

pidfile /var/run/slapd/slapd.pid

argsfile /var/run/slapd/slapd.args

loglevel none

modulepath /usr/lib/ldap
moduleload back_hdb

sizelimit 10000

tool-threads 1

backend hdb

database hdb

suffix "dc=prueba,dc=miisp,dc=com"

rootdn "cn=admin,dc=prueba,dc=miisp,dc=com"
rootpw "{MD5}GWrMXsn1hDAWJboeHjEF6g==" # aquí es donde se pone el passwd cifrado que anterior obtubimos con la instruccion slappasswd -h {md5}

moduleload syncprov
overlay syncprov
syncprov-checkpoint 50 10
syncprov-sessionlog 100

directory "/var/lib/ldap"

dbconfig set_cachesize 0 2097152 0

dbconfig set_lk_max_objects 1500

dbconfig set_lk_max_locks 1500

dbconfig set_lk_max_lockers 1500

index default sub
index objectClass eq
index entryCSN eq
index entryUUID eq
index uidNumber eq
index gidNumber eq
index mail eq
index sambaSID eq
index sambaPrimaryGroupSID eq
index givenName pres,sub,eq
index sn pres,sub,eq
index cn pres,sub,eq
index uid pres,sub,eq

lastmod on

checkpoint 512 30

access to dn.subtree="cn=equipos,dc=prueba,dc=miisp,dc=com"
by dn="cn=admin,dc=prueba,dc=miisp,dc=com" write
by dn="cn=samba,dc=prueba,dc=miisp,dc=com" write
by * read

access to attrs=userPasswkey,userPassword,sambaLMPassword,sambaNTPassword
by dn="cn=admin,dc=prueba,dc=miisp,dc=com" write
by dn="cn=chpass,dc=prueba,dc=miisp,dc=com" write
by dn="cn=mailauth,dc=prueba,dc=miisp,dc=com" read
by dn="cn=syncrepl,dc=prueba,dc=miisp,dc=com" read
by dn="cn=samba,dc=prueba,dc=miisp,dc=com" write
by anonymous auth
by * none

access to attrs=userPasswdac,userPasswdch,userPasswdip,sambaAcctFlags,sambaPwdLastSet,title
by dn="cn=admin,dc=prueba,dc=miisp,dc=com" write
by dn="cn=chpass,dc=prueba,dc=miisp,dc=com" write
by dn="cn=mailauth,dc=prueba,dc=miisp,dc=com" read
by * read

access to dn.base="" by * read

access to *
by dn="cn=admin,dc=prueba,dc=miisp,dc=com" write
by * read

bien este es el fichero del server ldap pero en /etc/ldap/schema debemos poner los schema que anteriormente mencione.
Ahora le damos permiso de al usuario y grupo ldap de poder leer el fichero modificado.

chown openldap.openldap /etc/ldap/slapd.conf

reiniciamos nuestro servidor y listo

/etc/init.d/slapd restart

Aora comenzaremos la baina del apache que es nuestro server web.

apt-get install apache2 php5-ldap

Ahora instalamos nuestro phpldapadmin que seria el cliente para ver grafico nuestro directorio ldap.

apt-get install phpldapadmin

Abrimos nuetro navegador de preferencias y http://localhost/phpldapadmin

Bueno la baina comiensa realmente ahora, en nuestro phpldapadmin que es donde debemos configurar algunas cosillas.
- Vamos a eliminar la base creada automatica por nuestro ldap, OJO, en este periodo no devemos serrar el phpldapadmin abirto. Vamos a crear en un directorio X un fichero llamado base.ldif, el contenido de este fichero sera el siguiente:

version: 1

# LDIF Export for: dc=prueba,dc=miisp,dc=com
# Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on May 30, 2010 12:17 pm
# Server: PDC-SERVER (ldap://127.0.0.1)
# Search Scope: sub
# Search Filter: (objectClass=*)
# Total Entries: 103

dn: dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: prueba.miisp.com
dc: fra

dn: cn=chpass,dc=prueba,dc=miisp,dc=com
cn: chpass
description: LDAP administrator
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {MD5}4YHoxGaWMDMi+9Z9U14+mA==

dn: cn=equipos,dc=prueba,dc=miisp,dc=com
cn: equipos
objectClass: top
objectClass: dhcpService
objectClass: dhcpOptions
dhcpPrimaryDN: cn=dhcp.prueba.miisp.com,cn=equipos,dc=fra,dc=hlg,dc=rimed,dc =cu
dhcpSubnetDN: cn=10.0.0.0,cn=dhcp.prueba.miisp.com,cn=equipos,dc=prueba,dc=miisp,dc=com
dhcpStatements: server-name DHCP
dhcpStatements: server-identifier dhcp.prueba.miisp.com
dhcpStatements: ddns-update-style none
dhcpStatements: ddns-domainname "prueba.miisp.com"
dhcpStatements: log-facility local7
dhcpStatements: authoritative
dhcpStatements: max-lease-time 84600
dhcpStatements: default-lease-time 180000
dhcpStatements: filename "pxelinux.0"
dhcpStatements: next-server 10.0.0.1
dhcpOption: domain-name "prueba.miisp.com"
dhcpOption: domain-name-servers 10.0.0.1
dhcpOption: netbios-name-servers 10.0.0.1
dhcpOption: netbios-dd-server 10.0.0.1
dhcpOption: netbios-node-type 8
dhcpOption: ip-forwarding off
dhcpOption: ntp-servers 10.0.0.1
dhcpOption: wpad-url code 252 = text
dhcpOption: wpad-url "http://wpad.prueba.miisp.com/wpad.dat\n"

dn: cn=dhcp.prueba.miisp.com,cn=equipos,dc=prueba,dc=miisp,dc=com
cn: dhcp.prueba.miisp.com
dhcpVersion: V3.1.1
objectClass: top
objectClass: dhcpServer
dhcpServiceDN: cn=equipos,dc=prueba,dc=miisp,dc=com

dn: cn=10.0.0.0,cn=dhcp.prueba.miisp.com,cn=equipos,dc=prueba,dc=miisp,dc=com
cn: 10.0.0.0
dhcpNetMask: 24
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
dhcpOption: broadcast-address 10.255.255.254
dhcpRange: 10.0.0.1 10.0.0.254

dn: cn=mailauth,dc=prueba,dc=miisp,dc=com
cn: mailauth
description: LDAP administrator
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {MD5}rZ/4pwwijBTLvCEUvRfXIw==

dn: cn=samba,dc=prueba,dc=miisp,dc=com
cn: samba
description: LDAP administrator
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {MD5}hKS5bSpYlur/cNsNFYwyEA==

dn: cn=syncrepl,dc=prueba,dc=miisp,dc=com
cn: syncrepl
description: LDAP administrator
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {MD5}mmNLC59GOlldJ9LzLZLFkQ==

dn: ou=grupos,dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: organizationalUnit
ou: grupos

dn: cn=Account Operators,ou=grupos,dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 548
cn: Account Operators
description: Netbios Domain Users to manipulate users accounts
sambaSID: S-1-5-32-548
sambaGroupType: 5
displayName: Account Operators

dn: cn=Administrators,ou=grupos,dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 544
cn: Administrators
description: Netbios Domain Members can fully administer the computer/sambaD
omainName
sambaSID: S-1-5-32-544
sambaGroupType: 5
displayName: Administrators
memberUid: admin

dn: cn=Backup Operators,ou=grupos,dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 551
cn: Backup Operators
description: Netbios Domain Members can bypass file security to back up file
s
sambaSID: S-1-5-32-551
sambaGroupType: 5
displayName: Backup Operators

dn: cn=Domain Admins,ou=grupos,dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 512
cn: Domain Admins
description: Netbios Domain Administrators
sambaGroupType: 2
displayName: Domain Admins
sambaSID: S-1-5-21-2426537050-1888680479-2241998807-512
memberUid: admin

dn: cn=Domain Computers,ou=grupos,dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 515
cn: Domain Computers
description: Netbios Domain Computers accounts
sambaGroupType: 2
displayName: Domain Computers
sambaSID: S-1-5-21-2426537050-1888680479-2241998807-515

dn: cn=Domain Guests,ou=grupos,dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 514
cn: Domain Guests
description: Netbios Domain Guests Users
sambaGroupType: 2
displayName: Domain Guests
sambaSID: S-1-5-21-2426537050-1888680479-2241998807-514

dn: cn=Domain Users,ou=grupos,dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 513
cn: Domain Users
description: Netbios Domain Users
sambaGroupType: 2
displayName: Domain Users
sambaSID: S-1-5-21-2426537050-1888680479-2241998807-513
memberUid: admin

dn: cn=Print Operators,ou=grupos,dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 550
cn: Print Operators
description: Netbios Domain Print Operators
sambaSID: S-1-5-32-550
sambaGroupType: 5
displayName: Print Operators

dn: cn=Replicators,ou=grupos,dc=prueba,dc=miisp,dc=com
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 552
cn: Replicators
description: Netbios Domain Supports file replication in a sambaDomainName
sambaSID: S-1-5-32-552
sambaGroupType: 5
displayName: Replicators

dn: ou=Usuarios,dc=prueba,dc=miisp,dc=com
objectClass: organizationalUnit
objectClass: top
ou: Usuarios

Ahora este arhivo se lo vamos a importar a al ldap por el phpldapadmin.
Co esto quedaría realizada nuestra estructura para el servidor.
-Ahora intalaremos Samba

apt-get install samba

ahora creamos en el directorio /etc/samba/ sol ficheros siguientes

touch /etc/samba/addmaq
touch /etc/samba/builder

-Ahora modificaremos dichos archivos

nano /etc/samba/addmaq

el contenido sería sí

#!/bin/bash

ldaphost="127.0.0.1"
ldapbase="dc=prueba,dc=miisp,dc=com"
ldapbind="cn=samba,dc=prueba,dc=miisp,dc=com"
ldappass="LDKF1Gwj95A37LDJLaoJAdffosd039KG" #esta es la clave de la cuenta samba que esta en el ldap que es la encargada de leer las contraseñas de los usuarios para el dominio pueden variarla tocando piano en el teclado, crear su propia contraseña segura.
sambasid="S-1-5-21-2426537050-1888680479-2241998807"

dndomain=`echo $ldapbase | sed 's/dc=//g' | sed 's/,/./g'`
macaddrs=`/usr/sbin/arp -a $2 | awk '{print $4}'`

cl="/var/lib/samba"
if [ -f $cl/mach.log ]; then
uidNumber=`cat $cl/mach.log`
else
uidNumber="1000"
fi

uid=`ldapsearch -x -LLL "(dhcpHWAddress=ethernet $macaddrs)" uid | grep ^uid | awk '{print $2}' | sed 's/\\$//'`

if [ $uid ];then
echo ERROR en nombre de equipo - cambiar \(`echo $1 | sed 's/\\$//'`\) por \($uid\) \"$2\" $3 by $4 >> /var/log/addmachine/add.log
else
search="none"
while [ $search ]; do
uidNumber=`expr $uidNumber + 1`
search=`ldapsearch -h "$ldaphost" -x -b "cn=equipos,$ldapbase" "(uidNumber="$uidNumber")" uidNumber | grep ^uidNumber | awk '{ print $2 }'`
done

echo "dn: uid=$1,cn=equipos,$ldapbase" > $cl/machine.ldif
echo "objectClass: top" >> $cl/machine.ldif
echo "objectClass: dhcpHost" >> $cl/machine.ldif
echo "objectClass: sambaSamAccount" >> $cl/machine.ldif
echo "objectClass: posixAccount" >> $cl/machine.ldif
echo "description: --" >> $cl/machine.ldif
echo "gidNumber: 515" >> $cl/machine.ldif
echo "homeDirectory: /dev/null" >> $cl/machine.ldif
echo "loginShell: /bin/false" >> $cl/machine.ldif
echo "sambaAcctFlags: [W ]" >> $cl/machine.ldif
echo "uid: $1" >> $cl/machine.ldif
echo "sambaSID: $sambasid-$uidNumber" >> $cl/machine.ldif
echo "uidNumber: $uidNumber" >> $cl/machine.ldif
echo "cn: `echo $1 | sed 's/\\$//'`" >> $cl/machine.ldif
echo "dhcpHWAddress: ethernet $macaddrs" >> $cl/machine.ldif
echo "dhcpStatements: fixed-address $2" >> $cl/machine.ldif
echo "dhcpStatements: host-name `echo $1 | sed 's/\\$//'`.$dndomain" >> $cl/machine.ldif
echo "$uidNumber" > $cl/mach.log

ldapadd -h $ldaphost -D $ldapbind -w $ldappass -x -f $cl/machine.ldif
rm $cl/machine.ldif
fi


nano /etc/samba/builder

y el contenido quedaría así

#!/bin/bash
if [ ! -d /home/$1 ]; then
mkdir /home/$1
chown $1 /home/$1
chmod 755 /home/$1 -R
setquota -u $1 512000 512000 0 0 -a
fi

-ahora modificaremos el smb.conf

nano /etc/samba/smb.conf

quedaria su contenido así:

[global]
dos charset = UTF-8
unix charset = UTF-8
netbios name = PDC-SERVER
workgroup = PRUEBA
server string = Controlador de Dominio
interfaces = lo, eth0
bind interfaces only = yes
passdb backend = ldapsam:ldap://127.0.0.1/
log level = 1
syslog = 0
log file = /var/log/samba/%I.log
max log size = 1024
wins support = yes
ldap suffix = dc=prueba,dc=miisp,dc=com
ldap admin dn = cn=samba,dc=prueba,dc=miisp,dc=com
ldap user suffix = ou=usuarios
ldap group suffix = ou=grupos
ldap machine suffix = cn=equipos
ldap passwd sync = yes
socket options = IPTOS_LOWDELAY TCP_NODELAY
remote announce = 255.255.255.255
load printers = no
disable spoolss = yes
time server = yes
logon script = logon.bat
logon path = \\%L\%u\profile
logon drive = X:
logon home = \\%L\%u
os level = 65
domain logons = yes
preferred master = yes
domain master = yes
local master = yes
add machine script = /etc/samba/addmaq "%u" "%I" "%T" "%U"

[netlogon]
comment = Network Logon Service
path = /etc/samba/netlogon
write list = admin
force user = root
create mask = 0700
directory mask = 0700
guest ok = yes
browseable = no
fake oplocks = yes
share modes = no

[logs]
path=/var/log
valid users = admin
force user = root
writable = no
browseable = no
fake oplocks = yes
share modes = no

[logs-old]
path=/home/databank
valid users = admin
force user = root
writable = no
browseable = no
fake oplocks = yes
share modes = no

[homes]
comment = Carpeta Personal
path = /home/%u
read only = no
veto files = /autorun.inf/
delete veto files = yes
hide files = /profile/desktop.ini/
browseable = no
root preexec = "/etc/samba/builder %u"


el otro fichero a modificar sería el siguiente

nano /etc/samba/gdbcommands

que debería quedar así

bt
quit

ahora reiniciamos samba

/etc/init.d/samba restart

Ah pero nos falta pasar el localsid de samba y poner la contraseña a la cuenta que se encargara de bindear los servicios. Para ello haremos lo siguiente

net setlocalsid S-1-5-21-2426537050-1888680479-2241998807


smbpasswd -W

Pondremos la contraseña que se encuentra en el fichero /etc/samba/addmaq en la linea ldappass="LDKF1Gwj95A37LDJLaoJAdffosd039KG" todo lo que esta entre "" es la contraseña.la copiamos y la pegamos en la terminal abierta con el comando smbpasswd -W ejecutado, la ratificamos y listo
-Ahora vamos a verificar nuestro PDC

net getlocalsid

Si nos devuelve esto entonces estara todo listo para adicionar PC.

SID for domain PDC-SERVER is: S-1-5-21-2426537050-1888680479-2241998807

Bueno en otro blogs publicare como crear una pagina para crear los usuarios con los atributos correspondientes y una para el cambio de contraseña, hasta ahora Buena suerte. pueden escribirme para obtener los schemas a mi dirección admin@fra.hlg.rimed.cu el que no tenga la dicha de encontrarlo en Internet.

hasta otro invento.

Comentarios

Te recomiendo que si vas a

Imagen de skypower

Te recomiendo que si vas a publicar esos Howto, uses la fuente o el autor Ej:(By Rimed [wilfredo-vcl, Ariel-cfg, Anibal-hlg] o [http://ftp.inivit.cu/linux/howto/] lo separes por tema, no unas las partes de correo con la de samba y de igual modo la parte de dhcp. Ademas debes explicar porque lo usas asi y no de otro modo...

Puedes hacerlo asi:
LDAP
LDAP+PDC
LDAP+DHCP
LDAP+CORREO
LDAP+PROXY
LDAP+JABBER
LDAP+PPP

etc

O

Uno que lo abarque todo...
LDAP+PDC+DHCP+CORREO+PROXY+JABBER+PPP

Me refiero a esto: server_ldap-apache-samba
Y usas un usuario para correo y para cambiar pass sin publicarlo

by dn="cn=mailauth,dc=prueba,dc=miisp,dc=com" read
by dn="cn=chpass,dc=prueba,dc=miisp,dc=com" write

En resumen, sube todas las configuraciones correspondientes a cada tema...

Salud2s...

ecualug
______________________
!!!AdminRed_Debian!!!