sábado, 28 de noviembre de 2009

Centos 5x: Samba + PDC con LDAP como backend

Vamos a configuar a Centos 5.x para que sea nuestro PDC, para ellos vamos a requerir los siguientes paquetes:

samba
samba-common
samba-client
openldap-servers
openldap-clients
smbldap-tools

El nombre del dominio sera:

pimpom.loc
Una vez hecha la instalacion, vamos hacer unos movimientos, asi me gusta hacerlo a mi, LDAP almacena su BD en:

/var/lib/ldap

Ahi dentro voy a crear un folder con el mismo nombre de mi DOMINIO->PIMPOM pero en minuscula:

mkdir /var/lib/ldap/pimpom

Lo que sigue es copear el archivo de nombre DB_CONFIG.example en el folder creado, este archivo lo localizan donde se instala openldap que es:

/etc/openldap/

cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

Observar que necesitamos eliminar la extension del archivo. Ahora necesitamos
cambiar los permisos del folder donde vamos a almacenar la base de datos.

chown -R ldap:ldap /var/lib/ldap/pimpom

LDAP tiene un usuario administrador, aqui le vamos a llamar Manager y ademas debe tener un password, samba por ejemplo necesita saber esta informacion para poder interactuar con LDAP, por ello lo que sigue es crear el password, esta informacion debemos tener a la mano durante todo este tuturial.

Obtenemos nuestro password de una vez:

slappasswd
New password:
Re-enter new password:
{SSHA}afhadskjfhdlaksfhdlskf
Lo que sigue ahora es ya entrar a la configuracion de LDAP, el nombre del archivo que
necesitamos editar es slapd.conf y ya saben donde localizarlo correcto?
slapd.conf
*NOTA: Elimino los comentarios por que usan mucho espacio
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/samba.schema

pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

database bdb
suffix "dc=pimpom,dc=loc"
rootdn "cn=Manager,dc=pimpom,dc=loc"
rootpw {SSHA}DSJDASKLJDASKLJDASLKJDASLJDASL
directory /var/lib/ldap/pimpom
loglevel 256

index objectClass,uidNumber,gidNumber eq
index cn,sn,uid,displayName pres,sub,eq
index memberUid,mail,givenname eq,subinitial
index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq

Al principio pueden ver los schemas de ldap, por defult ldap no tiene el de samba asi que
tenemos que darselo.

cp /usr/share/doc/samba-3.0.33/LDAP/samba.schema /etc/openldap/schema

Ahora como hemos habilitado el log de ldap:
loglevel 256

Necesitamos configurar syslog para que acepte los logs de ldap, para ello abrimos el syslog.conf y agregamos esto a el final del archivo:
local4.* /var/log/ldap.log
Creamos ese archivo
touch /var/log/ldap.log
Reiniciamos syslog
service syslog restart
Shutting down kernel logger:                               [  OK  ]
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
Starting kernel logger:                                    [  OK  ]

Vamos revisando lo que hemos hecho:

slapd.conf listo
syslog.conf listo
Bien ya necesitamos iniciar ldap para ver si no hay problemas:
service ldap start
Checking configuration files for slapd:  config file testing succeeded
                                                  [  OK  ]
Starting slapd:                                            [  OK  ]
Checamos que este escuchando el puerto 389.
netstat --inet -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:ldap                      *:*         tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN
Ahi esta "ldap" escuchando, seguimos.
Ya tenemos a LDAP operando, ahora sigue samba,para ellos vamos a configurar smb.conf asi:
SMB.CONF
#Global parameters
[global]
workgroup = PIMPOM
server string = PDC Domain
netbios name = SMBPDC
hosts allow = 172.16.5. 127.
interfaces = eth0
bind interfaces only = Yes

# passwd backend
encrypt passwords = yes
passdb backend = ldapsam:ldap://172.16.5.7/
enable privileges = yes
pam password change= Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*UNIX*password* %nn *ReType*new*UNIX*password* %nn * passwd:*all*authentication*tokens*updated*successfully*
unix password sync = Yes

# Log options
log level = 1
log file = /var/log/samba/%m.log
max log size = 500
syslog = 1

# Name resolution
name resolve order = wins hosts bcast

# misc
timeserver = No
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
use sendfile = yes
veto files = /*.eml/*.nws/*.{*}/
veto oplock files = /*.doc/*.xls/*.mdb/
deadtime = 120

# Dos-Attribute
map hidden = No
map system = No
map archive = No
map read only = No
store dos attributes = Yes

# printers - configured to use CUPS and automatically load them
load printers = No
printcap name =
printing =
cups options =
show add printer wizard = No

# scripts invoked by samba
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 %m

# LDAP-iConfiguration
#ldap delete dn = Yes
ldap ssl = off
ldap passwd sync = Yes
ldap suffix = dc=pimpom,dc=loc
ldap machine suffix = ou=Computers
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap admin dn = cn=Manager,dc=pimpom,dc=loc
idmap backend = ldap:ldap://172.16.5.7
idmap uid = 10000-20000
idmap gid = 10000-20000

# logon options
logon script =
logon path =
logon path =
logon home =
logon drive =

# setting up as domain controller
username map = /etc/samba/usermap
preferred master = Yes
wins support = Yes
domain logons = Yes
domain master = Yes
local master = Yes
os level = 64
map acl inherit = Yes
unix charset = UTF8
password level = 6

#========== Share Definitions

[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
guest ok = yes
locking = no

[homes]
comment = Home Directories
valid users = %S
read only = No
browseable = No

[Profiles]
comment = Network Profiles Service
path = /home/samba/profiles
read only = No
profile acls = yes
hide files = /desktop.ini/ntuser.ini/NTUSER.*/
profile acls = Yes

[Public]
comment = Public Folder
path = /opt/public
available = Yes
browseable = Yes
public = Yes
read only = No
guest ok = Yes
writeable = yes
create mode = 0775
directory mode = 0775
admin users = root

Bien lo que sigue es crear el contenido del archivo que lleva por nombre: usermap, este lo vamos a colocar en /etc/samba/

touch /etc/samba/usermap

Y vamos a agregar esta informacion:

# Unix_name = SMB_name1 SMB_name2 ...
root = Manager administrator admin
nobody = guest pcguest smbguest

Salvamos y salimos.

Ahora segun la configuracion necesitamos crear unos directorios, estos son:
samba, netlogon y profiles.

mkdir /home/samba
mkdir /home/samba/profiles
mkdir /home/samba/netlogon

Necesitamos darle a samba el password de LDAP, recuerdan aquel que usuaron cuando ejecutaron: slappasswd?

smbpasswd smbpasswd -W
Setting stored password for "cn=Manager,dc=pimpom,dc=loc" in secrets.tdb
New SMB password:
Retype new SMB password:

Ahora necesitamos obtener un dato muy importante, el SID que cada dominio tiene uno "UNICO", para ello necesitamos ejectar el siguiente comando.

net getlocalsid
SID for domain SMBPDC is:"S-1-5-21-1234567890-1234567890-1234567890"

De nuevo no perder este dato que mas adelante lo vamos a necesitar.

Vamos de nuevo verificando:

ldap corriendo.
smb.conf editado.
samba,profiles,netlogon creados.
usermap creado.
smbpasswd ejecutado.

Bien parece que vamos bien. Lo que sigue es ver si smb.conf no tiene inconsitencias, para ello ejecutamos el comando testparm, si tiene el se los va a indicar, de lo contrario les va a desplegar toda la configuracion de smb.conf, si no arreglen sus detalles, lo mas comun es algo mal escrito.

Aun no vamos a ejecutar a samba, ya que prefiero terminar todo el proceso completo. Existe una utileria completa para administrar todo de ldap, esta es llamada smbldap-tools, vamos a seguir con esta aplicacion.

Existen 2 archivos en /etc/smbldap-tools/ los cuales necesitamos editar.

Vamos empezando con el mas sencillo.

smbldap.conf
*NOTA: El primer parametro es nuestro SID, si lo recuerdan?

SID="S-1-5-21-1234567890-1234567890-1234567890"

sambaDomain="PIMPOM"

##############################################################################
#
# LDAP Configuration
#
##############################################################################
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"# Master LDAP port
masterPort="389"
ldapTLS="0"
ldapSSL="0"
verify="require"
cafile="/etc/smbldap-tools/ca.pem"
clientcert="/etc/smbldap-tools/smbldap-tools.iallanis.info.pem"
clientkey="/etc/smbldap-tools/smbldap-tools.iallanis.info.key"
suffix="dc=pimpom,dc=loc"
usersdn="ou=Users,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"#
hash_encrypt="SSHA"
crypt_salt_format="%s"
userLoginShell="/sbin/nologin"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="999"
userSmbHome="\SMBDC\%U"
userProfile="\\SMBPDC\profiles\%U"
userHomeDrive="W:"

Ahora el siguiente archivo:

smbldap_bind.conf

slaveDN="cn=Manager,dc=pimpom,dc=loc"
slavePw="mi-password"
masterDN="cn=Manager,dc=pimpom,dc=loc"
masterPw="mi-password"

Recuerden el inicio, que cuando estabamos configurando ldap usamos un password, es el que nos pide smbldap_bind.conf.

Sigue la parte mas importante, vamos a crear nuestro dominio, la siguiente instruccion lo que haces es dar de alta todos los grupos del dominio para emular un dominio nt4 en samba.

Aqui de nuevo nos va a pedir el password del administrador de ldap.

E
smbldap-populate

Populating LDAP directory for domain PIMPOM
(S-1-5-21-1234567890-1234567890-1234567890)
(using builtin directory structure)

adding new entry: dc=pimpom,dc=local
adding new entry: ou=Users,dc=pimpom,dc=local
adding new entry: ou=Groups,dc=pimpom,dc=local
adding new entry: ou=Computers,dc=pimpom,dc=local
adding new entry: ou=Idmap,dc=pimpom,dc=local
adding new entry: uid=root,ou=Users,dc=pimpom,dc=local
adding new entry: uid=nobody,ou=Users,dc=pimpom,dc=local
adding new entry: cn=Domain Admins,ou=Groups,dc=pimpom,dc=local
adding new entry: cn=Domain Users,ou=Groups,dc=pimpom,dc=local
adding new entry: cn=Domain Guests,ou=Groups,dc=pimpom,dc=local
adding new entry: cn=Domain Computers,ou=Groups,dc=pimpom,dc=local
adding new entry: cn=Administrators,ou=Groups,dc=pimpom,dc=local
adding new entry: cn=Account Operators,ou=Groups,dc=pimpom,dc=local
adding new entry: cn=Print Operators,ou=Groups,dc=pimpom,dc=local
adding new entry: cn=Backup Operators,ou=Groups,dc=pimpom,dc=local
adding new entry: cn=Replicators,ou=Groups,dc=pimpom,dc=local
adding new entry: sambaDomainName=PIMPOM,dc=pimpom,dc=local

Ahora para que centos pueda usar los usuarios de LDAP, necesitamos hacer unos cambios, existen 2 archivos de nombre ldap.conf, uno en /etc y otro /etc/openldap/,

Vamos empezando con /etc/ldap.conf:

/etc/ldap.conf
*NOTA: De nuevo omito todos los comentarios.

host 127.0.0.1
base dc=pimpom,dc=loc
ldap_version 3
timelimit 120
bind_timelimit 120
bind_policy soft
idle_timelimit 3600
nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman,
nscd,gdm,apache
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5

El que sigue:

/etc/openldap/ldap.conf
HOST 127.0.0.1
BASE dc=pimpom,dc=loc
URI ldap://127.0.0.1/

Ahora ya con esto es solo cuestion de configurar a centos para que haga uso de LDAP, para ello tenemos una utileria llamada authconfig-tui, vamos a seguir las siguientes imagenes para mayor claridad:

Figura 1: Configurando Centos con LDAP.
Asi deben dejar su configuracion, de esta manera Centos hara uso de los usuarios de LDAP.

O bien si se siente vikingos y desean hacerlo a mano, deben editar el archivo nsswitch.conf que esta en /etc/
Y quedaria asi:
NOTA: Recordar guardar una copia por si algo sale mal o desean retornar su sistema a su estado inicial.

nsswitch.conf

passwd:     files ldap
shadow:     files ldap
group:      files ldap

#hosts:     db files nisplus nis dns
hosts:      files wins dns

# Example - obey only what nisplus tells us...
#services:   nisplus [NOTFOUND=return] files
#networks:   nisplus [NOTFOUND=return] files
#protocols:  nisplus [NOTFOUND=return] files
#rpc:        nisplus [NOTFOUND=return] files
#ethers:     nisplus [NOTFOUND=return] files
#netmasks:   nisplus [NOTFOUND=return] files

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files

netgroup:   files ldap

publickey:  nisplus

automount:  files ldap
aliases:    files nisplus

Salvan y listo.

Una vez hecho esto lo que sigue es arrancar todo y probar.

1; Reiniciar ldap

service ldap restart

2; Arrancar samba

service smb start

Pruebas

1; net groupmap list nos debe mostrar nuestros grupos creados:

net groupmap list
Domain Admins (S-1-5-21-1234567890-1234567890-1234567890-512) -> Domain Admins
Domain Users (S-1-5-21-1234567890-1234567890-1234567890-513) -> Domain Users
Domain Guests (S-1-5-21-1234567890-1234567890-1234567890-514) -> Domain Guests
Domain Computers (S-1-5-21-1234567890-1234567890-1234567890-515) -> Domain Computers
Administrators (S-1-5-32-544) -> Administrators
Account Operators (S-1-5-32-548) -> Account Operators
Print Operators (S-1-5-32-550) -> Print Operators
Backup Operators (S-1-5-32-551) -> Backup Operators
Replicators (S-1-5-32-552) -> Replicators

2; pdbedit -Lv nos debe dar los usuarios basicos:
smbldap-tools]# pdbedit -Lv
---------------
Unix username: root
NT username: root
Account Flags: [U ]
User SID: S-1-5-21-1234567890-1234567890-1234567890-500
Primary Group SID: S-1-5-21-1234567890-1234567890-1234567890-513
Full Name: root
Home Directory: \\SMBPDC\root
HomeDir Drive: W:
Logon Script:
Profile Path: \\SMBPDC\profiles\root
Domain: PIMPOM
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: Mon, 24 May 2010 18:32:27 PDT
Password can change: Mon, 24 May 2010 18:32:27 PDT
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
---------------
Unix username: nobody
NT username: nobody
Account Flags: [NDU ]
User SID: -2998
Primary Group SID: S-1-5-21-1234567890-1234567890-1234567890-513
Full Name: nobody
Home Directory: \\SMBPDC\nobody
HomeDir Drive: W:
Logon Script:
Profile Path: \\SMBPDC\profiles\nobody
Domain: PIMPOM
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: 0
Password can change: 0
Password must change: 0
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

3; Vamos creando un usuario.

smbldap-useradd -a -m pepito
-Ahora le damos el password.
smbldap-passwd pepito
Changing UNIX and samba passwords for pepito
New password:
Retype new password:

Aqui debemos tener un usuario creado y con su directorio en /home, vamos revisando el directorio:

ls /home
pepito samba

Bien ahora vamos viendo que dice pdbedit de ese usuario:
pdbedit -Lv pepito
Unix username: pepito
NT username: pepito
Account Flags: [U ]
User SID: S-1-5-21-1234567890-1234567890-1234567890-3002
Primary Group SID: S-1-5-21-1234567890-1234567890-1234567890 -513
Full Name: pepito
Home Directory: \\SMBPDC\pepito
HomeDir Drive: W:
Logon Script:
Profile Path: \\SMBPDC\profiles\pepito
Domain: PIMPOM
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: Tue, 25 May 2010 12:32:56 PDT
Password can change: Tue, 25 May 2010 12:32:56 PDT
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Ahora que smbldap-tools nos de informes de el:

smbldap-usershow pepito
dn: uid=pepito,ou=Users,dc=mueblex,dc=com
objectClass: top,person,organizationalPerson,inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount
cn: pepito
sn: pepito
givenName: pepito
uid: pepito
uidNumber: 1001
gidNumber: 513
homeDirectory: /home/pepito
loginShell: /sbin/nologin
gecos: System User
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: pepito
sambaSID: S-1-5-21-1234567890-1234567890-1234567890-3002
sambaPrimaryGroupSID: S-1-5-21-1234567890-1234567890-1234567890-513
sambaProfilePath: \\SMBPDC\profiles\pepito
sambaHomePath: \\SMBPDC\pepito
sambaHomeDrive: W:
sambaLMPassword: B6202951EB466F13AAD3B435B51404EE
sambaAcctFlags: [U]
sambaNTPassword: C6243CD48B29A825CCD68E4053321A66
sambaPwdLastSet: 1274815976
sambaPwdMustChange: 1361129576
userPassword: {SSHA}IQwFvKBbbKv+0AnVZse6ycYoNTV0cU92
shadowLastChange: 14754
shadowMax: 999

Pueden ver el dato que dice:

sambaHomeDrive: W:

Este salio de smbldap.conf ahi lo configuramos. Ahora vamos a ver que dice centos de este usuario.

id pepito
uid=1001(pepito) gid=513(Domain Users) groups=513(Domain Users)

Parece que todo esta funcionando correctamente, vamos a revisar a samba

smbclient -L \\SMBPDC -U%
Domain=[PIMPOM] OS=[Unix] Server=[Samba 3.0.33-3.28.el5]

Sharename Type Comment
--------- ---- -------
netlogon Disk Network Logon Service
Profiles Disk Network Profiles Service
Public Disk Public Folder
IPC$ IPC IPC Service (PDC Domain)
Domain=[PIMPOM] OS=[Unix] Server=[Samba 3.0.33-3.28.el5]

Server Comment
--------- -------
JGARCIAVM
SMBPDC PDC Domain
SMB-VMXPKLABAZA

Workgroup Master
--------- -------
PIMPOM SMBPDC

Bien todo parece estar operando como esperabamos.

Domain Admins

Si desean que un usuario sea Administrador del dominio "Domain Admins" ese l grupo ahi debemos agregar nuestro usuario.

Supongamos que nuestro usuario es "sysadm", entonces seria asi:

smbldap-groupmod -m sysadm "Domain Admins"
adding user sysadm to group Domain Admins

Listo, cuando necesitemos hacer algo como administrador entramos como tal.



1 comentario:

Bto dijo...

Al 100%!!!

funciono sin broncas!!
gracias mono!!