Anda di halaman 1dari 60

Servidor de impresin basado en la integracin de las tecnologas OpenLDAP, NFS, Cuotas de

Disco, CUPS y PyKota.


Con un directorio LDAP como base de datos comn para almacenar la informacin relativa a las cuotas
de impresin asociadas a un usuario o grupo de usuarios, y con CUPS y PyKota se implementar el
sistema de impresin con soporte para cuotas, CUPS como servidor de impresin se utilizar para la
administracin de las impresoras y Pykota para la administracin de los usuarios, grupos y cuotas de
impresin. Aunque esta solucin es ms completa y compleja de configurar, no brinda soporte
actualizado, es por ello que requerir estructurar un laboratorio de pruebas. En este caso se plantea la
configuracin de dos servidores en clster, asociado al servidor LDAP, con el fin de ofrecer un servicio
que brinde alta disponibilidad, redundancia y balanceo en las peticiones de impresin de los usuarios
del MPPE.

HP Color LaserJet 5550


ESQUEMA DE DISTRIBUCIN DE LOS CENTROS DE IMPRESIN

El usuario enva el
trabajo a la cola de
impresin de la
impresora

Usuario

3. El servidor ejecuta la
accin establecida por la
regla
Servidor
de
Impresin

2. El servidor examina el
trabajo y lo compara con
las reglas configuradas
en la cola
Pycota

Regla de la cola
de impresin:
Si las pginas
son B/N
mover a la
cola del
Canon
multifuncional

2230

Image Runner

Instalacin de LDAP con Samba NFS Y Cuotas Cups Pykota en Debian Wheezy

1.Instalacin del Servidor LDAP


1.1 Verificar que el nombre del equipo sea igual al registro DNS (PDC.fnc.com.ve).
root@servidorimpresion:~# more /etc/hostname
PDC
root@servidorimpresion:~#
root@servidorimpresion:~# more /etc/hosts
127.0.0.1
localhost
192.168.1.24 PDC.fnc.com.ve
PDC
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
root@servidorimpresion:~#
1.2 En esta seccin instalaremos y configuraremos un servidor OpenLDAP junto con las
herramientas de administracin y cliente. La instalacin inicial la realizaremos con el
asistente de instalacin de APT.
Para ello colocamos:
apt-get install slapd ldap-utils
Cuando se instala el paquete slapd al final nos lanzar un asistente de configuracin del servicio slapd,
ser ver como en la siguiente pantalla:

Una vez finalizado el wizard procedemos a reconfigurar el servicio de slapd:


dpkg-reconfigure slapd
La primer pantalla nos pregunta si queremos omitir la configuracin inicial del servidor slapd,
contestaremos: NO

Despus, nos pregunta el nombre de dominio con el que queremos configurar nuestro rbol de

directorio, este nombre de dominio ser configurado con la base de nuestro directorio (Base DN) o la
base de bsqueda de nuestro directorio (Search Base).
Por ejemplo si ingresamos el nombre de dominio fnc.com.ve entonces en formato Domain Component
(DC por sus siglas en Ingls) nos pondr nuestra base as: dc=fnc,dc=com,dc=ve.

A continuacin nos pregunta el nombre de la organizacin para la que configuraremos el directorio


LDAP. Ingresaremos: Negra Hipolita

Despus de configurar el nombre de dominio y la organizacin nos pide ingresar una contrasea para el
usuario Administrador del directorio LDAP, en este caso el Distinguished Name (DN por sus siglas en
Ingls) de la cuenta ser: cn=admin,dc=fnc,dc=com,dc=ve, usaremos la contrasea: xxxxx

Ahora confirmaremos la contrasea para el Administrador del servidor LDAP, usaremos la misma que
se ingreso arriba: xxxxxx

En este paso seleccionaremos el tipo de base de datos (data store) en el que almacenaremos la
informacin de nuestro directorio, utilizaremos el tipo HDB la cual es la opcin recomendada por
Ubuntu y por el equipo de desarrollo de OpenLDAP, anteriormente se recomendaba el tipo BDB pero
se han encontrado razones por las cuales no se recomienda BDB y esas mismas razones son las que han
convencido de considerar como postura el BDB Data Store para OpenLDAP

En el siguiente paso nos pregunta si deseamos eliminar la base de datos del directorio cuando
purguemos el paquete slapd, contestaremos: No

Importante

No seleccione la opcin Yes, ya que si por error desinstalamos el paquete slapd no perderemos la
base de datos del directorio /var/lib/ldap y podremos recuperar nuestra instalacin usando dichos
archivos.
Si por alguna razn ya exista una base de datos de una instalacin anterior el asistente nos pregunta si
deseamos mover la base de datos vieja a un directorio de respaldo (/var/backups/), elegimos la opcin
S

Y por ltimo nos pregunta si deseamos permitir conexiones al servidor LDAP usando la versin
obsoleta del protocolo LDAP 2, por defecto esta desactivado, se recomienda no activarlo ya que todas
las aplicaciones que usaremos usan la versin 3 del protocolo LDAP, as que contestaremos: No

Cuando el asistente termina de configurar los parmetros especificados veremos en la salida de la


consola un mensaje como el siguiente:

La salida anterior nos dice que detuvo el servicio slapd, hizo un respaldo de la base de datos anterior en
el directorio /var/backups, regener un archivo de configuracin en base a nuestras respuestas,
inicializa un directorio bsico e inicia el servidor slapd con la nueva configuracin y el nuevo
directorio.
Verificaremos que se creo un grupo de nombre openldap:
root@pdc:~# grep ldap /etc/group
openldap:x:108:
Como vemos, nos creo el grupo openldap y tiene el GID: 108
Ahora confirmaremos que el usuario openldap fue creado:
root@pdc:~# grep ldap /etc/passwd
openldap:x:105:108:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false
Como vemos nos creo el usaurio openldap, con el ID de Usuario (UID): 105, su grupo primario es el
grupo de ID 108 (openldap), su directorio $HOME es /var/lib/ldap, y esta cuenta no tiene un shell
vlido: /bin/false
Tambin verificaremos que los permisos del directorio /var/lib/ldap sean los correctos y nos
aseguraremos que el usuario openldap tenga permiso de lectura, escritura y acceso al directorio:
ls -ld /var/lib/ldap
drwxr-xr-x 2 openldap openldap 4096 may 6 10:53 /var/lib/ldap/
Verificaremos que el demonio slapd sea ejecutado con el usuario y grupo openldap, esto esta definido
en el archivo /etc/default/slapd, y por defecto est as:
vi /etc/default/slapd
Este es el contenido del archivo:

# System account to run the slapd server under. If empty the server
# will run as root.
SLAPD_USER="openldap"
# System group to run the slapd server under. If empty the server will
# run in the primary group of its user.
SLAPD_GROUP="openldap"
1.3 Agregando el esquema de samba al directorio LDAP
Los esquemas (schemas) definen el tipo de objectos (objectClass) que podemos manejar en nuestro
rbol de directorio, adems definen el tipo de atributos que podemos usar as como las reglas de
sintaxis para cada uno de estos atributos.
Los esquemas que vienen por defecto en la configuracin de slapd son los necesarios para poder
almacenar informacin de cuentas Unix/POSIX, almacenar informacin para crear un tipo de
Directorio Amarillo, o una agenda de contactos. Estos esquemas predeterminados no nos permiten
almacenar atributos para cuentas de usuario y dominios Samba/Windows
Por ello procedemos a agregar el esquema de samba de la siguiente manera:
apt-get install samba-doc
El archivo del esquema de samba se encuentra en el archivo /usr/share/doc/sambadoc/examples/LDAP/samba.schema.gz en formato comprimido, lo descomprimiremos y lo copiaremos
al directorio /etc/ldap/schema/:
cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/
gzip -d /etc/ldap/schema/samba.schema.gz
El esquema de samba debe ser aadido al cn=config del directorio LDAP.
Primero debemos crear un archivo de configuracin llamado schema_convert.conf o similar, dentro
del directorio /etc/ldap/schema; el mismo debe contener las siguientes lineas.
include
include
include
include
include
include
include
include
include
include
include
include
include

/etc/ldap/schema/core.schema
/etc/ldap/schema/collective.schema
/etc/ldap/schema/corba.schema
/etc/ldap/schema/cosine.schema
/etc/ldap/schema/duaconf.schema
/etc/ldap/schema/dyngroup.schema
/etc/ldap/schema/inetorgperson.schema
/etc/ldap/schema/java.schema
/etc/ldap/schema/misc.schema
/etc/ldap/schema/nis.schema
/etc/ldap/schema/openldap.schema
/etc/ldap/schema/ppolicy.schema
/etc/ldap/schema/samba.schema

luego creamos un directorio temporal para almacenar el resultado:


mkdir /tmp/ldif_output
Ahora, convertimos el archivo samba.schema a samba.ldif, con la siguiente sintaxis:
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={12}samba,cn=schema,cn=config"
> /tmp/cn=samba.ldif
Edite el archivo generado /tmp/cn\=samba.ldif, cambiando los siguientes atributos.
Como se muestra a continuacin:
dn: cn=samba,cn=schema,cn=config
...
cn: samba
y remueva las siguientes lineas al final del archivo:
structuralObjectClass: olcSchemaConfig
entryUUID: b53b75ca-083f-102d-9fff-2f64fd123c95
creatorsName: cn=config
createTimestamp: 20080827045234Z
entryCSN: 20080827045234.341425Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20080827045234Z
Guardamos el archivo y salimos.
Luego entramos a la ruta:
cd /etc/ldap/slapd.d/cn=config
Editamos el archivo olcDatabase\=\{1\}hdb.ldif para buscar la siguiente linea y copiarla para luego
pegarla en el archivo olcDatabase={0}config.ldif :
olcRootPW:: e1NTSEF9UUI2UnRzVmM1UnZNaklwdnBVaThuSmNKRmxWY2NLa1A=
Esta linea es la clave cifrada del usuario administrador del rbol LDAP. La cual debe ser copiada en el
archivo olcDatabase={0}config.ldif, despus de la linea olcRootDN: cn=admin,cn=config
Para esto editamos el archivo:
vi olcDatabase={0}config.ldif ; y colocamos la linea, quedando de la siguiente manera:
dn: olcDatabase={0}config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external

,cn=auth manage by * break


olcRootDN: cn=admin,cn=config
olcRootPW:: e1NTSEF9UUI2UnRzVmM1UnZNaklwdnBVaThuSmNKRmxWY2NLa1A=
structuralObjectClass: olcDatabaseConfig
entryUUID: 9c805ba4-4aac-1032-93ab-bd7153ff1a60
creatorsName: cn=config
createTimestamp: 20130506152313Z
entryCSN: 20130506152313.102086Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20130506152313Z
Guardamos y salimos.
Reiniciamos el servicio slapd:
/etc/init.d/slapd restart
Stopping OpenLDAP: slapd.
Starting OpenLDAP: slapd.
Finalmente aadimos el nuevo esquema utilizando la herramienta ldapadd.
ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=samba.ldif
Enter LDAP Password:
adding new entry "cn=samba,cn=schema,cn=config"
Debe colocar la clave del administrador del rbol ldap que configuramos en los pasos anteriores.
Esto
debe
generar
un
archivo
llamado
cn={x}samba.ldif
en
directorio /etc/ldap/slapd.d/cn=config/cn=schema, donde x representa el siguiente nmero
verificamos esto con el comando:
ls /etc/ldap/slapd.d/cn\=config/cn\=schema/
Luego creamos los ndices para agilizar la bsqueda, para ello creamos un archivo llamado
samba_indexes.ldif en la ruta /etc/ldap/schema
vi /etc/ldap/schema/samba_indexes.ldif
este archivo debe contener la siguiente informacin:
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq

el

olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:
olcDbIndex:

uid eq,pres,sub
cn eq,pres,sub
sn eq,pres,sub
displayName eq,pres,sub
memberUid eq,pres,sub
mail eq,pres,sub
givenname eq,pres,sub
uniqueMember eq,pres
sambaSID eq
sambaPrimaryGroupSID eq
sambaGroupType eq
sambaSIDList eq
sambaDomainName eq
default sub

Guardamos y salimos.
Cambese a directorio /etc/ldap/schema
cd /etc/ldap/schema
Luego utilizamos la herramienta ldapmodify para agregar los ndices al rbol.
ldapmodify -x -D cn=admin,cn=config -W -f samba_indexes.ldif
nos solicita la clave del administrador, la colocamos y obtendremos una salida como esta:
Enter LDAP Password:
modifying entry "olcDatabase={1}hdb,cn=config"
si todo sali bien, podremos ver los ndices usando la herramienta ldapsearch :
ldapsearch -xLLL -D cn=admin,cn=config -x -b cn=config -W olcDatabase={1}hdb
nos solicita la clave y obtenemos una salida como esta:
Enter LDAP Password:
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=fnc,dc=com,dc=ve
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by
dn="cn=admin,dc=fnc,dc=com,dc=ve" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=fnc,dc=com,dc=ve" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=fnc,dc=com,dc=ve

olcRootPW: {SSHA}QB6RtsVc5RvMjIpvpUi8nJcJFlVccKkP
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
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
olcDbIndex: cn eq,pres,sub
olcDbIndex: sn eq,pres,sub
olcDbIndex: displayName eq,pres,sub
olcDbIndex: mail eq,pres,sub
olcDbIndex: givenname eq,pres,sub
1.4

Configuramos las listas de control de acceso

Para ello modificamos el archivo olcDatabase\=\{1\}hdb.ldif que se encuentra en la ruta


/etc/ldap/slapd.d/cn=config
en la seccin:
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou s auth by
dn="cn=admin,dc=fnc,dc=com,dc=ve" write by * none
agregamos,
olcAccess: {0}to attrs=userPassword,shadowLastChange,sambaLMPassword,sambaNTPassword by
self write by anonymous auth by dn="cn=admin,dc=fnc,dc=com,dc=ve" write by * none
Guardamos, salimos del archivo y reiniciamos el servicio slapd
/etc/init.d/slapd restart
Stopping OpenLDAP: slapd.
Starting OpenLDAP: slapd.

Finalmente comprobamos que nuestra configuracin este correcta, para ello corremos el siguiente
comando:
root@pdc:~# slaptest -v -u
Si el resultado es algo como esto:
5345aa25 ldif_read_file: checksum error on "/etc/ldap/slapd.d/cn=config/olcDatabase={0}config.ldif"
5345aa25 ldif_read_file: checksum error on "/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif"
config file testing succeeded
Entonces debemos editar los archivos /etc/ldap/slapd.d/cn=config/olcDatabase={0}config.ldif y
/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif y eliminar las dos primeras lineas, se muestran
a continuacin:
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 52ad4f52
Guardamos los archivos y volvemos a ejecutar el comando:
slaptest -v -u
config file testing succeeded
Con la opcin -v habilitamos el modo verbose, esto es para que muestre detalles sobre posibles errores
encontrados en la configuracin.
La opcin -u permite que solo se ejecuta la revisin sintctica aun cuando no se puedan abrir los
archivos de bases de datos del directorio (/var/lib/ldap/).
Si el comando slaptest nos muestra algn error, posiblemente nos dir en que parte del archivo se
encuentra el error.
Ahora haremos una consulta al servidor LDAP para ver si responde con lo ms bsico. Usaremos el
comando ldapsearch para buscar el namingContexts del rbol.
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
Obteniendo el siguiente resultado:
# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#
#
dn:
namingContexts: dc=fnc,dc=com,dc=ve

# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

Si el comando ldapsearch nos muestra algo similar a lo que se muestra arriba significa que nuestro
servidor LDAP esta funcionando correctamente.
Ahora haremos una bsqueda en el directorio LDAP autenticado como el usuario admin del LDAP y
haremos la bsqueda usando como base dc=fnc,dc=com,dc=ve, esto es para comprobar que la
autenticacin y nuestras ACLs funcionen correctamente, adems, de comprobar que el directorio se
haya inicializado con la estructura bsica.
ldapsearch -x -D "cn=admin,dc=fnc,dc=com,dc=ve" -b "dc=fnc,dc=com,dc=ve" -W
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=fnc,dc=com,dc=ve> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# fnc.com.ve
dn: dc=fnc,dc=com,dc=ve
objectClass: top
objectClass: dcObject
objectClass: organization
o: Fabrica Nacional de Cemento
dc: fnc
# admin, fnc.com.ve
dn: cn=admin,dc=fnc,dc=com,dc=ve
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9UUI2UnRzVmM1UnZNaklwdnBVaThuSmNKRmxWY2NLa1A=
# search result
search: 2
result: 0 Success
# numResponses: 3

# numEntries: 2

2.- Instalacin y configuracin del servidor Samba


En esta seccin configuraremos el servidor Samba como un Controlador de Dominio Primario (PDC)
Windows NT con la base de datos SAM almacenada en nuestro directorio LDAP.
Los parmetros generales que configuraremos son:
Parmetros de identificacin de red como: Dominio, Nombre Servidor.
Configuracin para registro de eventos (logs)
Interfaces y direcciones de red a las que est conectado el servidor
Configuracin de parametros para Controlador de Dominio
Informacin del servidor LDAP y como utilizarlo
Definicin de script para automatizar la administracin de las cuentas samba/ldap.
Directorios compartidos especiales como homes, netlogon y profiles.
La configuracin la realizaremos paso por paso, tratando de explicar cada cambio.
2.1 En esta seccin instalaremos el servidor samba que en Debian/Ubuntu esta conformado
principalmente por los paquetes: samba y smbclient, el primero contiene los programas para servidor
y el segundo las herramientas de cliente, diagnstico y resolucin de problemas.
Instalamos los paquetes para cliente y servidor Samba:
root@pdc:~# apt-get install samba smbclient
Cuando instalemos nos preguntar el nombre del dominio o grupo de trabajo, podemos dejar el
predeterminado ya que esta configuracin la cambiaremos ms adelante.
El paquete que instala la parte servidor de samba preconfigurado con algunos parmetros, adems de
que importa los usuarios de sistema en /etc/passwd a la base de datos de cuentas samba, en nuestro caso
esta configuracin no nos sirve por lo que eliminaremos la configuracin creada y los archivos de
configuracin que se crearon, para inicializar la configuracin de samba detenemos los servicios
samba. Siga los siguientes pasos:
root@pdc:~# /etc/init.d/samba stop
Stopping Samba daemons: nmbd smbd
Ahora eliminamos los archivos .tdb y .dat en /var/lib/samba:

root@pdc:~# rm -rfv /var/lib/samba/*.{tdb,dat}


Todava no iniciaremos el servidor samba hasta que este nuevamente configurado.
El archivo de configuracin principal de Samba es /etc/samba/smb.conf, ya que iniciaremos con una
configuracin nueva, haremos un respaldo de este archivo antes de iniciar con las modificaciones.
Creamos el respaldo del archivo /etc/samba/smb.conf:
root@pdc:~# mv /etc/samba/smb.conf{,.orig}
El archivo de configuracin de samba define la seccin [global], en esta seccin especificaremos
parmetros globales que afectarn el comportamiento del servidor Samba, los parmetros principales
son:
El nombre del Grupo de Trabajo/Dominio al que pertenecemos: FNC (por ejemplo)
Nombre NetBIOS del Servidor Samba: PDC
Descripcin del servidor Samba: Servidor PDC
Adems configuraremos los siguientes parmetros extras:
Soporte para habilitar privilegios de Grupos de Dominio Samba: enable privileges = yes, este
parmetro es til por ejemplo para dar privilegios a los usuarios miembros del grupo Domain Admins
para unir equipos Windows a un Dominio NT.
Crearemos un archivo /etc/samba/smb.conf nuevo con los siguientes parmetros:
El archivo debe quedar as:
[global]
workgroup = FNC
netbios name = PDC
server string = Servidor PDC
map to guest = Bad User
username map = /etc/samba/smbusers
Leyenda:
El parametro map to guest = Bad User define que cuando un usuario no existente (en el dominio) se
conecte al servidor, el servidor smbd mapear esa conexin al usuario annimo, pero las conexiones de
usuarios que se autentiquen con una contrasea invlida sern rechazadas.

La ltima opcin que especificamos es username map apuntando al archivo /etc/samba/smbusers, este
archivo sirve para mapear nombres de usuarios (alias), por ejemplo en este archivo podemos crear un
mapeo de usuario para que la cuenta root sea mapeada a Administrator que es comnmente usada en
entornos de red Windows para la cuenta de administrador. Para hacer esto, creamos el archivo
/etc/samba/smbusers con el siguiente contenido:
root = Administrator
No cerraremos el archivo smb.conf ya que agregaremos ms informacin en la seccin [global] en
las siguientes secciones
Ahora configuraremos algunos parmetros para la generacin de mensajes de logs, en la seccin
[global] agregue las siguientes lneas:
syslog = 0
log level = 0
max log size = 50
log file = /var/log/samba/%m.log
La configuracin anterior especifica que no se envan los logs al demonio syslog local, el nivel de
severidad de logs es 0 (ms bajo), se define un tamao de logs de 50M y los logs de las conexiones de
los equipos o usuarios clientes se guardan en el directorio /var/log/samba con el formato
MAQUINA.log.
No cerraremos el archivo ya que agregaremos ms informacin en la seccin [global] en las
siguientes secciones
En esta seccin configuraremos los parmetros de red y algunas configuraciones de seguridad
recomendadas.
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = eth0 lo
hosts allow = 127.0.0.1, 10.12.0.0/16
hosts deny = 0.0.0.0
smb ports = 139 445
bind interfaces only = Yes
name resolve order = wins hosts lmhosts bcast
remote announce = 10.12.0.255 \ 10.12.1.255
Si la implementacin del controlador se realizar en una red con diferentes subredes, entonces
debemos colocar cada una de las direcciones IP de broadcast de cada una de las subredes en la
variable remote announce
No cerraremos el archivo ya que agregaremos ms informacin en la seccin [global] en las
siguientes secciones

Ahora configuraremos los parmetros relacionados con la configuracin de un servidor Controlador de


Dominio.
time server = Yes
wins support = Yes
os level = 33
domain logons = Yes
preferred master = Yes
logon path =
logon home =
logon drive =
logon script =
case sensitive = No
utmp = Yes
No cerraremos el archivo ya que agregaremos ms informacin en la seccin [global] en las
siguientes secciones
Ahora definiremos los parmetros necesarios para que samba utilice el directorio LDAP.
passdb backend = ldapsam:ldap://127.0.0.1/
ldap admin dn = cn=admin,dc=fnc,dc=com,dc=ve
ldap suffix = dc=fnc,dc=com,dc=ve
ldap group suffix = ou=Groups
ldap user suffix = ou=Users
ldap machine suffix = ou=Computers
ldap idmap suffix = ou=Idmap
winbind trusted domains only = Yes
ldap ssl = off
ldap passwd sync = Yes
add machine script = /usr/sbin/smbldap-useradd -w "%u"
add user script = /usr/sbin/smbldap-useradd -m "%u"
ldap delete dn = No
#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"
No cerraremos el archivo ya que agregaremos ms informacin en la seccin [global] en las
siguientes secciones

Ahora configuraremos los parmetros para especificar el juego de caracteres predeterminado para
archivos dos y unix.
dos charset = 850
Unix charset = ISO8859-1
Hasta aqu termina la seccin Global de smb.conf, en las siguientes secciones configuraremos
secciones especiales para nuestro Controlador de Dominio.
El recurso compartido [homes] es un recurso compartido especial que es usado para compartir el
directorio $HOME de cada usuario, por ejemplo, tenemos un usuario unix/windows de nombre
jmedina, este usuario tiene un directorio $HOME en la ruta /home/jmedina, con este recurso
compartido, cada vez que el usuario jmedina inicia sesin por Samba, tendr disponible un recurso
compartido en el servidor con el nombre "jmedina" y por medio de l podr entrar a sus archivos
privados en el servidor.
[homes]
comment = Home Directories
valid users = %U
read only = No
create mask = 0664
directory mask = 0775
browseable = No
La linea valid users = %U indica que este recurso compartido solo esta disponible para los usuarios
Samba autenticados.
En este recurso compartido no se especifica un path ya que podr variar dependiendo del usuario que
haga login.
Este es otro recurso compartido especial, el recurso [netlogon] solo es utilizado cuando Samba acta
como un Controlador de Dominio, el propsito de este recurso compartido es almacenar los scripts de
inico (logon scripts), estos scripts son ejecutados cada vez que un usuario inicia sesin en el dominio.
[netlogon]
path = /home/samba/netlogon/
browseable = No
read only = yes
La opcin browseable = No especifica que este recurso compartido no ser visible en la lista de shares
disponibles en el servidor, ms sin embargo, si podr ser accedido para los usuarios que hacen login en
el dominio, el acceso ser de solo lectura.
Ahora creamos el directorio base en el cual almacenaremos los logon scripts:
root@pdc:~# mkdir -p --mode 755 /home/samba/netlogon

Ahora crearemos un logon script bastante simple que har las siguientes operaciones
Sincronizar el reloj del servidor con el del equipo local
Mapear el recurso de red \\PDC\homes a la unidad H:
Creamos el archivo /home/samba/netlogon/logon.bat:
root@pdc:~# vi /home/samba/netlogon/logon.bat
Y agregue el siguiente contenido:
net time \\PDC /set /yes
net use h: \\PDC\homes
Ahora convertimos el archivo a formato DOS con CR/LF
root@pdc:~# sed -i 's/$/\r/' /home/samba/netlogon/logon.bat
El recurso compartido [profiles] tambin es de uso especial y solo es necesario cuando Samba se
configura como Controlador de Dominio, el propsito de este recurso compartido es almacenar los
Perfiles de Usuarios, en especfico es usado cuando se configura que los usuarios de dominio utilicen
los Perfiles Mviles (Roaming Profiles). Para ello editamos el archivo /etc/samba/smb.conf y
agregamos:
[profiles]
path = /home/samba/profiles
read only = No
create mask = 0600
directory mask = 0700
browseable = No
guest ok = Yes
profile acls = Yes
csc policy = disable
force user = %U
valid users = %U @"Domain Admins"
La ruta de este recurso compartido ser usado con el atributo ProfilePath para indicar la ruta en donde
esta almacenado el Perfil del Usuario, por ejemplo, la entrada en la SAM del dominio para el usuario
jmedina especfica: ProfilePath=\\PDC\profiles\jmedina, lo cual indica que el perfil del usuario jmedina
estar en el directorio local /home/samba/profiles/jmedina.
Creamos el directorio para el recurso compartido profiles:
root@pdc:~# mkdir -p --mode 1777 /home/samba/profiles

Ahora si puede guardar el archivo y continuar con las configuraciones.


Despus de haber editado el archivo de configuracin smb.conf ejecutaremos el comando testparm para
realizar un revisin sintctica del archivo smb.conf, este comando nos dir si hay algn error de
configuracin, o si algn parmetro esta mal escrito.
Para correr la revisin ejecutamos:
root@pdc:~# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[netlogon]"
Processing section "[profiles]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC
Press enter to see a dump of your service definitions
Si le aparece el mensaje "ERROR: the 'unix password sync' parameter is set and the 'passwd program'
(/usr/sbin/smbldap-passwd) cannot be executed (error was No such file or directory)." ignorelo, en la
siguiente seccin instalaremos el paquete smbldap-tools.
Si hubiera algn error en la sintaxis el comando testparm nos lo reportar y nos dir en que linea se
encuentra el error y alguna descripcin corta sobre el error.
Nota
Todava no es momento de iniciar el servidor samba.
2.2 Para que Samba pueda agregar/modificar cuentas almacenadas en el directorio LDAP es necesario
que sepa la contrasea del usuario ldap admin dn especificada en el archivo smb.conf. La cuenta del
ldap admin dn debe de tener los suficientes permisos para leer, agregar y modificar entradas en el
directorio LDAP.
Para especificar la contrasea del admin dn, usamos el comando:
smbpasswd -W
Setting stored password for "cn=admin,dc=fnc,dc=com,dc=ve" in secrets.tdb
New SMB password:
Retype new SMB password:
La contrasea ser almacenada en el archivo /var/lib/samba/secrets.tdb. Se almacena aqu para no tener
que especificarla cada vez que se vaya a ejecutar alguna operacin relacionada a cuentas Samba en el
directorio LDAP.

El archivo secrets.tdb debe de tener los permisos as:


root@pdc:~# ls -l /var/lib/samba/secrets.tdb
-rw------- 1 root root 8192 2008-06-18 23:29 /var/lib/samba/secrets.tdb
Ahora si podemos iniciar el servidor samba
root@servidorimpresion:/etc/samba# /etc/init.d/samba start
Starting Samba daemons: nmbd smbd.
root@servidorimpresion:/etc/samba#
2.3 Ahora configuraremos las herramientas smbldap-tools para predefinir los parmetros de
configuracin para la administracin de cuentas Unix y Samba.
Primero instalaremos el paquete smbldap-tools as:
root@pdc:~# apt-get install smbldap-tools
Los archivos de configuracin de las herramientas smbldap-tools se encuentran en el directorio
/etc/smbldap-tools, en este directorio deben de existir dos archivos de configuracin, el archivo
smbldap.conf contiene directivas de configuracin tanto para la creacin y modificacin de cuentas
Unix y Samba y el archivo smbldap_bind.conf contiene el usuario y la contrasea del usuario con el
que nos conectaremos al servidor LDAP para efectuar las operaciones de administracin de usuarios y
grupos Unix/Samba.
Ya que el archivo /etc/smbldap-tools/smbldap.conf no existe, usaremos un archivo de ejemplo que se
instala junto con el paquete smbldap-tools, lo copiamos as:
root@pdc:~# zcat
tools/smbldap.conf

/usr/share/doc/smbldap-tools/examples/smbldap.conf.gz

>

/etc/smbldap-

El archivo smbldap_bind.conf tampoco existe por lo que utilizaremos el archivo de ejemplo:


root@pdc:~# cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/
Antes de empezar a configurar estas herramientas cambiaremos los permisos de acceso para estos
archivos,
Entramos al directorio /etc/smbldap-tools:
root@pdc:~# cd /etc/smbldap-tools
Cambiamos el usuario y grupo propietarios para los archivos, el usuario dueo debe de ser root y el
grupo dueo debe de ser openldap.
root@pdc:~# chown root:openldap smbldap*
Nadie ms a excepcin del usuario root tendr permiso de lectura y escritura sobre los archivos, el
grupo openldap solo tendr permisos de lectura.

root@pdc:~# chmod 640 smbldap*


Editaremos el archivo de configuracin smbldap_bind.conf para especificar el usuario con el que
haremos las operaciones de administracin de usuarios y grupos en el servidor LDAP.
root@pdc:~# vi smbldap_bind.conf
Cambiar:
slaveDN="cn=Manager,dc=company,dc=com"
slavePw="secret"
masterDN="cn=Manager,dc=company,dc=com"
masterPw="secret"
Por:
slaveDN="cn=admin,dc=fnc,dc=com,dc=ve"
slavePw="clave_usuario_admin_ldap"
masterDN="cn=admin,dc=fnc,dc=com,dc=ve"
masterPw="clave usuario admin ldap"
Aunque aun no tengamos configurado un servidor LDAP esclavo usaremos el mismo cn=admin que en
nuestro servidor Maestro.
En el archivo smbldap.conf se debe especificar el SID del dominio Samba con el que estaremos
trabajando, para obtener el SID de nuestro servidor utilizaremos el comando net.
Obteniendo el SID local:
root@pdc:~# net getlocalsid
SID for domain PDC is: S-1-5-21-3702025042-3527879707-4288773517
El SID resultante lo copiaremos, en este caso el SID es: S-1-5-21-2911508632-24052929234115677068
Como mnimo debemos configurar los parmetros que estn marcados en negritas.
Ahora editamos el
tools/smbldap.conf:

archivo

principal

de

configuracin

de

smbldap-tools

/etc/smbldap-

root@pdc:~# vi /etc/smbldap-tools/smbldap.conf
TODO: Dividir los parmetros globales para el dominio Samba y los parmetros para especificar en
que servidor LDAP almacenaremos la informacin de cuentas Unix/Samba.
Primero editaremos los parmetros referentes al dominio Samba:
# Put your own SID. To obtain this number do: "net getlocalsid".

# If not defined, parameter is taking from "net getlocalsid" return


SID="S-1-5-21-3702025042-3527879707-4288773517"

# Domain name the Samba server is in charged.


# If not defined, parameter is taking from smb.conf configuration file
# Ex: sambaDomain="IDEALX-NT"
sambaDomain="FNC"

# Slave LDAP server


# Ex: slaveLDAP=127.0.0.1
# If not defined, parameter is set to "127.0.0.1"
slaveLDAP="127.0.0.1"

# Slave LDAP port


# If not defined, parameter is set to "389"
slavePort="389"

# Master LDAP server: needed for write operations


# Ex: masterLDAP=127.0.0.1
# If not defined, parameter is set to "127.0.0.1"
masterLDAP="127.0.0.1"

# Master LDAP port


# If not defined, parameter is set to "389"
masterPort="389"

Configuraciones de TLS/SSL:
Ya que en esta instalacin inicial no usaremos comunicaciones seguras por SSL/TLS desactivaremos el
uso de TLS en nuestra configuracin.
# Use TLS for LDAP
# If set to 1, this option will use start_tls for connection
# (you should also used the port 389)
# If not defined, parameter is set to "1"

ldapTLS="0"

Ahora especificaremos el Base DN de nuestro directorio LDAP, esta configuracin servir como
variable para otras configuraciones, todos los contenedores para almacenar cuentas y grupos estarn
bajo este Base DN.
# LDAP Suffix
# Ex: suffix=dc=IDEALX,dc=ORG
suffix="dc=fnc,dc=com,dc=ve"

# Where to store next uidNumber and gidNumber available for new users and groups
# If not defined, entries are stored in sambaDomainName object.
# Ex: sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
# Ex: sambaUnixIdPooldn="cn=NextFreeUnixId,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"

# Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)


hash_encrypt="SSHA"
# if hash_encrypt is set to CRYPT, you may set a salt format.
# default is "%s", but many systems will generate MD5 hashed
# passwords if you use "$1$%.8s". This parameter is optional!
crypt_salt_format="%s"

# Domain appended to the users "mail"-attribute


# when smbldap-useradd -M is used
# Ex: mailDomain="idealx.com"
Configure algunos parmetros predeterminados para cuentas de usuario y grupos Unix:
# Login defs
# Default Login Shell
# Ex: userLoginShell="/bin/bash"
userLoginShell="/bin/bash"

# Home directory
# Ex: userHome="/home/%U"
userHome="/home/%U"

# Default mode used for user homeDirectory


userHomeDirectoryMode="700"

# Gecos
userGecos="Usuario del Dominio"

# Default User (POSIX and Samba) GID


defaultUserGid="513"

# Default Computer (Samba) GID


defaultComputerGid="515"

# Skel dir
skeletonDir="/etc/skel"

# Default password validation time (time in days) Comment the next line if
# you don't want password to be enable for defaultMaxPasswordAge days (be
# careful to the sambaPwdMustChange attribute's value)
defaultMaxPasswordAge="99999"

Nota: En este ejemplo se usa el valor 99999 para deshabilitar la expiracin de contraseas.
Configure la ruta y unidad para el montaje del directorio home automticamente en clientes windows a
travs del logon script:

# The UNC path to home drives location (%U username substitution)


# Just set it to a null string if you want to use the smb.conf 'logon home'
# directive and/or disable roaming profiles
# Ex: userSmbHome="\\PDC-SMB3\%U"
userSmbHome="\\PDC\%U"

# The UNC path to profiles locations (%U username substitution)


# Just set it to a null string if you want to use the smb.conf 'logon path'
# directive and/or disable roaming profiles
# Ex: userProfile="\\PDC-SMB3\profiles\%U"
userProfile="\\PDC\profiles\%U"

# The default Home Drive Letter mapping


# (will be automatically mapped at logon time if home directory exist)
# Ex: userHomeDrive="H:"
userHomeDrive="H:"

# The default user netlogon script name (%U username substitution)


# if not used, will be automatically username.cmd
# make sure script file is edited under dos
# Ex: userScript="startup.cmd" # make sure script file is edited under dos
userScript="logon.bat"
mailDomain="fnc.com.ve"

En la siguiente seccin veremos como actualizar el directorio LDAP con la informacin de Samba
requerida para un controlador de dominio.
Ahora que ya hemos editado los archivos de configuracin de las herramientas smbldap-tools,
inicializaremos nuestro directorio LDAP con la informacin para el dominio NT: FNC.COM.VE.
El comando smbldap-populate inicializar nuestro directorio LDAP con la siguiente informacin:
Base DN: dc=fnc,dc=com,dc=ve
Contenedor (OU= Unidad Organizativa ) para las cuentas Unix/Samba:ou=Users
En el contenedor para los Usuarios, se crearn por defecto los usuarios:root y nobody los cuales
sern mapeados al usuarios Administrador y Guest Samba respectivamente.
Contenedor (OU= Unidad Organizativa ) para los Grupos Unix/Samba: ou=Groups
En el contenedor de los Grupos, se crearn por defecto los Grupos Predeterminados de un
dominio Samba: Domain Admins,Domain Users, Domain Guests, Domain Computers.
Contenedor (OU= Unidad Organizativa ) para las cuentas de Computadoras
Windows:ou=Computers
Contenedor (OU= Unidad Organizativa ) para los mapeos de Cuentas Unix a Cuentas
Samba/Windows (SID): ou=Idmap

Para inicializar nuestro directorio LDAP con la informacin de arriba usaremos el comando smbldappopulatede la siguiente manera:
root@servidorimpresion:# smbldap-populate
Populating LDAP directory for domain FNC.COM.VE (S-1-5-21-3702025042-35278797074288773517)
(using builtin directory structure)
entry dc=fnc,dc=com,dc=ve already exist.
adding new entry: ou=Users,dc=fnc,dc=com,dc=ve
adding new entry: ou=Groups,dc=fnc,dc=com,dc=ve
adding new entry: ou=Computers,dc=fnc,dc=com,dc=ve
adding new entry: ou=Idmap,dc=fnc,dc=com,dc=ve
adding new entry: uid=root,ou=Users,dc=fnc,dc=com,dc=ve
adding new entry: uid=nobody,ou=Users,dc=fnc,dc=com,dc=ve
adding new entry: cn=Domain Admins,ou=Groups,dc=fnc,dc=com,dc=ve
adding new entry: cn=Domain Users,ou=Groups,dc=fnc,dc=com,dc=ve
adding new entry: cn=Domain Guests,ou=Groups,dc=fnc,dc=com,dc=ve
adding new entry: cn=Domain Computers,ou=Groups,dc=fnc,dc=com,dc=ve
adding new entry: cn=Administrators,ou=Groups,dc=fnc,dc=com,dc=ve
adding new entry: cn=Account Operators,ou=Groups,dc=fnc,dc=com,dc=ve
adding new entry: cn=Print Operators,ou=Groups,dc=fnc,dc=com,dc=ve
adding new entry: cn=Backup Operators,ou=Groups,dc=fnc,dc=com,dc=ve
adding new entry: cn=Replicators,ou=Groups,dc=fnc,dc=com,dc=ve
adding new entry: sambaDomainName=FNC.COM.VE,dc=fnc,dc=com,dc=ve
Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password:
Retype new password:
Al final se nos solicita que asignemos una contrasea para el usuario root del dominio, utilizaremos la
contrasea: xxxxxx

Las herramientas smbldap-populate crean 5 grupos locales (built-in): Account Operators,


Administrators, Backup Operators, Print Operators, Replicators, a estos grupos les agrega el atributo
sambaGroupType con el valor 5, el tipo de grupo samba 5 es usado para grupos de dominio y no para
grupos locales, para los grupos samba locales debe usar el tipo 4
Use el comando ldapmodify para cambiar los atributos en los dn de los grupos, cree el archivo
/tmp/samba-builtin-changetype.ldif:
Nota: Se debe tener en cuenta que no puede haber espacios en blanco a final de las lineas
vi /tmp/samba-builtin-changetype.ldif
Con el siguiente contenido:
dn: cn=Account Operators,ou=Groups,dc=fnc,dc=com,dc=ve
changetype: modify
replace: sambaGroupType
sambaGroupType: 4
dn: cn=Administrators,ou=Groups,dc=fnc,dc=com,dc=ve
changetype: modify
replace: sambaGroupType
sambaGroupType: 4
dn: cn=Backup Operators,ou=Groups,dc=fnc,dc=com,dc=ve
changetype: modify
replace: sambaGroupType
sambaGroupType: 4
dn: cn=Print Operators,ou=Groups,dc=fnc,dc=com,dc=ve
changetype: modify
replace: sambaGroupType
sambaGroupType: 4
Ahora realizamos la modificacin con el comando ldapmodify usando el DN cn=admin.

root@servidorimpresion:# ldapmodify -h localhost -x -D "cn=admin,dc=fnc,dc=com,dc=ve" -W


-f /tmp/samba-builtin-changetype.ldif
Enter LDAP Password:
modifying entry "cn=Account Operators,ou=Groups,dc=fnc,dc=com,dc=ve"
modifying entry "cn=Administrators,ou=Groups,dc=fnc,dc=com,dc=ve"
modifying entry "cn=Backup Operators,ou=Groups,dc=fnc,dc=com,dc=ve"
modifying entry "cn=Print Operators,ou=Groups,dc=fnc,dc=com,dc=ve"
Despus de haber llenado el directorio con los usuarios y grupos de dominio predeterminados, es
necesario reiniciar samba para que tenga conocimiento de la nueva informacin.
root@servidorimpresion:# /etc/init.d/samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.
2.4 En esta seccin veremos algunos comandos que nos podrn servir para verificar que las cuentas de
samba sean las almacenadas en el directorio ldap, y tambin se hace una prueba de conexin al servidor
samba.
El comando pdbedit nos servir para hacer un listado de usuarios Samba, el comando pdbedit se
conectar al servidor LDAP para obtener la informacin, si todo fue configurado correctamente nos
deber de mostrar los siguiente:
root@servidorimpresion:~# pdbedit -L
root:0:root
nobody:65534:nobody
Como se vio antes, los usuarios samba deben estar mapeados al UID de un usuario Unix, en este caso
el usuario root Samba esta mapeado al usuario root Unix con UID 0 y el usuario nobody Samba esta
mapeado al usuario nobody Unix con UID 65534.
Si deseamos mostrar los detalles de informacin de un usuario samba usamos el comando pdbedit de la
siguiente manera:
root@servidorimpresion:~# pdbedit -Lv root
Unix username:

root

NT username:

root

Account Flags:
User SID:

[U

S-1-5-21-3702025042-3527879707-4288773517-500

Primary Group SID:


Full Name:

S-1-5-21-3702025042-3527879707-4288773517-513

root

Home Directory:

\\PDC\root

HomeDir Drive:

H:

Logon Script:
Profile Path:

\\PDC\profiles\root

Domain:

FNC

Account desc:
Workstations:
Munged dial:
Logon time:

Logoff time:

never

Kickoff time:

never

Password last set:

mar, 07 may 2013 06:37:04 VET

Password can change: mar, 07 may 2013 06:37:04 VET


Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours

: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

La cuenta root que se creo en el directorio LDAP, es la que se usar como usuario root local y como
administrador de dominio, se debe cambiar la ruta al $HOME de root y asignarle el shell /bin/bash.
root@pdc:~# smbldap-usermod -d /root -s /bin/bash root
Deshabilite el uso de perfil mvil para la cuenta Samba root:
root@pdc:~# smbldap-usermod -C "" root
root@pdc:~# smbldap-usermod -D "" root
root@pdc:~# smbldap-usermod -F "" root
Si desea cambiar la contrasea de la cuenta root/Administrator use el comando:
root@pdc:~# smbldap-passwd root

En un sistema controlador de dominio basado en Samba, las cuentas de usuario de Windows/Samba son
mapeadas a una cuenta de usuario Unix, es decir, se mapea el SID (Security Identifier) de la cuenta
Windows/Samba con el UID (User ID) de la cuenta Unix, as mismo se mapean los grupos
Windows/Samba a grupos Unix a travs del SID del grupo Windows/Samba al GID del grupo Unix,
para validar que el mapeo de grupos se haya realizado correctamente use el comando net, por ejemplo:
root@servidorimpresion:~# net groupmap list
Domain Admins (S-1-5-21-3702025042-3527879707-4288773517-512) -> 512
Domain Users (S-1-5-21-3702025042-3527879707-4288773517-513) -> 513
Domain Guests (S-1-5-21-3702025042-3527879707-4288773517-514) -> 514
Domain Computers (S-1-5-21-3702025042-3527879707-4288773517-515) -> 515
Administrators (S-1-5-32-544) -> 544
Account Operators (S-1-5-32-548) -> 548
Print Operators (S-1-5-32-550) -> 550
Backup Operators (S-1-5-32-551) -> 551
Replicators (S-1-5-32-552) -> 552
2.5 Probando conexiones al servidor Samba usando cuentas en LDAP
Cuando realizamos el llenado el directorio con smbldap-populate se creo la cuenta de usuario Windows
de nombre root mapeada al administrador del dominio, realicemos una prueba de conexin utilizando
la cuenta root del dominio, deberemos utilizar la contrasea que se asigno al llenar el directorio con el
comando smbldap-populate y no la contrasea del usuario root local.
root@servidorimpresion:~# smbclient //localhost/netlogon -U root
Enter root's password:
Domain=[FNC] OS=[Unix] Server=[Samba 3.5.6]
smb: \> quit
Ya que configuramos el uso del archivo /etc/samba/smbusers para el mapeo de usuarios, podremos
hacer una prueba utilizando la cuenta Administrator, deberemos utilizar la misma contrasea del
usuario root.
root@servidorimpresion:~# smbclient //localhost/netlogon -U Administrator
Enter Administrator's password:
Domain=[FNC] OS=[Unix] Server=[Samba 3.5.6]

smb: \> quit


Si las ltimas pruebas no funcionan entonces debe revisar su configuracin y probablemente
volver a empezar verificando que todo se haya seguido al pie de la letra.
2.6 Configuracin de la resolucin de Identidades con NSS_LDAP
En los sistemas Unix como GNU/Linux los nombres comunes de las cuentas de usuario y grupo son
mapeadas a un identificador numrico llamado UID (User ID) y GID (Group ID) respectivamente, el
mapeo de un nombre comn a uno numrico es llevado a cabo por la biblioteca de sistema NSS (Name
Service Switch), la cual es invocada cada vez que algn comando o aplicacin realizan alguna
operacin que requiera la resolucin de un nombre, sea un usuario, un grupo, un nodo de red, entre
otras entidades, tambin es usada cuando se realizan operaciones relacionadas con permiso de archivos
y autenticacin de usuarios.
Por default la biblioteca de sistema NSS realiza la consulta de usuarios, grupos y shadow usando
archivos locales, es decir, /etc/passwd, /etc/group y /etc/shadow respectivamente, ya que nuestro
sistema usar un directorio LDAP para almacenar la informacin de los usuarios y grupos ser
necesario indicarle a la biblioteca NSS que debe usar un directorio LDAP para obtener informacin
sobre dichas identidades, es aqu donde entra el paquete nss_ldap, el paquete nss_ldap es un plugin para
la biblioteca de sistema NSS para poder realizar la resolucin de identidades usando como fuente de
origen un directorio LDAP.
Para instalarlo ejecutamos:
root@pdc:~# apt-get install libnss-ldap
El sistema de administracin de paquetes apt nos lanzar un asistente para configuracin, a las
preguntas respondemos:
LDAP server Uniform Resource Identifier: ldap://127.0.0.1
Distinguished name of the search base dc=fnc,dc=com,dc=ve
LDAP version to use: 3
Cuenta LDAP para root: cn=admin,dc=me,dc=gob,dc=ve
Contrasea para la cuenta LDAP de root: xxxx
Desea permitir que la cuenta del administrador de LDAP se comporte como el administrador local?:
no
Hace falta un usuario para acceder a la base de datos LDAP: No
Dar privilegios especiales de LDAP para root: No

Desea hacer que la configuracin slo la pueda leer o escribir el propietario: Si


Luego respaldamos el archivo de configuracin del cliente ldap, este se ubica en /etc/ldap y se llama
ldap.conf.
cd /etc/ldap
cp ldap.conf ldap.con.org
vi ldap.conf
luego copiamos en el archivo lo siguiente:
uri ldap://127.0.0.1/
ldap_version 3
# Base de busqueda
base dc=fnc,dc=com,dc=ve
# Contenedores para cuentas de usuario, grupos y computadoras
nss_base_passwd

ou=Users,dc=fnc,dc=com,dc=ve?sub

nss_base_passwd

ou=Computers,dc=fnc,dc=com,dc=ve?sub

nss_base_shadow

ou=Users,dc=fnc,dc=com,dc=ve?sub

nss_base_group

ou=Groups,dc=fnc,dc=com,dc=ve?sub

# Tipo binding
bind_policy soft
nss_initgroups_ignoreusers
daemon,bin,sys,sync,games,man,lp,mail,news,uucp,proxy,wwwdata,backup,list,irc,gnats,nobody,libuuid,dhcp,syslog,klog,sshd,ntp,snmp,openldap
# Filtros PAM
pam_login_attribute uid
pam_member_attribute memberuid
pam_filter objectclass=posixAccount
# Cambio contrasea via passwd(1)
pam_password exop

Ahora debemos configurar la resolucin de entidades va LDAP en el archivo de configuracin de la


biblioteca NSS: /etc/nsswitch.conf y modificar las entradas para las entidades: passwd, group y shadow.
vi /etc/nsswitch.conf
Cambiar:
passwd:

compat

group:

compat

shadow:

compat

Por:
passwd:

compat ldap

group:

compat ldap

shadow:

compat ldap

hosts:

files wins dns

Despus de guardar los cambios haremos unas pruebas con el comando getent para verificar que si este
haciendo las consultas al directorio LDAP, pero antes reiniciemos el servivcio nscp.
/etc/init.d/nscd restart
Restarting Name Service Cache Daemon: nscd.
Verificando la resolucin de usuarios:
# getent passwd | grep -E 'root|nobody'
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
root:x:0:0:Netbios Domain Administrator:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
Ahora haremos una prueba para que podamos obtener la lista de grupos tanto del archivo /etc/group
como del directorio LDAP.
root@pdc:~# getent group | grep -E 'root|Domain'
root:x:0:

Domain Admins:*:512:root
Domain Users:*:513:
Domain Guests:*:514:
Domain Computers:*:515:
En la salida del comando anterior la entrada para el grupo root fue obtenida del archivo /etc/group y las
entradas de los grupos Domain XXXX fueron obtenidas del directorio LDAP.
Ahora verifique que el mapeo de grupos Windows a grupos Unix se realice correctamente, mostrando
el nombre comn del grupo Unix en la salida del comando net groupmap list, por ejemplo:
root@pdc:~# net groupmap list
Domain Admins (S-1-5-21-2911508632-2405292923-4115677068-512) -> Domain Admins
Domain Users (S-1-5-21-2911508632-2405292923-4115677068-513) -> Domain Users
Domain Guests (S-1-5-21-2911508632-2405292923-4115677068-514) -> Domain Guests
Domain Computers (S-1-5-21-2911508632-2405292923-4115677068-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

3.- Creacin de Usuarios y Grupos en el Dominio


Antes de crear un usuario debemos copiar el archivo smbldap-passwd que se encuentra el el
directorio/usr/sbin/ con el nombre smbldap-passwd.cmd
para ello corremos el siguiente comando:
root@pdc:~# cd /usr/sbin/
root@pdc:~# cp smbldap-passwd smbldap-passwd.cmd
Para crear un usuario del domino se debe correr el siguiente comando:
smbldap-useradd -a -g xxx -m -c 'Luis Perez' -N "Luis" -S "Perez" -s /bin/bash -d /home/lperez
-F "" -P lperez
Donde xxx representa el GID del grupo al que pertenece el usuario.
Este usuario podr iniciar sesin tanto el Linux como en Windows.

Para agregar un grupo al dominio de debe correr el siguiente comando:


smbldap-groupadd nombre_grupo
Para agregar un usuario a un grupo debe correr el siguiente comando:
smbldap-usermod -G grupo usuario
Donde usuario es el nombre del usuario que se desea incluir al grupo y
grupo es el nombre del grupo al que se quiere incluir

4,- Instalacin de NFS en el Servidor


Llegado a este punto, debemos instalar la herramienta NFS, quien nos va a permitir compartir el home
personal de los usuarios y las carpetas de grupos compartidas, en maquinas linux.
Para ello instalamos el NFS:
apt-get install portmap nfs-kernel-server
El archivo de configuracin se encuentra en el directorio /etc/exports.
Una vez instalado el servicio, debemos crear el directorio donde estarn las carpetas que vamos a
compartir, en el caso del home personal de cada usuario no debemos hacer nada ya que cuando
aadimos un nuevo usuario al dominio se crea automticamente la carpeta en el directorio /home.
En el caso de los grupos, debemos crear el directorio que queremos compartir, para ello ejecutamos el
comando:
mkdir -p /home/compartido/xxxxxxx
Donde compartido representa la carpeta que va a contener todos los directorio de las diferentes
oficinas que queremos compartir y xxxxxxx representa la carpeta contenedora de la informacin de la
oficina o unidad.
Ahora debemos asignarle los permisos a la carpeta xxxxxxx, para ello hacemos:
Creamos el grupo donde estarn contenidos todos los usuario que tendrn acceso a la carpeta:
smbldap-groupadd prueba
Ahora aadimos los usuarios al grupo:
smbldap-usermod -G usuario prueba

Asignamos el propietario de la carpeta:


chown root:prueba /home/compartido/xxxxxxx
Asignamos los permisos 770 a la carpeta
chmod 770 /home/compartido/xxxxxxx
Una vez creada la carpeta, debemos aadir la linea que va a permitir compartir la carpeta con la
maquina cliente, esto se hace en el archivo /etc/exports, lo editamos:
vi /etc/exports
y aadimos la linea:
/home/compartido/xxxxxxx

-sync,no_subtree_check,rw 10.12..x.x @prueba

Donde:
/home/compartido/xxxxxxx representa la carpeta que se quiere compartir
-sync replica los cambios despus que los mismos sean guardados.
no_subtree_check no comprueba que las carpetas compartidas son todas las pertenecientes a un mismo
volumen por lo que la transferencia de la lista de archivos es mas rpida.
10.12.x.x representa la direccin IP del la mquina cliente (a la que se quiere compartir la carpeta).
@prueba representa el grupo que tendr permiso para acceder a la carpeta.
En el caso del home personal de cada usuario debemos aadir la siguiente linea por cada usuario:
/home/usuario 10.12.x.x(rw,sync,subtree_check)
Donde:
/home/usuario representa la carpeta contenedora de informacin del usuario que se quiere compartir a
la mquina cliente
10.12.x.x representa la direccin IP del la mquina cliente (a la que se quiere compartir la carpeta).
rw representa permiso de escritura y lectura sobre la carpeta
sync replica los cambios despus que los mismos sean guardados.
subtree_check comprueba que las carpetas compartidas son todas las pertenecientes a un mismo
volumen
Ahora debemos guardar y salir del archivo. Para que los cambios tengan efecto y para no interrumpir el
servicio a otros usuario que ya estn usando recursos compartidos, debemos correr el siguiente
comando:

exportfs -r
Para montar el directorio compartido en la maquina cliente se debe correr el siguiente comando:
mount dir_ip_servidor_nfs:/home/compartido/xxxxxx /directorio_donde_se_quiere_montar
Si se quiere hacer de manera automtica cuando se inicie la maquina debe colocar la linea anterior en el
archivo /etc/fstab

5.- Compartiendo una Carpeta a un Grupo en Mquinas Windows


Para compartir una carpeta en mquinas con windows debemos modificar el archivo /etc/smb.conf
al final debemos agregar:
[XXX]
comment = Archivos comunes de XXX
browseable = yes
writeable = yes
create mask = 0770
path = /home/compartido/XXX
write list = NOMBRE_GRUPO
Guardamos y salimos el archivo.

[XXX] Representa el nombre de la carpeta que vamos a compartir


path Ruta donde se encuentra la carpeta
write list Nom,bre del grupo que tiene permiso sobre la carpeta
Luego se debe crear la carptea

XXX

mkdir /home/compartido/XXX
Ahora debemos asignarle los permisos a la carpeta XXX, para ello hacemos:
Creamos el grupo donde estarn contenidos todos los usuario que tendrn acceso a la carpeta:
smbldap-groupadd prueba
Ahora aadimos los usuarios al grupo:
smbldap-usermod -G usuario prueba
Asignamos el propietario de la carpeta:
chown root:prueba /home/compartido/XXX
Asignamos los permisos 770 a la carpeta
chmod 770 /home/compartido/XXX
Luego recargamos a configuracin del samba con el comando:

/etc/init.d/samba reload
Finalmente, en la mquina windows cliente debemos agregar una unidad de red colocando como ruta:
\\PDC\XXX y marcamos el check box que dice conectar de nuevo al iniciar sesin.

6.- Configuracin De Cuotas de Disco


Ya que cada usuario tendr una carpeta compartida en el servidor, debemos asegurarnos de asignarle
una cuota de almacenamiento en disco, para que no sea posible que un usuario ocupe espacio dems y
perjudique al resto.
Para ello se debe instalar la aplicacin llamada quota.
apt-get install quota quotatool
Luego debemos modificar el archivo /etc/fstab para indicarle al sistema que filesystem va a utilizar
cuotas, para ello editamos el archivo:
vi /etc/fstab
En nuestro caso aplicaremos cuotas al directorio /home, ubicamos a linea de /home y aadimos dentro
del espacio de opciones lo siguiente: usrquota,grpquota
/dev/hda2/ /home ext3 defaults,usrquota,grpquota 0 1
Guardamos y salimos, en el prximo reinicio esta informacin sera cargada. Si queremos actualizar
esta informacin sin necesidad de reiniciar el equipo, debemos correr el siguiente comando:
mount -o remount /home
El sistema de archivos "/home" esta listo ahora para soportar cuotas de disco. El siguiente paso es
verificar con el comando quotacheck por sistemas de archivos que soporten cuotas. Este comando
crea, verifica o repara el control de cuotas en los sistemas que lo soporten, en este caso creara el
soporte:
quotacheck -F vfsv0 -avumg
Para activar las cuotas de disco recin configuradas, solo bastar ejecutar:

quotaon /home
Para asignar cuotas de disco a cualquier usuario o grupo solo har falta utilizar edquota citando el
nombre del usuario al cual se le quiere aplicar:
edquota -u usuario
Lo anterior deber devolver algo como lo siguiente a travs de vi u otro editor de texto simple:
Asignacin de una cuota de 250MB
Disk quotas for user operador (uid 1000):
Filesystem

blocks

soft

/dev/sda1

16

250000

hard
260000

inodes

soft

hard
0

Donde Filesystem representa la carpeta a la que se quiere aplicar cuotas


blocks Representa el nmero de bloques usado actualmente por el usuario.
Soft (Suave) Este lmite (para bloques o inodos) que es siempre menor al HARD, puede ser excedido
por el usuario, pero ser constantemente advertido que el lmite de uso para bloques o inodos ya ha sido
excedido. Podra verse como un lmite de advertencia que le estar indicando al usuario que su lmite
ya se excedi y tome medidas.
Hard (Duro) Cuando se establece (para bloques o inodos), es el lmite absoluto. El usuario no podr
exceder este lmite.
Inodos Representa el nmero de inodos usado actualmente por el usuario
Soft y Hard representan el tiempo de gracia.
para propagar esta cuota a otros usuarios se ejecuta el comando
edquota -p usuario usuario1
para revisar si tiene cuota con
quota usuario

7.- Unir una Mquina al Dominio


Mquina con Windows XP Profesional
Aadimos la mquina al dominio con el siguiente comando: (esto se debe hacer el el servidor)
smbldap-useradd -w -i (nombre de mquina$)
Luego colocamos una clave.
En el equipo que queremos agregar al dominio hacemos lo siguiente:
1. Entramos a Windows como Administrador del equipo
2. Botn derecho sobre Mi PC y sobre propiedades
3. Entramos en la pestaa Nombre de equipo
4. Pulsamos sobre el botn Cambiar...
5. Pulsamos sobre Dominio y debajo escribimos el nombre del dominio en nuestro caso es
FNC
6. Nos solicitara un usuario y contrasea, en nuestro caso usuario root y contrasea XXX La que
coloco cuando utilizo el comando sambaldap-populate
7. Finalmente nos da la bienvenida al dominio y nos pedir reiniciar el sistema.
8. Al iniciar de nuevo el equipo debemos seleccionar el dominio e introducir un usuario y
clave del dominio LDAP.
Mquina con Windows 7
Para registrar un equipo con Windows 7 al domino, debemos realizar algunos cambios al registro, para
ello debemos hacer lo siguiente:
En el servidor, agregamos el equipo al domino con el siguiente comando:
smbldap-useradd -w (nombre de mquina)
Luego en el equipo que queremos incluir en el dominio, hacemos:
Click en Inicio
Click en ejecutar
colocamos regedit y nos abre el editor del registro, una vez all ubicamos las siguientes llaves:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Paramet
ers
All agregamos los siguientes parmetros:
"DNSNameResolutionRequired"=dword:00000000
"DomainCompatibilityMode"=dword:00000001
Luego buscamos la siguiente llave:
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System]
y agregamos las siguientes llaves:
SlowLinkDetectEnabled"=dword:00000000
DeleteRoamingCache"=dword:00000001
WaitForNetwork"=dword:00000000
CompatibleRUPSecurity"=dword:00000001
Luego buscamos la siguiente llave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
All modificamos el siguiente parmetro:
EnableLUA"=dword:00000000
Finalmente,
1. Entramos a Windows como Administrador del equipo
2. Botn derecho sobre Mi PC y sobre propiedades
3. Entramos en la pestaa Nombre de equipo
4. Pulsamos sobre el botn Cambiar...
5. Pulsamos sobre Dominio y debajo escribimos el nombre del dominio en nuestro caso es
FNC
6. Nos solicitara un usuario y contrasea, en nuestro caso usuario root y contrasea xxx La que
coloco cuando utilizo el comando sambaldap-populate

7. Finalmente nos da la bienvenida al dominio y nos pedir reiniciar el sistema.


8. Al iniciar de nuevo el equipo debemos seleccionar el dominio e introducir un usuario y su
clave del dominio LDAP.
Cuando se haya unido la mquina al domino dar un mensaje de error podemos obviarlo o ejecutamos
el siguiente parche:

8.- Tareas de Mantenimiento


8.1- Cambiar o asignar contrasea al Root DN de OpenLDAP
Esta es una cuenta privilegiada que no tiene restricciones sobre el directorio, por lo tanto debemos
asegurarla.
Para cambiar la contrasea debemos ejecutar lo siguiente:
slappasswd
New password:
Re-enter new password:
{SSHA}VanYekdrphCkbjDffLCXbBsxsg3QJBI6
Copie el HASH {SSHA}VanYekdrphCkbjDffLCXbBsxsg3QJBI6 y cambielo en el valor rootpw
en el archivo olcDatabase={1}hdb
etc/ldap/slapd.d/cn=config

olcDatabase={0}hdb

ubicado

en

el

directorio

Ejemplo:
rootdn "cn=admin,dc=fnc,dc=com,dc=ve"
rootpw {SSHA}VanYekdrphCkbjDffLCXbBsxsg3QJBI6
Para que el cambio tome efecto reinicie el servicio LDAP:
# /etc/init.d/slapd restart
8.2- Respaldar los archivos de configuracin de OpenLDAP
Se recomienda respaldar los directorios de configuraciones tanto de Samba, OpenLDAP, smbldaptools, NSS LDAP y PAM.

En la siguiente tabla se muestra una lista:


Tabla 11.1. Directorios de configuracin a respaldar
Servicio

Archivos y Directorios

OpenLDAP /etc/ldap/, /etc/default/slapd


Samba

/etc/samba

smbldap-tools /etc/smbldap-tools/
libnss-ldap
PAM

/etc/nsswitch.conf /etc/libnss-ldap.conf
/etc/pam_ldap.conf
/etc/pam.d

Incluya los archivos y directorios mencionados en la tabla de arriba en su sistema de respaldos.


8.3- Respaldar y Restaurar una base de datos de OpenLDAP
Generaremos respaldos en fro y en caliente, los respaldos sern generados en formato LDIF.
El programa slapcat(8) lee la informacin de la base de datos en orden secuencial y genera la salida
correspondiente en formato LDIF incluyendo atributos de usuario y operacionales, el programa slapcat
solo respaldara las entradas que se leyeron en el momento de la ejecucin, si en el momento de que
slapcat esta ejecutandose se realiza una operacin de escritura sobre alguna entrada dicho cambio no
ser incluido en el respaldo.
En OpenLDAP las bases de datos de tipo hdb y bdb pueden ser respaldadas mientras el servicio
slapd(8) esta en ejecucin usando el programa slapcat, a este tipo de respaldo se le llama en caliente.
Si no esta seguro de que no habr modificacioens en los datos de las bases de datos de OpenLDAP y no
sabe si dichos cambios puedan afectar las aplicaciones o clientes LDAP se recomienda que detenga el
servicio slapd antes de generar el respaldo con slapcat, a este tipo de respaldo se le llama en frio.
Para crear un respaldo en frio de una base de datos de OpenLDAP siga el siguiente procedimiento:
Detener el servicio slapd:
# /etc/init.d/slapd stop

Respaldar la base de datos usando el programa slapcat:


# slapcat -b dc=fnc,dc=com,dc=ve -l respaldo-dc=fnc,dc=com,dc=ve-`date +%d-%b-%Y`.ldif
El comando slapcat generar un respaldo de la base de datos dc=fnc,dc=com,dc=ve definida por el
parmetro -b en el archivo respaldo-dc=fnc,dc=com,dc=ve-`date +%d-%b-%Y`.ldif definido por el
parmetro -l.
Para ejecutar un respaldo en caliente se debe ejecutar el mismo comando que para el respaldo en fro
Para restaurar la base de datos a partir del archivo LDIF generado por slapcat siga el siguiente
procedimiento:
Apagar el servicio slapd:
# /etc/init.d/slapd stop
Limpiar el directorio de base de datos de slapd:
# (cd /var/lib/ldap/; rm -fv alock __db.* *.bdb log.*)
Restaurar directorio a partir del archivo LDIF:
# slapadd -v -b dc=fnc,dc=com,dc=ve -l respaldo-dc=fnc,dc=com,dc=ve-`date +%d-%b-%Y`.ldif
Opcionalmente Re indexe todos los atributos:
# slapindex -v
Re establecer permisos al directorio de datos:
# chown -R openldap:openldap /var/lib/ldap
Iniciar el servicio slapd:
# /etc/init.d/slapd start
8.3-Respaldando archivos importante de Samba
Respaldar los archivos en el directorio /etc/samba/ y /var/lib/samba/

TODO: Meter ejemplo real: detener samba, crear directorio de respaldos mkdir -p /var/backups/samba/,
cp
-va
/var/lib/samba/*
/var/backups/samba/var/lib/samba/,
cp
-va
/etc/samba/*
/var/backups/samba/etc/samba/
8.4- Respaldando el SID del Dominio Samba
Es prudente almacenar el SID de la maquina y/o dominio en un archivo por seguridad, Porque? Porque
un cambio en el nombre de la maquina (hostname) o en el nombre de dominio (workgroup) puede
resultar en un cambio en el SID. As, cuando tienes el SID a la mano, es simple restaurarlo. La
alternativa sera sufrir el dolor de tener que recuperar los perfiles de los usuarios de escritorio y quizs
re-unir todos las maquinas miembros del dominio.
Primero, no olvides almacenar el SID local a un archivo. Es una buena idaa ponerlo en el directorio en
el que el archivo smb.conf esta almacenado, un ejemplo simple seria:
root@pdc:~# net getlocalsid > /etc/samba/EXAMPLE-SID
Para restaurar el SID usamos el comando:
root@pdc:~# net setlocalsid S-1-5-21-1482872308-118742792-2317756604

9.- Instalacin de Cups (Servidor de Impresin de Linux)


Para instalar Cups se debe correr el siguiente comando:
root@pdc:~# aptitude install cups
esto instalar el servidor de impresin CUPS con todas sus dependencias.
Luego movemos el archivo de configuracin de cups para hacer un respaldo de ste.
root@pdc:~# mv /etc/cups/cupsd.conf /etc/cups/cupsd.conf.org
Creamos un nuevo archivo cupsd.conf
root@pdc:~# vi /etc/cups/cupsd.conf
y copiamos las siguientes lineas en l:
LogLevel warn
MaxLogSize 0

# Allow remote access


Port 631
Listen /var/run/cups/cups.sock
# Enable printer sharing and shared printers.
Browsing Off
BrowseOrder allow,deny
BrowseAllow all
BrowseRemoteProtocols CUPS dnssd
BrowseAddress @LOCAL
BrowseLocalProtocols CUPS dnssd
DefaultAuthType Basic
WebInterface Yes
<Location />
# Allow shared printing...
Order allow,deny
Allow all
</Location>
<Location /admin>
</Location>
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
</Location>
<Policy default>
JobPrivateAccess all
JobPrivateValues none
SubscriptionPrivateAccess default
SubscriptionPrivateValues default
<Limit Create-Job Print-Job Print-URI Validate-Job>
Order deny,allow
</Limit>
<Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes
Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job
Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job
CUPS-Get-Document>
Require user @OWNER @SYSTEM
Order deny,allow
</Limit>
<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-DeleteClass CUPS-Set-Default CUPS-Get-Devices>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job
Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-

Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-RejectJobs>


AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit Cancel-Job CUPS-Authenticate-Job>
Require user @OWNER @SYSTEM
Order deny,allow
</Limit>
<Limit All>
Order deny,allow
</Limit>
</Policy>
<Policy authenticated>
JobPrivateAccess default
JobPrivateValues default
SubscriptionPrivateAccess default
SubscriptionPrivateValues default
<Limit Create-Job Print-Job Print-URI Validate-Job>
AuthType Default
Order deny,allow
</Limit>
<Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes
Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job
Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job
CUPS-Get-Document>
AuthType Default
Require user @OWNER @SYSTEM
Order deny,allow
</Limit>
<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-DeleteClass CUPS-Set-Default>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job
Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer ShutdownPrinter Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-RejectJobs>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit Cancel-Job CUPS-Authenticate-Job>
AuthType Default

Require user @OWNER @SYSTEM


Order deny,allow
</Limit>
<Limit All>
Order deny,allow
</Limit>
</Policy>
Luego Guardamos y salimos,
Finalmente reiniciamos el servicio:
/etc/init.d/cups restart
Para agregar una impresora se debe acceder al servidor de impresin a travs de un navegador
http://dir_ip_servidor:631

9.- Instalacin de Pykota


Pykota es una aplicacin que se integra a cups para administrar las cuotas de impresin de los usuarios,
adicionalmente puede utilizar como almacn de usuario a LDAP
Lo primero que debe hacer es descargar la ultima versin de Pykota desde su pagina oficial:
http://www.pykota.com/
http://www.pykota.com/software/pykota/download/tarballs/pykota-1.26_fixes_official.tar.gz/view
Descomprimiremos el paquete:
root@pdc:~# tar xvzf pykota-1.26_fixes_official.tar.gz
root@pdc:~# cd pykota-1.26_fixes_official/
Ahora chequeamos que las dependencias estn instaladas, para ello corremos el siguiente comando:
root@pdc:~# python checkdeps.py
Este comando arrojar las dependencias que falten, en este caso vamos a instalar:
aptitude install python-egenix-mxdatetime python-ldap python-osd python-jaxml python-pam
Sin embargo faltaron las siguientes dependencias necesarias para el buen funcionamiento de pykota.
Estas deben ser descargadas para ser instaladas individualmente.

Python-SNMP

http://sourceforge.net/projects/pysnmp/

Python-pkpgcounter http://www.pykota.com/software/pkpgcounter/download/tarballs/
Python-pkipplib

http://www.pykota.com/software/pkipplib/download/tarballs

Una vez descargadas estas aplicaciones debemos proceder a instalarlas, para cada una de ellas hay que
hacer lo siguiente:
1. Entrar al directorio donde se encuentra el archivo tar.gz que acabamos de descargar.
2. Descomprimir el archivo con el siguiente comando:
tar xvzf nombre_archivo.tar.gz
3.

Entrar al nuevo directorio:


cd nombre_archivo

4.

Finalmente instalar la dependencia:


python setup.py install

Repetimos el procedimiento para las tres dependencias. Una vez finalizada la instalacin de estas
dependencias continuamos con la instalacin de pykota.
Para ello volvemos al directorio donde se encuentra la fuente de pykota:
root@pdc:~# cd pykota-1.26_fixes_official/
y corremos el comando para instalarlo
root@pdc:~# python setup.py install

Con esto habremos instalado pykota, solo falta hacer algunos ajustes para integrar el pykota al LDAP.

9.1- Integracin de PYKOTA con LDAP


Debemos copiar el esquema de pykota dentro del directorio ldap, para ello correomos el siguiente
comando:
root@pdc:~# cp /usr/local/share/pykota/ldap/pykota.schema /etc/ldap/schema
Entramos al directorio /etc/ldap/schema
root@pdc:~# cd /etc/ldap/schema
Editamos el archivo que utilizamos para aadir el esquema de samba

root@pdc:~# vi schema_convert.conf
y agregamos al final del archivo la siguiente linea:
include /etc/ldap/schema/pykota.schema
guardamos y salimos.
luego creamos un directorio temporal para almacenar el resultado:
mkdir /tmp/ldif_output
Ahora, convertimos el archivo pykota.schema a pykota.ldif, con la siguiente sintaxis:
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={13}pykota,cn=schema,cn=config"
> /tmp/cn=pykota.ldif
Edite el archivo generado /tmp/cn\=pykota.ldif, cambiando los siguientes atributos.
Como se muestra a continuacin:dn:ou=pykota,dc=gsr,dc=pt
ou: pykota
objectClass: top
objectClass: organizationalUnit
dn: cn=pykota,cn=schema,cn=config
...
cn: pykota
y remueva las siguientes lineas al final del archivo:
structuralObjectClass: olcSchemaConfig
entryUUID: b53b75ca-083f-102d-9fff-2f64fd123c95
creatorsName: cn=config
createTimestamp: 20080827045234Z
entryCSN: 20080827045234.341425Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20080827045234Z
Guardamos el archivo y salimos.
Finalmente aadimos el nuevo esquema utilizando la herramienta ldapadd.
ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=pykota.ldif
Enter LDAP Password:
adding new entry "cn=pykota,cn=schema,cn=config"
Debe colocar la clave del administrador del rbol ldap que configuramos en los pasos anteriores.
Esto
debe
generar
un
archivo
llamado
cn={x}pykota.ldif
en
directorio /etc/ldap/slapd.d/cn=config/cn=schema, donde x representa el siguiente numero

el

verificamos esto con el comando:


ls /etc/ldap/slapd.d/cn\=config/cn\=schema/
Luegro creamos los ndices para agilizar la bsqueda, para ello creamos un archivo llamado
pykota_indexes.ldif en la ruta /etc/ldap/schema
vi /etc/ldap/schema/pykota_indexes.ldif
este archivo debe contener la siguiente informacin:
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: pykotaUserName pres,eq,sub
olcDbIndex: pykotaGroupName pres,eq,sub
olcDbIndex: pykotaPrinterName pres,eq,sub
olcDbIndex: pykotaBillingCode pres,eq,sub
olcDbIndex: pykotaLastJobIdent eq

Guardamos y salimos.
Cambese a directorio /etc/ldap/schema
cd /etc/ldap/schema
Luego utilizamos la herramienta ldapmodify para agregar los ndices al rbol.
ldapmodify -x -D cn=admin,cn=config -W -f pykota_indexes.ldif
nos solicita la clave del administrador, la colocamos y obtendremos una salida como esta:
Enter LDAP Password:
modifying entry "olcDatabase={1}hdb,cn=config"
si todo sali bien, podremos ver los ndices usando la herramienta ldapsearch :
ldapsearch -xLLL -D cn=admin,cn=config -x -b cn=config -W olcDatabase={1}hdb
nos solicita la clave y obtenemos una salida como esta:
Enter LDAP Password:
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap

olcSuffix: dc=me,dc=gob,dc=ve
olcAccess: {0}to attrs=userPassword,shadowLastChange,sambaLMPassword,sambaNTPa
ssword by self write by anonymous auth by dn="cn=admin,dc=me,dc=gob,dc=ve" wr
ite by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=me,dc=gob,dc=ve" write by
* read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=me,dc=gob,dc=ve
olcRootPW: {SSHA}rUo7P0QDuAz8iYtUaK+oCRpuvINsdZwF
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
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: cn eq,pres,sub
olcDbIndex: sn eq,pres,sub
olcDbIndex: displayName eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: mail eq,pres,sub
olcDbIndex: givenname 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
olcDbIndex: pykotaUserName pres,eq,sub
olcDbIndex: pykotaGroupName pres,eq,sub
olcDbIndex: pykotaPrinterName pres,eq,sub
olcDbIndex: pykotaBillingCode pres,eq,sub
olcDbIndex: pykotaLastJobIdent eq
En este momento slo queda regenerar los ndices de slapd para ello bajamos el servicio de slapd
/etc/init.d/slapd stop
Luego corremos el siguiente comando:
slapindex -v

Finalmente subimos el servicio de slapd


/etc/init.d/slapd start
Ahora creamos la estructura de pykota dentro del directorio ldap, para ello creamos un archivo dentro
del direcotio /tmp llamado pykota.ldif
vi /tmp/pykota.ldif
en el copiamos la siguiente estructura:
dn:ou=pykota,dc=me,dc=gob,dc=ve
ou: pykota
objectClass: top
objectClass: organizationalUnit
dn:ou=printers,ou=pykota,dc=me,dc=gob,dc=ve
ou: printers
objectClass: top
objectClass: organizationalUnit
dn:ou=jobs,ou=pykota,dc=me,dc=gob,dc=ve
ou: jobs
objectClass: top
objectClass: organizationalUnit
dn:ou=uquotas,ou=pykota,dc=me,dc=gob,dc=ve
ou: uquotas
objectClass: top
objectClass: organizationalUnit
dn:ou=gquotas,ou=pykota,dc=me,dc=gob,dc=ve
ou: gquotas
objectClass: top
objectClass: organizationalUnit
dn:ou=lastjobs,ou=pykota,dc=me,dc=gob,dc=ve
ou: lastjobs
objectClass: top
objectClass: organizationalUnit
dn:ou=billingcodes,ou=pykota,dc=me,dc=gob,dc=ve
ou: billingcodes
objectClass: top
objectClass: organizationalUnit
Guardamos y salimos.

Agregamos la nueva estructura al directorio ldap corriendo el siguiente comando:


ldapadd -x -D cn=admin,dc=me,dc=gob,dc=ve -W -h localhost -f /tmp/pykota.ldif
Introducimos la clave del usuario admin de LDAP y obtendremos el siguiente resultado:
Enter LDAP Password:
adding new entry "ou=pykota,dc=me,dc=gob,dc=ve"
adding new entry "ou=printers,ou=pykota,dc=me,dc=gob,dc=ve"
adding new entry "ou=jobs,ou=pykota,dc=me,dc=gob,dc=ve"
adding new entry "ou=uquotas,ou=pykota,dc=me,dc=gob,dc=ve"
adding new entry "ou=gquotas,ou=pykota,dc=me,dc=gob,dc=ve"
adding new entry "ou=lastjobs,ou=pykota,dc=me,dc=gob,dc=ve"
Con esto hemos integrado la aplicacin pykota con LDAP.

9.2- Archivos de Configuracin de Pykota


Creamos el usuario Pykota:
adduser --system --group --home /etc/pykota --gecos PyKota pykota
Aadimos el usuario pykota al grupo de impresin:
adduser lp pykota
Ahora debemos crear los archivos de configuracin de pykota. Para ello creamos el archivo
pykota.conf dentro del directorio /etc/pykota
vi /etc/pykota/pykota.conf
dentro del archivo copiamos el siguiente contenido:
[global]
config_charset : UTF-8
storageuserpw : readonlypw

storagebackend: ldapstorage
storageserver: ldap://127.0.0.1:389
storagename: dc=me,dc=gob,dc=ve
storageuser: cn=admin,dc=me,dc=gob,dc=ve
storageuserpw: admin
userbase: ou=Users,dc=me,dc=gob,dc=ve
userrdn: uid
balancebase: ou=Users,dc=me,dc=gob,dc=ve
balancerdn: uid
groupbase: ou=Groups,dc=me,dc=gob,dc=ve
grouprdn: cn
printerbase: ou=printers,ou=pykota,dc=me,dc=gob,dc=ve
printerrdn: cn
jobbase: ou=jobs,ou=pykota,dc=me,dc=gob,dc=ve
lastjobbase: ou=lastjobs,ou=pykota,dc=me,dc=gob,dc=ve
billingcodebase: ou=billingcodes,ou=pykota,dc=me,dc=gob,dc=ve
userquotabase: ou=uquotas,ou=pykota,dc=me,dc=gob,dc=ve
groupquotabase: ou=gquotas,ou=pykota,dc=me,dc=gob,dc=ve
newuser : attach(posixAccount, warn)
newgroup : attach(posixGroup, warn)
usermail : mail
groupmembers: memberUid
ldapcache: no
storagecaching: No
disablehistory: No
logger: system
debug : Yes
logourl : http://www.pykota.com/pykota.png
logolink : http://www.pykota.com/
smtpserver: 172.16.3.0
maildomain: me.gob.ve
usernamecase: native
privacy : no
onbackenderror : nocharge
directory : /var/spool/cups
keepfiles : no
accounter: software()
skipinitialwait : no
preaccounter: software()
onaccountererror: stop
admin: Operador
adminmail: operador@me.gob.ve
mailto : both
balancezero: 0.0
gracedelay : 7
poorman : 1.0
poorwarn : Your Print Quota account balance is low.Soon you'll not be allowed to print anymore.

softwarn: Usted esta proximo a alcanzar su limite de impresion


hardwarn: Usted a alcanzado su maxima cuota de impresion pongase en contacto con el
administrador o espere a que su cuota sea renovada
policy : external(pkusers --add --skipexisting --limitby noquota --description Added
automatically $PYKOTAUSERNAME && edpykota --add --skipexisting -- printer
$PYKOTAPRINTERNAME $PYKOTAUSERNAME)
policy: deny
maxdenybanners: 0
enforcement : strict
trustjobsize : yes
denyduplicates : no
duplicatesdelay : 0
noprintingmaxdelay : 60
statusstabilizationloops : 5
statusstabilizationdelay : 4.0
snmperrormask : 0x4FCC
Tenga especial cuidado cuando copie las lineas que estn resaltadas en negrita, ya que cuando
copiamos dentro del archivo tiende a separa la linea en varias lineas, en ese caso convertir las lineas
mltiples en una sola.
Guarde y salga del archivo.
Ahora creamos el archivo pykotadmin.conf dentro del directorio /etc/pykota
vi /etc/pykota/pykotadmin.conf
en el copiamos lo siguiente:
[global]
storagebackend: ldapstorage
storageserver: ldap://127.0.0.1:389
storagename: dc=me,dc=gob,dc=ve
storageadmin: cn=admin,dc=me,dc=gob,dc=ve
storageadminpw: admin
guardamos y salimos.
Posteriormente cambiamos el propietario a los archivos:
chow pykota:lp /etc/pykota/pykota*
Finalmente creamos un enlace simblico de cupspykota dentro de los backend de cups
cd /usr/lib/cups/backend
ln -s /usr/local/share/pykota/cupspykota cupspykota

chmod 755 /usr/local/share/pykota/cupspykota


chown root:lp /usr/local/share/pykota/cupspykota
Reiniciamos cups
/etc/init.d/cups restart
Con esto hemos finalizado.
Cuando queramos que pykota tome control sobre una impresora, primero debemos configurar la
impresora en cups, luego debemos agregar la impresora dentro la estructura ldap pykota, luego
debemos agregar a los usuarios los atributos de pykota, finalmente agregamos la cuota de impresin al
usuario sobre la impresora.
Para esto se han creado una serie de scripts que faciliten la tarea.
Cuando agreguemos la impresora en cups debemos colocar en el uri
cupspykota:socket://ip_impresora:9100
Para administrar el rbol ldap de manera cmoda puede descargar la ltima versin de la
aplicacin ldap account manager desde su pagina web.
https://www.ldap-account-manager.org/lamcms/