miércoles, 22 de julio de 2009

Configuración Samba con validación en Active Directory y quota de disco

Configuración Samba con validación en Active Directory y quota de disco


Este documento describe como crear recursos compartidos con Samba para usuarios de Active Directory, a los cuales se les coloco cuota de disco para el almacenamiento de sus archivos.

Información con la que contamos


Contamos con los siguientes datos:
        - Dominio:                     midominio
- Nombre del Server AD: ad = atos.midominio
- IP del Server AD: 10.10.10.4
- Nombre del Cliente Linux: debian
- Ip del Server Linux: 10.10.100.110

Configurar parámetros de red


Antes de continuar nos aseguramos de que el equipo con Linux cuente con la siguiente configuración:
        - IP del mismo rango que el Server Active Directory
- DNS utilizado por el Server Active Directory
- Debe responder el ping a atos.midominio

Instalación de los paquetes necesarios


Es necesario tener los siguientes paquetes
# aptitude install samba smbclient winbind krb5-user krb5-config

Empieza la instalacion y aparaece la pantalla donde ingreso el dominio, en este caso “midominio”

En la siguiente pantalla elijo la opcion NO

Luego ingreso el nombre del DC, en este caso atos y spyros

Luego ingreso el nombre del DC, en este caso atos

Resolución de nombres-IP


Según recomendación de Microsoft para una instalaciones de Active Directory (AD) es necesario tener definido un DNS donde resolver los nombre a direcciones IP es por ello que debemos modificar el /etc/hosts e incluir las IP de la maquina que es servidor de dominio (atos y spyros) y el servidor que en este caso es (debian) .






127.0.0.1 localhost10.10.10.22 yoda.midominio yoda

10.10.10.6 atos.midominio ad

10.10.10.4 spyros.midominio ad

10.10.100.110 debian.midominio debian

Configuración del cliente de kerberos


Debemos editar /etc/krb5.conf deberia quedar asi.






[libdefaults]default_realm = MIDOMINIO

clockskew = 300

# The following krb5.conf variables are only for MIT Kerberos.

krb4_config = /etc/krb.conf

krb4_realms = /etc/krb.realms

kdc_timesync = 1

ccache_type = 4

forwardable = true

proxiable = true

# The following encryption type specification will be used by MIT Kerberos

# if uncommented. In general, the defaults in the MIT Kerberos code are

# correct and overriding these specifications only serves to disable new

# encryption types as they are added, creating interoperability problems.

#

# Thie only time when you might need to uncomment these lines and change

# the enctypes is if you have local software that will break on ticket

# caches containing ticket encryption types it doesn't know about (such as

# old versions of Sun Java).

# default_tgs_enctypes = des3-hmac-sha1

# default_tkt_enctypes = des3-hmac-sha1

# permitted_enctypes = des3-hmac-sha1

# The following libdefaults parameters are only for Heimdal Kerberos.

v4_instance_resolve = false

v4_name_convert = {

host = {

rcmd = host

ftp = ftp

}

plain = {

something = something-else

}

}

fcc-mit-ticketflags = true

[realms]

MIDOMINIO = {

kdc = 10.10.10.4

kdc = 10.10.10.6

admin_server = 10.10.10.4

default_domain = midominio

}

midominio = {

kdc = 10.10.10.4

kdc = 10.10.10.6

admin_server = 10.10.10.4

default_domain = midominio

}

[domain_realm]

.midominio = midominio

.midominio = MIDOMINIO

[login]

krb4_convert = true

krb4_get_tickets = false

kdc = FILE:/var/log/krb5/krb5kdc.log

admin_server = FILE:/var/log/krb5/kadmind.log

default = SYSLOG:NOTICE:DAEMON

[appdefaults]

pam = {

ticket_lifetime = 1d

renew_lifetime = 1d

forwardable = true

proxiable = false

retain_after_close = false

minimum_uid = 0

try_first_pass = true

Crear tickets Kerberos


Ejecutando este comando se crea ticket kerberos
 #kinit administrador@MIDOMINIO 

IMPORTANTE poner el domino en MAYUCULAS (MIDOMINIO)

ahí nos pide el password del administrador del dominio

Listar los tickets Kerberos cacheados


Ejecutando klist me muestra algo asi

# klist

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: administrador@MIDOMINIO

Valid starting Expires Service principal

05/11/09 16:06:25 05/12/09 02:07:38 krbtgt/MIDOMINIO@MIDOMINIO

renew until 05/12/09 16:06:25

Kerberos 4 ticket cache: /tmp/tkt0

klist: You have no tickets cached

Configurar Samba


Hacemos una copia del archivo /etc/samba/smb.conf , luego borramos el contenido del smb.conf colocamos la configuración que a continuación se muestra y nos debería quedar lo siguiente.

En security ADS le dice que va a ser miembro de un Active Directory, password server quien es reservorio de usuarios y passwd , winbind es el servicio que va a mapear (idmap uid y idmap gid) los usuarios y grupos del dominio a ID de usuarios y grupos para que parezcan locales y que sean validos para el nuestro linux .






[global]security = ADS

netbios name = debian

realm = MIDOMINIO

password server = atos.midominio

workgroup = MIDOMINIO

log level = 1

syslog = 0

idmap uid = 10000-29999

idmap gid = 10000-29999

winbind separator =+

winbind enum users = yes

winbind enum groups = yes

winbind use default domain = yes

template homedir = /home/%D/%U

template shell = /bin/bash

client use spnego = yes

domain master = no

server string = linux como cliente de AD

encrypt passwords = yes

auth methods = winbind

##compartir el home del usuario solo para cuando se encuentre en otro equipo de la red

[homes]

comment = Home Directories

valid users = %S

browseable = No

read only = No

inherit acls = Yes

[profiles]

comment = Network Profiles Service

path = %H

read only = Yes

store dos attributes = Yes

create mask = 0600

directory mask = 0700

##compartir una carpeta para todos los usuarios

[users]

comment = All users

path = /home/carpeta

read only = No

inherit acls = Yes

veto files = /aquota.user/groups/shares/

########### compartir carpeta usuarios MIDOMINIO

########## WIL ##########

[wil]

comment = prueba con usuario del dominio

inherit acls = Yes

path = /home/MIDOMINIO/wil

read only = No

available = Yes

browseable = Yes

valid users = MIDOMINIO+wil //IMPORTANTE: no dejar espacio entre

//el dominio y el user

[Share]

comment = Test Share

read only = no

path = /home/share

valid users = @"MIDOMINIO+Usuarios del dominio"

Reiniciamos samba y verificamos errores:


#testparm

Load smb config files from /etc/samba/smb.conf

Processing section "[homes]"

Processing section "[profiles]"

Processing section "[users]"

Processing section "[wil]"

Loaded services file OK.

'winbind separator = +' might cause problems with group membership.

Server role: ROLE_DOMAIN_MEMBER

Press enter to see a dump of your service definitions

Agregar máquina linux al dominio


Ahora ponemos el linux al dominio con el siguiente comando
#net ads join -S atos.midominio -U administrador

Nos deberá mostrar un mensaje como el siguiente:
        Using short domain name – Anlis2
Joined 'DEBIAN' to realm midominio'

Si nos llega a mostrar un error como el siguiente:







Administrador's password:
[2007/08/25 16:58:33, 0] libsmb/cliconnect.c:cli_session_setup_spnego(785)
Kinit failed: Clock skew too great
Failed to join domain!


El problema puede ser que la hora del equipo con Linux no este configurada correctamente. Kerberos es muy estricto con la hora. Para solucionarlo, corregimos la hora manualmente o ejecutamos el siguiente comando:
 # ntpdate pool.ntp.org

Después de hacer esto ya se debería de poder unir al dominio.

Otro error es este







kerberos_kinit_password TWISTER$@MIDOMINIO failed: Preauthentication failed


para solucionarlo ejecute esto

#net ads join -U administrador -d 10

#net ads join -S atos.midominio -U administrador

Enter administrador's password:

Using short domain name -- MIDOMINIO

Joined 'TWISTER' to realm 'MIDOMINIO'

[2009/06/06 10:40:41, 0] libads/kerberos.c:ads_kinit_password(356)

kerberos_kinit_password TWISTER$@MIDOMINIO failed: Preauthentication failed

Resolver nombres de usuarios y grupos de dominio


Editar "/etc/nsswitch.conf" y modificar las siguientes lineas dejándolas así:
        passwd:         files winbind
group: files winbind
shadow: files winbind
hosts: files dns winbind

Gracias a las lineas anteriores los usuarios y grupos del dominio pueden ser resueltos.

Reiniciamos winbind:


 #/etc/init.d/winbind restart

Verificar la integración del dominio:


- "net rpc testjoin" muestra si esta correctamente integrada al dominio:
        Join to 'MIDOMINIO' is OK

- "net ads info" muestra información del dominio:
        LDAP server: 192.168.1.254
LDAP server name: ad.pruebas.local
Realm: PRUEBAS.LOCAL
Bind Path: dc=PRUEBAS,dc=LOCAL
LDAP port: 389
Server time: dom, 26 ago 2007 14:57:04 MDT
KDC server: 192.168.1.254
Server time offset: 11

- "net rpc info -U Usuario_de_dominio" muestra el dominio al que pertenece,
numero de usuarios, grupos, etc:
        Domain Name: MIDOMINIO
Domain SID: x-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx
Sequence number: xx
Num users: xx
Num domain groups: xx
Num local groups: xx

Verificar que winbind este funcionando:


- "wbinfo -u" lista usuarios del dominio.

- "wbinfo -g" lista grupos del dominio.

- "getent passwd" muestra usuarios locales y del dominio.

- "getent group" muestra grupos locales y del dominio.

* "su usuario-de-dominio" nos convertimos en usuario-de-dominio.

Si todo lo anterior funciona vamos por buen camino.

Configurar la autenticación


Para configurar el acceso a usuarios del dominio a nuestro Linux mediante el entorno gráfico hay que configurar pam. Para ello editamos los siguientes archivos y agregamos/modificamos las siguientes lineas:
 /etc/pam.d/common-account
account sufficient pam_winbind.so
account required pam_unix.so try_first_pass
/etc/pam.d/common-auth
auth sufficient pam_winbind.so
auth required pam_unix.so nullok_secure try_first_pass
/etc/pam.d/common-password
password sufficient pam_winbind.so
password required pam_unix.so nullok obscure min=4 max=8 md5 try_first_pass
/etc/pam.d/common-session
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session sufficient pam_winbind.so
session required pam_unix.so try_first_pass

El modulo "pam_winbind.so" le indica a pam que los usuarios y grupos los obtenga mediante winbind. El modulo "pam_mkhomedir.so" nos crea el directorio home del usuario en caso de no existir.

Creamos el directorio "/home/MIDOMINIO" (Nombre del dominio en MAYÚSCULA) que es donde tendrán sus home los usuarios:
# mkdir /home/MIDOMINIO

Cambiar permisos al file system con usuarios/grupos AD


Cambiar los permisos en file system (archivos o directorios) con usuarios o grupos del dominio.
# chown wil /home/MIDOMINIO/wil

# ls -l

total 12

drwx------ 2 user1 root 4096 2009-05-11 09:26 user1

drwxr-xr-x 2 user2 root 4096 2009-05-09 15:03 user2

drwx------ 3 wil root 4096 2009-05-11 15:45 wil

Además los directorios deberían tener permiso solo para el user así que cuando creamos la carpeta del usuario será:

# chmod 700 /home/MIDOMINIO/wil

Asignación de quota de disco a usuarios /grupos AD


Instalamos los siguientes paquetes

#apt-get install quota quotatool

Debes activar el soporte para cuotas en las particiones mencionadas, agregando en el archivo /etc/fstab los parámetros usrquota y grpquota a las líneas que definen la configuración de las particiones /home:

# vim /etc/fstab






# /etc/fstab: static file system information.#

# <file system> <mount point> <type> <options> <dump> <pass>

proc /proc proc defaults 0 0

#/dev/sda1 / ext3 errors=remount-ro 0 1

/dev/sda1 / home ext3 noatime,usrquota,grpquota 1 2

/dev/sda5 none swap sw 0 0

/dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0

/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0

Debemos remontar las particiones para que surtan efecto los cambios:
# mount /home

Creamos los ficheros aquota.user, aquota.group, quota.user y quota.group,
los cuales se utilizarán almacenar la información y estado de las cuotas en cada partición.
#cd /home

# touch aquota.user aquota.group quota.user quota.group

Activamos las cuotas de disco recién configuradas ejecutando:
 # quotaon /home

Reiniciamos a fin de aplicar cuota de disco a algunos usuarios.

Suponiendo que se quiere asignar una cuota de disco de 6 MB para el usuario wil en /dev/sda1, se utilizaría lo siguiente:

#edquota -u wil -f /

Nos da esta panatalla la cual editamos la columna hard y colocamos la cantidad de 6 Mb
Disk quotas for user wil (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 0 0 6144 0 0 0

Con ctrl. X salvamos el archivo. Luego colocamos Y y enter.

Si queremos tener una restricción estricta colocamos la quota en la columna hard, y si el usuario excede esa quota no lo va a dejar escribir en disco. Ahora si queremos ser mas permisivos colocamos la restricción en la columna soft, en este caso el usuario podrá excederse en la cantidad de Mb pero tendrá un tiempo de gracia para poder excederse que es de 7 dias que viene por default (globalmente) pudiendo cambiar este valor si quisiéramos con los siguientes comandos:

# edquota -u user1 –T // a nivel de usuario

Times to enforce softlimit for user wil (uid 10000):

Time units may be: days, hours, minutes, or seconds

Filesystem block grace inode grace

/dev/sda1 unset unset

#edquota –t // a nivel global

Grace period before enforcing soft limits for users:

Time units may be: days, hours, minutes, or seconds

Filesystem Block grace period Inode grace period

/dev/sda1 7days 7days

Blocks: Bloques. Corresponde a la cantidad de bloques de 1 Kb que está utilizando el usuario.

Soft: Limite de gracia. Limite de bloques de 1 KB que el usuario puede utilizar y que puede rebasar hasta que sea excedido el periodo de gracia (de modo predeterminado son 7 días).

Hard: Limite absoluto. Limite que no puede ser rebasado por el usuario bajo circunstancia alguna.

Inodes: Inodos. Corresponde al número de ficheros que está utilizando el usuario. Un inodo (también conocido como Index Node) es un apuntador hacia sectores específicos de disco duro en los cuales se encuentra la información de un fichero. Contiene además la información acerca de permisos de acceso así como los usuarios y grupos a los cuales pertenece el fichero.

2 comentarios:

  1. [...] de Samba (viejito pero muy muy muy bueno) Implementación de Samba y Active Directory Autentificación en Samba con LDAP Te sirvió ? Compartilo [...]

    ResponderEliminar