- Este HOWTO es una recopilación de muchos otros howtos que dan vuelta por internet, pero ninguno me funcionaba del todo. Asi que en base a todos ellos publico este howto para que les sirva tanto como a mi.
- Probado y testeado en Debian Lenny
Instalacion
Lo primero que hacemos es un update de nuestro equipo e instalamos los siguientes packetes
apt-get update
apt-get install apache2-suexec libapache2-mod-php5 php5 php5-cli php5-curl php5-gd php5-imap
apt-get install php5-ldap php5-mcrypt php5-mhash php5-sqlite php5-tidy php5-xmlrpc php-pear
apt-get install slapd mcrypt ldap-utils libgd-tools apache2-doc samba swat smbclient smbfs
apt-get install smbldap-tools libpam-ldap libnss-ldap resolvconf phpldapadmin
Podemos obviar las configuraciones, ya que lo haremos todo más adelante.
Configurar slapd
Ejecutamos el comando dpkg-reconfigure slapd y completamos segun los siguientes parámetros:
- Omitir la configuración de OpenLDAP? No
- Nombre de dominio: midominio.com.ar
- Nombre de organización: midominio.com.ar
- Contraseña del admin: CAMBIAR
- Motor de base de datos a utilizar: HDB
- Borrar la base de datos al purgar slapd ? No
- Permitir LDAP v2? No
Hacemos una copia de seguridad de nuestra base de datos LDAP inicial, con el siguiente comando:
slapcat > ~/slapd.ldif
Ahora copiamos el esquema LDAP para Samba:
zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
Generamos una contraseña para root encriptada con MD5:
slappasswd -h {MD5}
Ahora copiamos y reemplazamos el /etc/ldap/slapd.conf con esta versión (cambiando los datos relacionados al dominio):
#######################################################################
#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
include /etc/ldap/schema/samba.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
loglevel none
modulepath /usr/lib/ldap
moduleload back_hdb
sizelimit 500
tool-threads 1
backend hdb
database hdb
suffix "dc=midominio,dc=com,dc=ar"
rootdn "cn=admin,dc=midominio,dc=ar"
# Reemplazar con nuestra pass
rootpw {MD5}Qhz0AB5FDDDYFKBJVAngcw==
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 objectClass eq,pres
index ou,cn,sn,mail,givenname eq,pres,sub
index uidNumber,gidNumber,memberUid eq,pres
index loginShell eq,pres
index uid pres,sub,eq
index displayName pres,sub,eq
index nisMapName,nisMapEntry eq,pres,sub
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub
index uniqueMember eq
index sambaGroupType eq
index sambaSIDList eq
lastmod on
checkpoint 512 30
access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet
by self write
by anonymous auth
by * none
access to attrs=shadowLastChange,shadowMax
by self write
by * read
access to *
by * read
Ahora detenemos el nscd:
/etc/init.d/nscd stop
Renovamos la base de datos de LDAP con los siguientes comandos:
/etc/init.d/slapd stop
rm -rf /var/lib/ldap/*
slapadd -l ~/slapd.ldif
slapindex
chown -Rf openldap:openldap /var/lib/ldap
/etc/init.d/slapd start
Ahora verificamos que todo está correcto ejecutando slapcat
Configurar Samba
Para configurar Samba copiamos y reemplazamos el /etc/samba/smb.conf con esta versión:
[global]
dos charset = UTF-8
display charset = UTF-8
workgroup = midominio.com.ar
realm = midominio.com.ar
server string = %h server
map to guest = Bad User
passdb backend = ldapsam:ldap://127.0.0.1/
pam password change = Yes
passwd program = /usr/sbin/smbldap-passwd -u %u
passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated*
unix password sync = Yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
time server = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
add user script = /usr/sbin/smbldap-useradd -m %u
delete user script = /usr/sbin/smbldap-userdel %u
add group script = /usr/sbin/smbldap-groupadd -p %g
delete group script = /usr/sbin/smbldap-groupdel %g
add user to group script = /usr/sbin/smbldap-groupmod -m %u %g
delete user from group script = /usr/sbin/smbldap-groupmod -x %u %g
set primary group script = /usr/sbin/smbldap-usermod -g %g %u
add machine script = /usr/sbin/smbldap-useradd -w %u
logon script = logon.bat
logon path = \\%N\profiles\%U
logon drive = H:
domain logons = Yes
os level = 65
preferred master = Yes
domain master = Yes
dns proxy = No
wins support = Yes
ldap admin dn = cn=admin,dc=midominio,dc=com,dc=ar
ldap delete dn = Yes
ldap group suffix = ou=group
ldap idmap suffix = ou=idmap
ldap machine suffix = ou=computer
ldap suffix = dc=midominio,dc=com,dc=ar
ldap ssl = no
ldap user suffix = ou=people
panic action = /usr/share/samba/panic-action %d
case sensitive = No
[homes]
comment = Home Directories
valid users = %S
read only = No
create mask = 0600
directory mask = 0700
browseable = No
[printers]
comment = All Printers
path = /var/spool/samba
create mask = 0700
printable = Yes
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
[netlogon]
path = /var/lib/samba/netlogon
browseable = No
[profiles]
path = /var/lib/samba/profiles
force user = %U
read only = No
create mask = 0600
directory mask = 0700
guest ok = Yes
profile acls = Yes
browseable = No
csc policy = disable
[public]
path = /tmp
read only = No
guest ok = Yes
Ahora vamos a crear el password de root para samba:
smbpasswd -w CAMBIAR
Creamos los directorios para el netlogon y los profiles y reiniciamos samba:
mkdir -p /var/lib/samba/netlogon /var/lib/samba/profiles
chown -Rf root:root /var/lib/samba/netlogon /var/lib/samba/profiles
chmod 1777 /var/lib/samba/profiles
/etc/init.d/samba restart
Probamos el fichero de configuración con testparm y comprobamos que no haya mensajes de error.
Preparamos los ficheros de configuración de smbldap-tools
zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf
cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf
Buscamos el Samba SID de nuestro PDC para despues ponerlo en /etc/smbldap-tools/smbldap.conf:
net getlocalsid
y reemplazamos nuestro /etc/smbldap-tools/smbldap.conf con esta versión. Recordemos cambiar el SID y modificarlo según nuestras necesidades:
SID="S-1-5-21-1169193956-4199179787-2206793627"
sambaDomain="midominio.com.ar"
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
ldapTLS="0"
verify="require"
cafile="/etc/smbldap-tools/ca.pem"
clientcert="/etc/smbldap-tools/smbldap-tools.pem"
clientkey="/etc/smbldap-tools/smbldap-tools.key"
suffix="dc=midominio,dc=com,dc=ar"
usersdn="ou=people,${suffix}"
computersdn="ou=computer,${suffix}"
groupsdn="ou=group,${suffix}"
idmapdn="ou=idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"
hash_encrypt="MD5"
crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="45"
userSmbHome=""
userProfile=""
userHomeDrive="H:"
userScript="logon.bat"
mailDomain="midominio.com.ar"
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"
Actualizamos /etc/smbldap-tools/smbldap_bind.conf con lo siguiente:
slaveDN="cn=admin,dc=midominio,dc=com,dc=ar"
slavePw="CAMBIAR"
masterDN="cn=admin,dc=midominio,dc=com,dc=ar"
masterPw="CAMBIAR"
Cambiamos la configuración con los permisos correctos:
chmod 0644 /etc/smbldap-tools/smbldap.conf
chmod 0600 /etc/smbldap-tools/smbldap_bind.conf
Ahora terminamos de crear nuestra base de datos ldap con el mapeo automatico de los grupos POSIX de Linux y Windows:
smbldap-populate
Hacemos backup a la base de datos anterior:
slapcat > ~/smbldap.ldif
Configurar PAM/NSS
Configuramos PAM/NSS con LDAP dpkg-reconfigure libnss-ldap
* LDAP server Uniform Resource Identifier: ldap://127.0.0.1
* Distinguished name of the search base: dc=midominio,dc=com,dc=ar
* LDAP version to use: 3
* Does the LDAP database require login? No
* Special LDAP privileges for root? Yes
* Make the configuration file readable/writeable by its owner only? Yes
* LDAP account for root: cn=admin,dc=midominio,dc=com,dc=ar
* LDAP root account password: CAMBIAR
Configurar NSSWITCH
Actualizamos /etc/nsswitch.conf como sigue:
passwd: files ldap
group: files ldap
shadow: files ldap
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 ldap
Configurar LDAP
Añadimos las siguientes lineas a /etc/ldap/ldap.conf
host localhost
base dc=midominio,dc=com,dc=ar
binddn cn=admin,dc=midominio,dc=com,dc=ar
bindpw CAMBIAR
bind_policy soft
pam_password exop
timelimit 15
nss_base_passwd dc=midominio,dc=com,dc=ar?sub
nss_base_shadow dc=midominio,dc=com,dc=ar?sub
nss_base_group ou=group,dc=midominio,dc=com,dc=ar?one
Configurar LIBNSS-LDAP
Y modificamos las siguientes lineas en /etc/libnss-ldap.conf
bind_policy soft
pam_password md5
nss_base_passwd dc=midominio,dc=com,dc=ar?sub
nss_base_shadow dc=midominio,dc=com,dc=ar?sub
nss_base_group ou=group,dc=midominio,dc=com,dc=ar?one
Chequeamos /etc/libnss-ldap.secret
cat /etc/libnss-ldap.secret
Configurar LIBPAM-LDAP
Ejecutamos dpkg-reconfigure libpam-ldap
* LDAP server Uniform Resource Identifier: ldap://127.0.0.1
* Distinguished name of the search base: dc=midominio,dc=com,dc=ar
* LDAP version to use: 3
* Make local root Database admin. Yes
* Does the LDAP database require login? No
* LDAP account for root: cn=admin,dc=midominio,dc=com,dc=ar
* LDAP root account password: CAMBIAR
* Local crypt to use when changing passwords. MD5
Modificamos las siguientes líneas en /etc/pam_ldap.conf
bind_policy soft
nss_base_passwd dc=midominio,dc=com,dc=ar?sub
nss_base_shadow dc=midominio,dc=com,dc=ar?sub
nss_base_group ou=group,dc=midominio,dc=com,dc=ar?one
Chequeamos /etc/libnss-ldap.secret
cat /etc/libnss-ldap.secret
Actualizamos /etc/pam.d/common-account como sigue
account sufficient pam_ldap.so
account required pam_unix.so
Actualizamos /etc/pam.d/common-auth como sigue
auth [success=1 default=ignore] pam_unix.so
auth required pam_ldap.so use_first_pass
auth required pam_permit.so
Actualizamos /etc/pam.d/common-password
password sufficient pam_ldap.so
password required pam_unix.so nullok obscure md5
Actualizamos /etc/pam.d/common-session
session optional pam_ldap.so
session required pam_unix.so
PRUEBAS
Ahora creamos un usuario de prueba para comprobar que todo está bien:
smbldap-useradd -a -m test
smbldap-passwd test
En el server de pruebas hay un script para dar el alta a los nuevos usuarios. El mismo esta ubicado en /usr/local/bin/adduserdomain y le debemos pasar como unico parametro el nombre del usuario a crear. Luego le asignaremos la contraseña cuando el script la solicite.
Con getent passwd y getent group podemos comprobar los grupos y usuarios.
Unir terminales Windows al dominio
Para Windows 2000 el procedimiento es normal, pero en Windows Xp tenemos que hacer un pequeño ajuste. Ejecutamos regedit, ir a la siguiente clave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters
y en el valor de requiresignorseal que es de tipo dword le asignamos 0, también al valor de requirestrongkey que es de tipo dword le asignamos 0
Debemos reiniciar la terminal antes de unirla al dominio, para que los cambios surtan efecto.
Unir terminales Linux al dominio
Primero, debemos loguearnos a la maquina que vamos a unir al dominio para configurar PAM/NSS.
Instalemos en el cliente el software necesario
aptitude install libnss-ldap libpam-ldap libpam-cracklib
y respondemos segun la siguiente conf:
Configuración de libnss-ldap:
- Identificador de recursos para el servidor LDAP: ldap://10.1.4.1/
- El nombre distintivo (DN) de la base de búsquedas: dc=midominio,dc=com,dc=ar
- Versión de LDAP a utilizar: 3
- Cuenta LDAP para root: cn=admin,dc=midominio,dc=com,dc=ar
- Contraseña para la cuenta LDAP de root: dejar vacío
Configuración de libpam-ldap:
- Crear un administrador de la base de datos local: No
- ¿Hace falta un usuario para acceder a la base de datos LDAP? : No
Los archivos de configuración de PAM y NSS
PAM y NSS utilizarán la misma base de datos ldap, por la tanto su configuración es igual. Editamos los archivos /etc/libnss-ldap.conf y /etc/pam_ldap.conf, y reemplazamos con lo siguiente (la configuración es muy similar a la del servidor):
# DN base
base dc=midominio,dc=com,dc=ar
# URI del servidor ldap, en nuestro caso es 192.168.1.200
uri ldap://10.1.4.1/
# Version de ldap a utilizar
ldap_version 3
# Cuenta de root ldap
# Esta linea no es necesaria, la comentamos o borramos
# rootbinddn cn=admin,dc=midominio,dc=com,dc=ar
bind_policy soft
pam_password md5
nss_base_passwd dc=midominio,dc=com,dc=ar?sub
nss_base_shadow dc=midominio,dc=com,dc=ar?sub
nss_base_group ou=group,dc=midominio,dc=com,dc=ar?one
Modificamos /etc/nsswitch.conf agregando ldap para las búsquedas y wins para resolver nombres:
passwd: files ldap
group: files ldap
shadow: files ldap
hosts: files wins dns
Hacemos un backup de la configuración de PAM
# cp -a /etc/pam.d{,.ORIGINAL}
Y modificamos los archivos de configuración de PAM:
/etc/pam.d/common-auth
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_ldap.so use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so
/etc/pam.d/common-account
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore] pam_ldap.so
account requisite pam_deny.so
account required pam_permit.so
/etc/pam.d/common-password
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password [success=2 default=ignore] pam_unix.so obscure crypt
password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass
password requisite pam_deny.so
password required pam_permit.so
/etc/pam.d/common-session
La configuración de este archivo difiere de la del servidor PDC. En el servidor podemos crear las cuentas de usuario mediante smbldap-useradd agregando la opción -m de modo que el home de cada usuario se crea junto con el usuario. En los clientes el home de cada usuario no existe, por lo que se utiliza el módulo pam_mkhomedir.so para crear el home del usuario en caso que no exista. Eso es lo que motiva agregar la primer linea del archivo
session required pam_mkhomedir.so
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_unix.so
session optional pam_ldap.so
Probando la configuración
Primero que nada, detengamos el demonio nscd
# /etc/init.d/nscd stop
Ahora ya podemos hacer login en los clientes Linux/Unix con algún usuario del dominio Samba, utilizemos la cuenta de adminnuevo que creamos anteriormente. Y hemos logrado hacer login con un usuario del dominio. Vemos también como el módulo pam_mkhomedir.so definido en /etc/pam.d/common-session ha creado el home del usuario en el equipo local. Esto solo sucede para el primer login
Asignacion de Quotas
Referencias: