HOWTO CDP LDAP SAMBA

De Gentoo Linux Wiki

Este articulo es parte de las series de HOWTO.
Kernel & Hardware Red y Servicios Portage Relacionado con el Sistema Servidor X Juegos Misceláneos

Tabla de contenidos

[editar] Introducción

Un CDP es un Controlador de Dominio Primario (Primary Domain Controller en inglés). Prácticamente en lo que consiste un CDP es en un servidor único que llevará todo el control de la red interna que forme la empresa.
Un CDP puede variar en los servicios que ofrezca, aunque como mínimo siempre suelen ofrecer DHCP, un servidor de nombre (generalmente Bind), LDAP y Samba (para la compartición e interconectividad Windows<->Linux).
El CDP que se montará en nuestro caso contiene varias funcionalidades:

Las estudiadas en este artículo serán

  • Dhcpd con establecimiento automatico de dns e ip, y configuración de ip por MAC para los equipos más importantes. Se ofrece gracias a “dhcpd”.
  • Named, servicio de nombres para los equipos de la subred de la empresa, ofrece resolución DNS independiente y sistema de bitácora (si, log) independiente para cada acción. El servicio se ofrece mediante el servidor “bind”.
  • Ldap, directorio de usuarios de la empresa, donde se estructura las unidades organizativas de la compañía en torno a un único sistema que elimina la redundancia típica de un sistema de usuarios complejo. El servicio lo brinda slapd, provisto por el paquete openldap.

Además, se incluirá la herramienta phpldapadmin para la gestión de las cuentas de usuarios de LDAP.

  • Samba, que permite la interconexion de equipos Windows a la red interna, compartiendo recursos y permitiendo la autentificación en máquinas Windows con las mismas cuentas Ldap con las que se accede a Linux. Necesario mínimo Windows XP Professional, el Home no permite incorporarse a un dominio de este tipo.

Adicionalmente, el servidor ofrecerá

  • Ssh, un servicio mundialmente conocido e imprescindible (para el que no lo

sepa, permite el acceso remoto al equipo).

  • Subversion, repositorio de software desarrollado en la empresa.
  • Cups, sistema de impresión de UNIX.

Además, el servidor ofrecerá varios servicios web orientados a la gestión de la empresa:

  • Egroupware, sistema de gestión de la empresa, permitiendo la creación de calendarios compartidos, wikis, diagramas de Gantt etc.
  • GLPI, sistema de gestión del parque informático de la empresa.
  • Trac, sistema de desarrollo que usa como fondo el repositorio subversion.
  • Phpldapadmin, sistema para la gestión de la base de datos de LDAP

Pese a que pueda parecer mucho para un único ordenador, estos servicios para una empresa no excesivamente grande genera una carga de trabajo baja, en mi caso apenas llega al 5% de carga del sistema en hora punta ofreciendo todos estos servicios a la vez (el equipo es un Dell PowerEdge 1950).

El presente documento explicará como crear y configurar los servicios necesarios para un CDP básico, como se configuran para la interoperabilidad y como se configuran individualmente. Además explica como dar de alta un nuevo equipo, ya sea Windows o Linux en la red corporativa, como hacer que se autentifique contra el servidor ldap etc.

[editar] Instalando y configurando servicios básicos

La instalación de Gentoo se realizó a la manera tradicional usando el profile default-linux/x86/2006.1. La versión del kernel no importa, se compilo con genkernel sin ningúna opción especial. Se escogio el sistema operativo de en su versión de 32 bits (x86) en lugar de la versión para 64 (x86_64).


Archivo: /etc/portage/package.use
net-nds/openldap berkdb crypt gdbm -ipv6 kerberos perl \
  readline samba ssl tcpd
net-nds/smbldap-tools doc
net-dns/bind berkdb -ipv6 ldap -mysql ssl threads
dev-lang/php berkdb cli crypt gd gdbm iconv -ipv6 ldap \
  mysql nls pcre readline reflection session spl ssl \
  unicode zlib apache imap postgres sqlite truetype xml
net-www/apache apache2 ldap ssl threads
net-fs/samba cups ldap mysql pam python readline acl \
  automount kerberos syslog
dev-db/mysql berkdb perl ssl
www-apps/trac mysql cgi postgres silvercity vhosts
dev-util/subversion berkdb nls perl python zlib apache2 \
  java
net-misc/dhcp doc
net-misc/openssh X ldap pam tcpd
net-print/cups X dbus nls pam png ppds samba ssl
sys-auth/pam_ldap ssl
sys-devel/distcc -gnome -gtk -ipv6


[editar] Dhcp

Lo primero es instalar el servidor dhcp

Código: Consola
 # emerge dhcp 

El servidor dhcp es extremadamente sencillo, una vez instalado se creará el siguiente fichero de configuración:

Archivo: /etc/dhcp/dhcpd.conf
# dhcpd.conf
option domain-name "aplica.intra";
option domain-name-servers 192.168.0.1, 194.224.199.210;
# Vamos a enrutar el tráfico por el CDP.
option routers 192.168.0.1;
ddns-update-style interim;
default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.

subnet 192.168.0.0 netmask 255.255.0.0 {
  range 192.168.1.25 192.168.1.90;
}

host desarrollo { hardware ethernet 00:13:72:3b:ee:95; fixed-address 192.168.1.2; }
host validacion { hardware ethernet 00:14:22:22:ed:6e; fixed-address 192.168.1.3; }
host mr         { hardware ethernet 00:11:09:15:5a:af; fixed-address 192.168.1.6; }
host tr         { hardware ethernet 00:11:09:ba:5d:28; fixed-address 192.168.1.7; }

# Servidores de prueba
host install1 { hardware ethernet 00:11:09:ba:5e:ba; fixed-address 192.168.1.10; }
host install2 { hardware ethernet 00:11:09:3f:0a:ad; fixed-address 192.168.1.11; }
host dellprint { hardware ethernet 00:00:f0:a4:ac:1a; fixed-address 192.168.1.15; }

# Equipos personales
host rbioque_pc { hardware ethernet 00:11:09:aa:5e:a6; fixed-address 192.168.1.99; }
host pnavajas_pc { hardware ethernet 00:e0:7d:a4:f5:50; fixed-address 192.168.1.98; }

# Red de produccion
host produccion { hardware ethernet 00:14:22:23:14:B1; fixed-address 192.168.2.4; }
# ...

Una vez hecho esto, podremos hacer un

Código: Console
# /etc/init.d/dhcpd restart 
* Stopping dhcpd ...                                                     [ ok ]
* Starting dhcpd ...                                                     [ ok ]
# rc-update add dhcpd default
* dhcpd added to runlevel default
# tail -f /var/log/messages

y, si tenemos algun syslogger funcionando, podremos ver como nos llegan las peticiones dhcp.

[editar] Bind

El servidor de nombres permite a la empresa acceder a ciertos recursos de manera más cómoda. Cuando se trata de una empresa de desarrollo con varios servidores, impresoras, routers etc. la creación de un servidor de nombres se convierte en algo obligatorio.
En nuestro caso se usará bind, como ya se indico antes

Código: Console
 # emerge bind 

Para la configuración, nos iremos al directorio /etc/bind/ donde se encuentran tanto los archivos de configuración como los archivos que contienen los dominios de las zonas a crear.
El primer fichero a editar es el /etc/bind/named.conf, en nuestro caso se quedo de la siguiente forma:

Archivo: /etc/bind/named.conf
options {
        directory "/var/bind";
        statistics-file "/var/bind/bind.stats";
        pid-file "/var/bind/bind.pid";
        allow-recursion { 192.168.0.0/16; };
        transfer-format many-answers;
        listen-on { 192.168.0.1; };
};

logging {
        channel default_file { 
	file "/var/log/bind/default.log" versions 3 size 5m; severity dynamic; print-time yes; };
        channel general_file { 
	file "/var/log/bind/general.log" versions 3 size 5m; severity dynamic; print-time yes; };
        channel network_file { 
	file "/var/log/bind/network.log" versions 3 size 5m; severity dynamic; print-time yes; };
        channel queries_file { 
	file "/var/log/bind/queries.log" versions 3 size 5m; severity dynamic; print-time yes; };
        channel resolver_file { 
	file "/var/log/bind/resolver.log" versions 3 size 5m; severity dynamic; print-time yes; };
        channel unmatched_file { 
	file "/var/log/bind/unmatched.log" versions 3 size 5m; severity dynamic; print-time yes; };
        channel client_file { 
	file "/var/log/bind/client.log" versions 3 size 5m; severity dynamic; print-time yes; };
        channel notify_file { 
	file "/var/log/bind/notify.log" versions 3 size 5m; severity dynamic; print-time yes; };

        category default { default_file; };
        category general { general_file; };
        category network { network_file; };
        category queries { queries_file; };
        category resolver { resolver_file; };
        category unmatched { unmatched_file; };
        category client { client_file; };
        category notify { notify_file; };
};

acl "cosa-nostra" {
        192.168.0.0/16;
};

zone "." { 
   type hint; file "named.ca"; };
zone "aplica.intra" { 
   type master; file "pri/aplica.intra.zone"; };
zone "0.168.192.in-addr.arpa" { 
   type master; file pri/192.168.0.zone"; };
zone "1.168.192.in-addr.arpa" { 
   type master; file "pri/192.168.1.zone"; };
zone "2.168.192.in-addr.arpa" { 
   type master; file "pri/192.168.2.zone"; };

En ese fichero hay varios puntos importantes. Al inicio del fichero hay varias directivas de configuración generales dentro de options, en logging se establecen los ficheros de bitácora para cada acción del bind. ACL es una lista de control de accesos, en una red simple no debe ser necesario. A partir de ahi comienzan las zonas.

[editar] Zona "."

En este fichero hay cuatro zonas, dos directas y dos inversas. La primera es "." y equivaldria a localhost, hace referencia a named.ca

Archivo: /etc/bind/named.ca
; <<>> DiG 9.3.2 <<>> @a.root-servers.net
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52726
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       518400  IN      NS      G.ROOT-SERVERS.NET.
.                       518400  IN      NS      F.ROOT-SERVERS.NET.
.                       518400  IN      NS      B.ROOT-SERVERS.NET.
.                       518400  IN      NS      J.ROOT-SERVERS.NET.
.                       518400  IN      NS      K.ROOT-SERVERS.NET.
.                       518400  IN      NS      L.ROOT-SERVERS.NET.
.                       518400  IN      NS      M.ROOT-SERVERS.NET.
.                       518400  IN      NS      I.ROOT-SERVERS.NET.
.                       518400  IN      NS      E.ROOT-SERVERS.NET.
.                       518400  IN      NS      D.ROOT-SERVERS.NET.
.                       518400  IN      NS      A.ROOT-SERVERS.NET.
.                       518400  IN      NS      H.ROOT-SERVERS.NET.
.                       518400  IN      NS      C.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
G.ROOT-SERVERS.NET.     3600000 IN      A       192.112.36.4
F.ROOT-SERVERS.NET.     3600000 IN      A       192.5.5.241
B.ROOT-SERVERS.NET.     3600000 IN      A       192.228.79.201
J.ROOT-SERVERS.NET.     3600000 IN      A       192.58.128.30
K.ROOT-SERVERS.NET.     3600000 IN      A       193.0.14.129
L.ROOT-SERVERS.NET.     3600000 IN      A       198.32.64.12
M.ROOT-SERVERS.NET.     3600000 IN      A       202.12.27.33
I.ROOT-SERVERS.NET.     3600000 IN      A       192.36.148.17
E.ROOT-SERVERS.NET.     3600000 IN      A       192.203.230.10
D.ROOT-SERVERS.NET.     3600000 IN      A       128.8.10.90
A.ROOT-SERVERS.NET.     3600000 IN      A       198.41.0.4
H.ROOT-SERVERS.NET.     3600000 IN      A       128.63.2.53
C.ROOT-SERVERS.NET.     3600000 IN      A       192.33.4.12

;; Query time: 122 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Tue Dec 19 12:46:15 2006
;; MSG SIZE  rcvd: 436

que es la salida del comando

Código: Console
# dig @a.root-servers.net

y que lo único que hace es darnos independencia con respecto a un DNS externo.

[editar] Zonas "x.168.192.in-addr.arpa"

Estas zonas son las zonas de resolución inversa para cada una de las tres subredes en las que, en un principio, se dividirá nuestra red. Si no sabes que significa una zona de resolución inversa, leete este documento) el fichero al que referencia es el siguiente:

Archivo: /etc/bind/pri/19
$TTL 3D

@               IN      SOA     aplica.intra. root.aplica.intra. (
                                        2002081604 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        604800     ; Expire - 1 week
                                        86400 )    ; Minimum
                IN      NS      gustavo.aplica.intra.

; Subred de la oficina
2               IN      PTR     desarrollo.aplica.intra.
3               IN      PTR     validacion.aplica.intra.
5               IN      PTR     demo.aplica.intra
6               IN      PTR     mr.aplica.intra.
...

[editar] Zona "aplica.intra"

Aquí se referencian todas las ips y los nombres que se les desea dar a cada una de ellas, una maquina con varios alias puede definirse una sola vez.

Archivo: /etc/bind/pri/aplica.intra.zone
$TTL 3D
aplica.intra. IN        SOA     aplica.intra. root.aplica.intra. (
                                27
                                1D
                                30M
                                1W
                                1D )
                                NS      aplica.intra.
                                TXT     "Aplica Corp."

localhost                       A       127.0.0.1

; Servidores oficiales
desarrollo                      A       192.168.1.2
validacion                      A       192.168.1.3
produccion                      A       192.168.2.4
demo                            A       192.168.1.5
mr                              A       192.168.1.6
tr                              A       192.168.1.7
install                         A       192.168.1.8

; Servidores de prueba
install1                        A       192.168.1.10
install2                        A       192.168.1.11
dellprint                       A       192.168.1.15
printserver                     A       192.168.1.16

; Servicios ofrecidos
gestion                         CNAME   gustavo.aplica.intra.
dev                             CNAME   gustavo.aplica.intra.
svn                             CNAME   gustavo.aplica.intra.
glpi                            CNAME   gustavo.aplica.intra.
maven                           CNAME   gustavo.aplica.intra.
ldap                            CNAME   gustavo.aplica.intra.
ldapadmin                       CNAME   gustavo.aplica.intra.
rsync                           CNAME   gustavo.aplica.intra.
ftp                             CNAME   gustavo.aplica.intra.
schemas                         CNAME   gustavo.aplica.intra.

; Servidores "especiales"
gustavo                         A       192.168.1.1

; Servidores extranjeros a los que accedemos
empresa1                        A       212.3.113.37
empresa2                        A       213.63.73.63

Podemos ver que la misma IP (la máquina que estamos instalando) será referenciada con varios nombres (gestion, dev, svn, glpi), más adelante se procederá a la instalación y configuración de múltiples servidores virtuales con apache y se explicará el motivo de esta redundancia.

[editar] Fin de la configuración e inicio del servidor

Una vez que las zonas están creadas correctamente, se prepara el servicio para que se ejecute al arranque y se inicia

Código: Console
# /etc/init.d/named restart
* Stopping named ...                                                     [ ok ]
* Starting named ...                                                     [ ok ]
# rc-update add named default
* named added to runlevel default

[editar] Servidor Ldap

Se usa Ldap para mantener el sistema de usuarios de la empresa. Ldap contiene actualmente directorios para los usuarios, las máquinas y varios grupos, y esta integrado con varios servidores de la misma máquina. En esta sección se explica como configurar Ldap sin SSL, más adelante se explicará la integración de los distintos servidores con Ldap.

Para instalar Ldap, bastará con hacerle un emerge, al igual que en las demás ocasiones

Código: Console
# emerge openldap

Los ficheros de configuración de Ldap estan en /etc/openldap bajo Gentoo, el primer fichero que hemos de editar es el /etc/openldap/ldap.conf, que se define la conexión con el servidor Ldap:

Archivo: /etc/openldap/ldap.conf
#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

BASE    dc=aplica, dc=intra
URI     ldap://ldap.aplica.intra:389/

El fichero más importante de configuración de Ldap es el /etc/openldap/slapd.conf, a continuación se mostrará el fichero usado en Aplica a modo de ejemplo y se realizará una breve descripción del mismo:

Archivo: /etc/openldap/slapd.conf
# Esquemas a incluir
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/samba.schema
include         /var/www/localhost/htdocs/egroupware/phpgwapi/doc/ldap/phpgwaccount.schema
include         /var/www/localhost/htdocs/egroupware/phpgwapi/doc/ldap/phpgwcontact.schema
# A mi me gusta el md5
password-hash {md5}

# Cosas varias
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args
loglevel        256

#######################################################################
# BDB database definitions
#######################################################################
database        ldbm
suffix          "dc=aplica,dc=intra"
rootdn          "cn=root,dc=aplica,dc=intra"
rootpw          {MD5}X4hSbaUMedtyH5nSqRCBRQ==
checkpoint      32      30 # <kbyte> <min>
directory       /var/lib/openldap-data

# Indices to maintain
        index   sambaSID                                        eq
        index   sambaPrimaryGroupSID                            eq
        index   sambaDomainName                                 eq
        index   objectClass,uid,uidNumber,gidNumber,memberUid   eq
        index   cn,mail,surname,givenname                       eq,subinitial
        index   default                                         eq
        index   phpgwContactOwner                               pres,eq,sub

#######################################################################
# Politica de control de accesos
#######################################################################
# Un usuario autentificado debe poder cambiar su propia contraseña,
# un usuario anonimo debe poder identificarse y un usuario del grupo
# LDAPaccess debe ver las contraseñas de los demas. El resto de gente nada
#
access  to attrs=userPassword
          by self               write
          by anonymous          auth
          by *                  none

# SAMBA
access to attrs=userPassword,sambaLMPassword,sambaNTPassword
        by self write
        by anonymous auth
        by * none

# Un usuario puede modificar su entrada, los demas leen
access to *
        by self write
        by * read

Este fichero se organiza en varias secciones, la primera de ellas sirve para incluir esquemas que se usaran posteriormente, en nuestro caso los esquemas estándares para una empresa y los específicos para su uso con samba y egroupware. A continuación se realizan algunos ajustes generales y se procede a la definición de la base de datos que empleará LDAP, donde se definirá la base, el usuario administrador etc. Por último se crea el listado de indices a mantener y los ACL's o listas de control de acceso (esta es la parte mas larga).

Una vez creado este fichero y configurado al gusto del consumidor (notese que no se usó cifrado SSL puesto que no se consideró necesario), ya solo falta editar el fichero de configuración del script de arranque

Archivo: /etc/conf.d/slapd
# conf.d file for openldap
#
# Uncomment the below to use the new slapd configuration for openldap 2.3
OPTS="-h 'ldaps:// ldap:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

y preparamos el demon para que se levante al inicio (y ya de paso lo arrancamos ahora):

Código: Console
# /etc/init.d/slapd start
 * Starting ldap-server ...                                               [ ok ]
# rc-update add slapd default
 * slapd added to runlevel default

[editar] Samba

Para el correcto funcionamiento de samba y una adecuada integración con Ldap, necesitaremos instalar samba y smbldap-tools

Código: Console
# emerge samba smbldap-tools

Una vez instalado, comenzaremos con la edición de los ficheros de configuración necesarios, empezaremos por samba:

Archivo: /etc/samba/smb.conf
[global]
        # Definiciones
        netbios name = SAMBA
        workgroup = APLICA
        server string = Servidor centralizado
        # Seguridad
        security = user
        enable privileges = yes
        interfaces = eth0
#       bind interfaces = yes
        encrypt passwords = yes
        # Servidor
        local master = yes
        os level = 65
        domain master = yes
        preferred master = yes
        # Acceso
        null passwords = yes
        # Vistas
        hide unreadable = yes
        hide dot files = yes
        browseable = yes
        # Sirve a Windows
        domain logons = yes
        logon script = login.bat  OR %U.bat
        logon path = \\%L\profiles\%U
        logon drive = H:
        logon home = \\%L\%U\.9xprofile
        time server = yes
        # Impresion
        printcap name = cups
        printing = cups
        show add printer wizard = no
        # Soporte a Wins
        wins support = yes
        name resolve order = wins lmhosts host bcast
        dns proxy = no
        # Configuracion adicional
        log file = /var/log/samba/log.%m
        max log size = 50
        unix charset = ISO8859-1
        dos charset = 850
        # LDAP
        add user script = /usr/sbin/smbldap-useradd -m "%u"
        add machine script = /usr/sbin/smbldap-useradd -w "%u"
        add group script = /usr/sbin/smbldap-groupadd -p "%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"
        passdb backend = ldapsam:ldap://eldominio.aplica.intra/
        ldap delete dn = Yes
        ldap ssl = no
        ldap suffix = dc=aplica,dc=intra
        ldap admin dn = cn=root,dc=aplica,dc=intra
        ldap group suffix = ou=Groups
        ldap user suffix = ou=People
        ldap machine suffix = ou=Computers
        ldap idmap suffix = ou=People
        ldap passwd sync = yes

[netlogon]
        path = /var/lib/samba/netlogon
        guest ok = Yes
        browseable = no
        write list = root
[profiles]
        path = /var/lib//samba/profiles
        writable = yes
        browsable = no
        create mode = 0644
        directory mode = 0755
        guest ok = yes
[homes]
        path = /home/%U
        browseable = no
        valid users = %S
        read only = no
        create mask = 0664
        directory mask = 0775
[documentos]
        comment = documentos
        path = /home/shared/documentos
        public = yes
        read only = yes
        browseable = yes
        write list = "@Domain Users"
[audiovisuales]
        comment = Ficheros multimedia
        path = /home/shared/biblioteca
        public = yes
        read only = yes
        browseable = yes
        write list = "@Domain Users"
[printers]
        comment = Impresoras
        path = /var/spool/samba
        guest ok = Yes
        printable = Yes
        use client driver = no
        browseable = Yes
        public = Yes
        printer name = 1600n_192.168.1.15
        printer name = HPColorJet
[print$]
        path = /var/lib/samba/printers
        browseable = yes
        guest ok = yes
        read only = yes
        public = Yes
[pdf-generator]
        comment = Generador de PDF
        path = /var/tmp
        printable = Yes
        print command = /usr/share/samba/scripts/print-pdf %s ~%u \\\\\\\\%L\\\\%u %m %I &

Este fichero es largo así que iremos poco a poco.
La mayoría de opciones son autoexplicativas, aunque algunas si conviene conocerlas. Dentro de la configuración global, domain logons configura Samba para aceptar accesos por dominios actuando como PDC, junto a esta opción se ha de añadir la categoría [netlogon] dentro del fichero de configuración y con eso las máquinas Windows serán capaces de autentificarse contra Samba.

Atención: Domain logons funciona con security = user

Ahora solo falta el método de autentificación, que en nuestro caso se realizará a través de Ldap, las directivas despues del comentario que abre la sección Ldap de la configuración global indicán los programas a ejecutarse para permitir la intercomunicación samba<->ldap (mediante smbldap-tools, que se verán posteriormente) y los sufijos en los que se encuentran los grupos y usuarios de la empresa.
El resto de la configuración más o menos se entiende, una vez lo tengamos cada uno personalizado a nuestro gusto, basta con arrancarlo y añadirlo al inicio:

Código: Console
# /etc/init.d/samba start  
* samba -> start: smbd ...                                                [ ok ] 
* samba -> start: nmbd ...                                                [ ok ]    
# rc-update add samba default
* samba added to runlevel default

[editar] Smbldap-tools

Tras instalar smbldap-tools con el típico

Código: Console
 # emerge smbldap-tools 

Deberemos irnos al directorio /etc/smbldap-tools para configurarlo. El primer fichero a editar es el /etc/smbldap-tools/smbldap_bind.conf donde indicaremos el servidor y principal usuario (así como contraseña) del servidor Ldap para permitir conexiones posteriores

Archivo: /etc/smbldap-tools/smbldap_bind.conf
############################
# Credential Configuration #
############################
# Notes: you can specify two differents configuration if you use a
# master ldap for writing access and a slave ldap server for reading access
# By default, we will use the same DN (so it will work for standard Samba
# release)
slaveDN="cn=root,dc=aplica,dc=intra"
slavePw="pwdinventada1"
masterDN="cn=root,dc=aplica,dc=intra"
masterPw="pwdinventada1"

El siguiente fichero guarda la parte de configuración de los scripts de smbldap-tools

Archivo: /etc/smbldap-tools/smbldap.conf
##############################################################################
#
# General Configuration
#
##############################################################################

# 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-1445362322-1682322293-238168389"

sambaDomain="aplica"

##############################################################################
#
# LDAP Configuration
#
##############################################################################

slaveLDAP="ldap.aplica.intra"
slavePort="389"
masterLDAP="ldap.aplica.intra"
masterPort="389"

hash_encrypt="MD5"
ldapTLS="0"
verify="none"

suffix="dc=aplica,dc=intra"
usersdn="ou=Users,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=aplica,${suffix}"
scope="sub"

crypt_salt_format="%s"
##############################################################################
#
# Unix Accounts Configuration
#
##############################################################################

userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="45"
##############################################################################
#
# SAMBA Configuration
#
##############################################################################

userSmbHome="\\SAMBA\%U"
userProfile="\\SAMBA\profiles\%U"

userHomeDrive="H:"

mailDomain="aplicatec.com"
##############################################################################
#
# SMBLDAP-TOOLS Configuration (default are ok for a RedHat)
#
##############################################################################

with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"

with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"

# comment out the following line to get rid of the default banner
# no_banner="1"

Ya hemos configurado el smbldap-tools, ahora es necesario crear cuentas y grupos que permitan autentificarse bajo Samba dentro de Ldap, para eso primero estableceremos la clave de administrador de ldap y luego usaremos los scripts provistos por smbldap-tools

Código: Console
# echo "pwdinventada1" `slappasswd -h {MD5}` >> /etc/openldap/slapd.conf
# smbpasswd -w pwdinventada1
Setting stored password for "cn=root,dc=aplica,dc=intra" in secrets.tdb 

Samba will store this datas in /etc/samba/secrets.tbd.

y reiniciamos el ldap y samba

Código: Console
# /etc/init.d/slapd restart
* Stopping ldap-server ...                                               [ ok ] 
* Starting ldap-server ...                                               [ ok ]
# /etc/init.d/samba start
* samba -> start: smbd ...                                               [ ok ] 
* samba -> start: nmbd ...                                               [ ok ]

con esto, ya estamos listos para comenzar la generación de usuarios ldap:

Código: Console
# smbldap-populate
Populating LDAP directory for domain APLICA (S-1-5-21-1445362322-1682322293-238168389)
(using builtin directory structure)
adding new entry: dc=aplica,dc=intra
adding new entry: ou=Users,dc=aplica,dc=intra
adding new entry: ou=Groups,dc=aplica,dc=intra
adding new entry: ou=Computers,dc=aplica,dc=intra
adding new entry: uid=root,ou=Users,dc=aplica,dc=intra
adding new entry: uid=nobody,ou=Users,dc=aplica,dc=intra
adding new entry: cn=Domain Admins,ou=Groups,dc=aplica,dc=intra
adding new entry: cn=Domain Users,ou=Groups,dc=aplica,dc=intra
adding new entry: cn=Domain Guests,ou=Groups,dc=aplica,dc=intra
adding new entry: cn=Domain Computers,ou=Groups,dc=aplica,dc=intra
adding new entry: cn=Administrators,ou=Groups,dc=aplica,dc=intra
adding new entry: cn=Account Operators,ou=Groups,dc=aplica,dc=intra
adding new entry: cn=Print Operators,ou=Groups,dc=aplica,dc=intra
adding new entry: cn=Backup Operators,ou=Groups,dc=aplica,dc=intra
adding new entry: cn=Replicators,ou=Groups,dc=aplica,dc=intra
adding new entry: sambaDomainName=APLICA,dc=aplica,dc=intra
Please provide a password for the domain root:
Changing password for root
New password :
Retype new password :


Explicación: Pero... ¿qué hemos hecho hasta ahora?
 
Antes de seguir metiendo ficheros de configuración y paquetes a lo loco, vamos a detenernos para ver
que hemos hecho, ya que esto nos ayudará a comprender que es lo que vamos a hacer a partir de ahora.
Tras configurar las USE que usaremos para compilar e instalar los paquetes, se comenzó por el servidor
DHCP, este servidor ofrecerá IP a todo equipo de la subred que la pida, además nos permitirá dar IP's
fijas a ciertos equipos filtrandolos por sus direcciones MAC, esto es útil ya que nos permite controlar
las IP's asignadas a los equipos desde el propio servidor, sin tener que configurar equipo por equipo
su IP.
El siguiente paso es el servidor DNS de la empresa, gracias al cual podremos designar nombres para
los equipos o máquinas según su funcionalidad dentro de la empresa. De esa forma al servidor
de subversion lo llamaremos svn.aplica.intra, a la impresora dellprint.aplica.intra y asi con todo,
consiguiendo una interfaz de red mas "amena y humana" por decirlo de alguna forma.
A partir de aquí empieza el verdadero trabajo de centralización, lo primero es crear un esquema jerárquico
de usuarios dentro de LDAP, para comenzar a dar usuarios y máquinas de alta dentro de la organización.
El esquema seguido es:
                intra                     (dc: dominio)
                  |
                aplica                    (dc: organización)
          -------------------
         |         |         | 
      Groups   Computers   Users          (ou: Unidades organizativas)
      |                        |
Domain Users...             Pepito...     (de aqui puede colgar datos especificos de una UO)
 
Es decir, cuando se contrate a un nuevo empleado de la empresa, se le creará una cuenta dentro
 de "Domain Users", se creará una cuenta dentro de "Domain Computers" para su pc, y se colocará 
el usuario en los grupos adicionales necesarios dependiendo de su cargo.
"Domain Users" y "Domain Computers" son grupos del Samba, cuando un usuario de Windows vaya a 
entrar en la red, si en Sistema (dentro del panel de control) le damos a cambiar el dominio
y le ponemos en el dominio de APLICA (fijense en la entrada que crea smbldap-populate que dice
adding new entry: sambaDomainName=APLICA,dc=aplica,dc=intra ya que es la que especifica el dominio)
nos pedira la contraseña de administrador de ldap del servidor, y al introducirla automáticamente
dará de alta el equipo en Domain Computers, y prepara el equipo para identificarse contra el servidor.

Algunas cosas no tienen aun razón de ser, como el hecho de poner "@Domain Users" en el acceso a un disco
compartido con Samba (la "@" indica que es un grupo) ya que este grupo aun no es reconocido por el
sistema de identificación del servidor, este será el siguiente paso.
 

[editar] Gestionando Ldap + Samba en los equipos

Ahora que tenemos configurado correctamente el servidor, vamos a indicarle a un equipo de la subred que debe autentificarse de ahora en adelante mediante LDAP (por supuesto sin quitar la autentificación local, ya que el servidor puede caerse y se denegaría el acceso total a las máquinas). Lo primero es instalar el soporte LDAP para el pam y el nss

Código: Console
# emerge pam_ldap nss_ldap -pv

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   N   ] sys-auth/pam_ldap-183  USE="ssl -sasl" 0 kB 
[ebuild   N   ] sys-auth/nss_ldap-253  USE="-debug -sasl" 0 kB 

y a continuación procedemos a configurarlo.

Hay tres archivos básicos para la autentificación contra el servidor, éstos ficheros y las configuraciones que deben tener son:


Archivo: /etc/ldap.conf
host ldap.aplica.intra
base dc=aplica,dc=intra
bind_policy soft

Que es un indicador de la conexión al servidor Ldap, la directiva bind_policy sirve para indicar que la conexión debe intentarla una vez y en caso de fracasar, no volver a intentarlo, algo necesario para que no tarde demasiado cada equipo cuando arranque y, antes de tener conexión a red, intentar acceder al servicio LDAP.


Archivo: /etc/nsswitch.ldap
passwd: files ldap
group: files ldap
hosts: files dns ldap

services:   ldap [NOTFOUND=return] files
networks:   ldap [NOTFOUND=return] files
protocols:  ldap [NOTFOUND=return] files
rpc:        ldap [NOTFOUND=return] files
ethers:     ldap [NOTFOUND=return] files

Lo demás puede dejarse como está. Este fichero establece el órden de búsqueda para cada parámetro.


Archivo: /etc/system.auth
#%PAM-1.0

auth       required     pam_env.so
auth       sufficient   pam_unix.so likeauth nullok
auth       sufficient   pam_ldap.so use_first_pass
auth       required     pam_deny.so

account    required     pam_unix.so
#account    sufficient   pam_localuser.so
account    sufficient   pam_ldap.so

password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password   sufficient   pam_unix.so nullok md5 shadow use_authtok
password   sufficient   pam_ldap.so use_authtok
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so
session    optional     pam_ldap.so
session    required     pam_mkhomedir.so skel=/etc/skel/ umask=0022

Este fichero, nombrado como common-auth en varios sistemas, establece las directrices de autentificación del sistema, una vez instalado el módulo de LDAP del PAM, se ha de activar para el registro, la clave y la sesión.

[editar] Creación de un usuario

Para crear un usuario y darlo de alta, se debera usar el comando smbldap-useradd

Código: Console
 # smbldap-useradd -a -m -P -N "Pepito" -S "Gonzalez" -M pepito@correo.es 

[editar] Instalación de cups

Como paso adicional, instalaremos el sistema cups configurado con soporte samba para permitir la gestión de impresoras. Para instalarlo bastará con el típico

Código: Console
 # emerge cups 
Una vez instalado bastará con acceder a
http://localhost:631
y dar de alta alguna impresora, que posteriormente colocaremos en el fichero smb.conf para indicarle a samba que debe compartir esa impresora, las impresoras a compartir irán al final de la sección [printers] y seguirán el formato:
Archivo: /etc/samba/smb.conf
[printers]
        ...
        printer name = 1600n_192.168.1.15
        printer name = HPColorJet

[editar] Gestión de Ldap

Para gestionar los usuarios, añadirlos a algún grupo o cambiarle algun parámetro, lo recomendable (o lo que yo recomiendo más bien) es instalarse alguna aplicación de gestión de Ldap. Yo he probado varias y personalmente recomiendo Luma y Jxplorer (cuidado con Lat, una vez me inutilizó todos los registro que modifiqué usándolo) pero me quedo con phpldapadmin.

Tras instalar el paquete con

Código: Console
 # emerge phpldapadmin 
bastará con asignarle un dominio (recordad que en nuestro caso existe el dominio ldapadmin) para poder acceder al servicio desde
http://ldapadmin.aplica.intra
.

[editar] Copia de seguridad de Ldap

Como nota adicional, indicar que en el caso de que se deseé guardar una copia de seguridad de todo el árbol de Ldap, puede hacerse mediante los comandos slapcat y ldapsearch , por ejemplo el comando

Código: Console
 # ldapsearch -L > everybody.ldif 

almacenará todos los contactos en formato ldif en el fichero everybody.ldif.

Herramientas personales