PAM, NIS, LDAP, Kerberos, DS y Samba 4 AD-DC – Redes PYMES

4
2927

Índice general de la serie: Redes de Computadoras para las PYMES: Introducción

¡Hola amigas y amigos!


Con éste artículo digo Adiós a la Comunidad DesdeLinux. Una especial despedida para una Especial Comunidad. Desde ahora estaré en mi proyecto personal el cual puedes conocer en http://www.gigainside.com.

El objetivo fundamental del post es ofrecer un “Big Picture” sobre los Servicios de Autenticación con Software Libre que tenemos a nuestra disposición. Al menos esa es nuestra intención. Por tanto será largo, a pesar de que conocemos va contra las normas generales de redacción de artículos. Esperamos que los Administradores de Sistemas lo agradezcan.

Queremos puntualizar que el protocolo común a muchos de los sistemas de autenticación modernos es el LDAP, y que no es ocioso estudiarlo con detenimiento, a partir del material de estudio que encontraremos en sitio oficial http://www.openldap.org/.

No daremos definiciones detalladas -ni enlaces- sobre aspectos tratados en artículos anteriores, o sobre aquellos cuya descripción puede ser fácilmente accesible en la Wikipedia u otros sitios o artículos en Internet, para no perder la objetividad del mensaje que queremos dar. También emplearemos una mezcla válida de nombres en inglés y en español, pues consideramos que la mayoría de los sistemas nacieron con nombres en inglés y es muy beneficioso para un Sysadmin que los asimile en su idioma original.

  • PAM: Pluggable Authentication Module.
  • NIS: Network_Information_Service.
  • LDAP: Lightweight Directory Access Protocol.
  • Kerberos: Protocolo de seguridad para autenticar a usuarios, equipos y servicios de forma centralizada en una red, verificando sus credenciales contra las entradas existentes en la base de datos de Kerberos.
  • DS: Directory Server o Directory Service
  • AD-DC: Active Directory – Domain Controler

Índice

PAM

Dedicamos una pequeña serie a éste tipo de autenticación local, la cual comprobarán en la práctica diaria que se utiliza ampliamente cuando, por ejemplo, unimos una estación de trabajo a un Controlador de Dominio o a un Directorio Activo; para mapear usuarios almacenados en bases de datos LDAP externas como si fueran usuarios locales; para mapear usuarios almacenados en el Controlador de Dominio de un Directorio Activo como si fueran usuarios locales, etcétera.

NIS

De Wikipedia:

  • Network Information System (conocido por su acrónimo NIS, que en español significa Sistema de Información de Red), es el nombre de un protocolo de servicios de directorios cliente-servidor desarrollado por Sun Microsystems para el envío de datos de configuración en sistemas distribuidos tales como nombres de usuarios y hosts entre computadoras sobre una red.NIS está basado en ONC RPC, y consta de un servidor, una biblioteca de la parte cliente, y varias herramientas de administración.

    Originalmente NIS se llamaba Páginas Amarillas (Yellow Pages), o YP, que todavía se utiliza para referirse a él. Desafortunadamente, ese nombre es una marca registrada de British Telecom, que exigió a Sun abandonar ese nombre. Sin embargo YP permanece como prefijo en los nombres de la mayoría de las órdenes relacionadas con NIS, como ypserv e ypbind.

    DNS sirve un rango limitado de información, siendo la más importante la correspondencia entre el nombre de nodo y la dirección IP. Para otros tipos de información, no existe un servicio especializado así. Por otra parte, si sólo se administra una pequeña LAN sin conectividad a Internet, no parece que merezca la pena configurar DNS. Ésta es la razón por la que Sun desarrolló el Sistema de Información de Red (NIS). NIS proporciona prestaciones de acceso a bases de datos genéricas que pueden utilizarse para distribuir, por ejemplo, la información contenida en los ficheros passwd y groups a todos los nodos de su red. Esto hace que la red parezca un sistema individual, con las mismas cuentas en todos los nodos. De manera similar, se puede usar NIS para distribuir la información de nombres de nodo contenida en /etc/hosts a todas las máquinas de la red.

    Hoy NIS está disponible prácticamente en todos las distribuciones de Unix, e incluso existen implementaciones libres. BSD Net-2 publicó una que ha sido derivada de una implementación de referencia de dominio público donada por Sun. El código de la biblioteca de la parte cliente de esta versión existe en la libc de GNU/Linux desde hace mucho tiempo, y los programas de administración fueron portados a GNU/Linux por Swen Thümmler.  Sin embargo, falta un servidor NIS a partir de la implementación de referencia.

    Peter Eriksson ha desarrollado una implementación nueva llamada NYS. Soporta tanto NIS básico como la versión mejorada de Sun NIS+.[1] NYS no sólo proporciona una serie de herramientas NIS y un servidor, sino que también añade un completo juego nuevo de funciones de biblioteca que necesita compilar en su libc si quiere utilizarlas. Esto incluye un esquema nuevo de configuración para la resolución de nombres de nodo que sustituye al esquema actual que usa el fichero “host.conf”.

    La libc de GNU, conocida como libc6 en la comunidad GNU/Linux, incluye una versión actualizada del soporte de NIS tradicional desarrollado por Thorsten Kukuk. Soporta todas las funciones de biblioteca que proporcionaba NYS, y también utiliza el esquema avanzado de configuración de NYS. Todavía se necesitan las herramientas y el servidor, pero utilizando la libc de GNU se ahorra el trabajo de tener que parchear y recompilar la biblioteca

    .

Nombre de equipo y dominio, interfaz de red y resolver

  • Partimos de una instalación limpia -sin interfaz gráfica- de un Debian 8 “Jessie”. El dominio swl.fan significa “Fans del Software Libre”. ¿Qué mejor nombre que éste?.
root@master:~# hostname
master
root@master:~# hostname -f
master.swl.fan

root@master:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:4c:76:d9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.5/24 brd 192.168.10.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe4c:76d9/64 scope link 
       valid_lft forever preferred_lft forever

root@master:~# cat /etc/resolv.conf 
search swl.fan
nameserver 127.0.0.1

Instalación de bind9, isc-dhcp-server y ntp

bind9

root@master:~# aptitude install bind9 bind9-doc nmap
root@master:~# systemctl status bind9

root@master:~# nano /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

root@master:~# cp /etc/bind/named.conf.options \
/etc/bind/named.conf.options.original

root@master:~# nano /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        //=====================================================================$
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //=====================================================================$

        // No queremos DNSSEC
        dnssec-enable no;
        //dnssec-validation auto;
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
        // Para comprobaciones desde el localhost y sysadmin
        // mediante dig swl.fan axfr
        // No tenemos DNS Esclavos... hasta ahora
        allow-transfer { localhost; 192.168.10.1; };
};

root@master:~# named-checkconf

root@master:~# nano /etc/bind/zones.rfcFreeBSD
// Shared Address Space (RFC 6598)
zone "64.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "65.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "66.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "67.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "68.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "69.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "70.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "71.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "72.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "73.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "74.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "75.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "76.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "77.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "78.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "79.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "80.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "81.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "82.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "83.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "84.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "85.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "86.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "87.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "88.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "89.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "90.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "91.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "92.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "93.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "94.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "95.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "96.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "97.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "98.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "99.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "100.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "101.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "102.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "103.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "104.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "105.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "106.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "107.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "108.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "109.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "110.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "111.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "112.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "113.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "114.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "115.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "116.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "117.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "118.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "119.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "120.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "121.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "122.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "123.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "124.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "125.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "126.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "127.100.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// Link-local/APIPA (RFCs 3927, 5735 and 6303)
zone "254.169.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// IETF protocol assignments (RFCs 5735 and 5736)
zone "0.0.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// TEST-NET-[1-3] for Documentation (RFCs 5735, 5737 and 6303)
zone "2.0.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "100.51.198.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "113.0.203.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// IPv6 Example Range for Documentation (RFCs 3849 and 6303)
zone "8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/bind/db.empty"; };

// Domain Names for Documentation and Testing (BCP 32)
zone "test" { type master; file "/etc/bind/db.empty"; };
zone "example" { type master; file "/etc/bind/db.empty"; };
zone "invalid" { type master; file "/etc/bind/db.empty"; };
zone "example.com" { type master; file "/etc/bind/db.empty"; };
zone "example.net" { type master; file "/etc/bind/db.empty"; };
zone "example.org" { type master; file "/etc/bind/db.empty"; };

// Router Benchmark Testing (RFCs 2544 and 5735)
zone "18.198.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "19.198.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// IANA Reserved - Old Class E Space (RFC 5735)
zone "240.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "241.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "242.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "243.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "244.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "245.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "246.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "247.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "248.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "249.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "250.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "251.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "252.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "253.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "254.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

// IPv6 Unassigned Addresses (RFC 4291)
zone "1.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "3.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "4.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "5.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "6.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "7.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "8.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "9.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "a.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "b.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "c.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "d.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "e.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "0.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "1.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "2.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "3.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "4.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "5.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "6.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "7.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "8.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "9.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "a.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "b.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "0.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "1.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "2.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "3.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "4.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "5.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "6.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "7.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };

// IPv6 ULA (RFCs 4193 and 6303)
zone "c.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };
zone "d.f.ip6.arpa" { type master; file "/etc/bind/db.empty"; };

// IPv6 Link Local (RFCs 4291 and 6303)
zone "8.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "9.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "a.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "b.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };

// IPv6 Deprecated Site-Local Addresses (RFCs 3879 and 6303)
zone "c.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "d.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "e.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };
zone "f.e.f.ip6.arpa"   { type master; file "/etc/bind/db.empty"; };

// IP6.INT is Deprecated (RFC 4159)
zone "ip6.int"      { type master; file "/etc/bind/db.empty"; };

root@master:~# nano /etc/bind/named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
include "/etc/bind/zones.rfc1918";
include "/etc/bind/zones.rfcFreeBSD";

// Declaración del nombre, tipo, ubicación, y permiso de actualización
// de las Zonas de Registros DNS
// Ambas Zonas son MAESTRAS
zone "swl.fan" {
        type master;
        file "/var/lib/bind/db.swl.fan";
};

zone "10.168.192.in-addr.arpa" {
        type master;
        file "/var/lib/bind/db.10.168.192.in-addr.arpa";
};

root@master:~# named-checkconf

root@master:~# nano /var/lib/bind/db.swl.fan
$TTL 3H
@   IN SOA  master.swl.fan. root.master.swl.fan. (
                                        1   ; serial
                                        1D  ; refresh
                                        1H  ; retry
                                        1W  ; expire
                                        3H )    ; minimum or
                                                ; Negative caching time to live
;
@               IN  NS  master.swl.fan.
@               IN  MX  10 mail.swl.fan.
@       IN  A   192.168.10.5
@       IN  TXT "Para los Fans del Software Libre"
;
sysadmin        IN  A   192.168.10.1
fileserver  IN  A   192.168.10.4
master          IN  A   192.168.10.5
proxyweb        IN  A   192.168.10.6
blog            IN  A   192.168.10.7
ftpserver   IN  A   192.168.10.8
mail            IN  A   192.168.10.9

root@master:~# nano /var/lib/bind/db.10.168.192.in-addr.arpa
$TTL 3H
@   IN SOA  master.swl.fan. root.master.swl.fan. (
                                        1   ; serial
                                        1D  ; refresh
                                        1H  ; retry
                                        1W  ; expire
                                        3H )    ; minimum or
                                                ; Negative caching time to live
;
@               IN  NS  master.swl.fan.
;
1   IN  PTR     sysadmin.swl.fan.
4   IN  PTR     fileserver.swl.fan.
5   IN  PTR     master.swl.fan.
6   IN  PTR     proxyweb.swl.fan.
7   IN  PTR     blog.swl.fan.
8   IN  PTR     ftpserver.swl.fan.
9   IN  PTR     mail.swl.fan.

root@master:~# named-checkzone swl.fan /var/lib/bind/db.swl.fan
zone swl.fan/IN: loaded serial 1
OK
root@master:~# named-checkzone 10.168.192.in-addr.arpa /var/lib/bind/db.10.168.192.in-addr.arpa
zone 10.168.192.in-addr.arpa/IN: loaded serial 1
OK

root@master:~# named-checkconf -zp
root@master:~# systemctl restart bind9.service
root@master:~# systemctl status bind9.service

Comprobaciones del bind9

root@master:~# dig swl.fan axfr
root@master:~# dig 10.168.192.in-addr.arpa axfr
root@master:~# dig IN SOA swl.fan
root@master:~# dig IN NS swl.fan
root@master:~# dig IN MX swl.fan
root@master:~# host proxyweb
root@master:~# nping --tcp -p 53 -c 3 localhost
root@master:~# nping --udp -p 53 -c 3 localhost
root@master:~# nping --tcp -p 53 -c 3 master.swl.fan
root@master:~# nping --udp -p 53 -c 3 master.swl.fan
Starting Nping 0.6.47 ( http://nmap.org/nping ) at 2017-05-27 09:32 EDT
SENT (0.0037s) UDP 192.168.10.5:53 > 192.168.10.245:53 ttl=64 id=20743 iplen=28 
SENT (1.0044s) UDP 192.168.10.5:53 > 192.168.10.245:53 ttl=64 id=20743 iplen=28 
SENT (2.0060s) UDP 192.168.10.5:53 > 192.168.10.245:53 ttl=64 id=20743 iplen=28 
 
Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A
Raw packets sent: 3 (84B) | Rcvd: 0 (0B) | Lost: 3 (100.00%)
Nping done: 1 IP address pinged in 3.01 seconds 

isc-dhcp-server

root@master:~# aptitude install isc-dhcp-server
root@master:~# nano /etc/default/isc-dhcp-server
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth0"

root@master:~# dnssec-keygen -a HMAC-MD5 -b 128 -r /dev/urandom -n USER dhcp-key
root@master:~# cat Kdhcp-key.+157+51777.private 
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: Ba9GVadq4vOCixjPN94dCQ==
Bits: AAA=
Created: 20170527133656
Publish: 20170527133656
Activate: 20170527133656

root@master:~# nano dhcp.key
key dhcp-key {
        algorithm hmac-md5;
        secret "Ba9GVadq4vOCixjPN94dCQ==";
};
root@master:~# install -o root -g bind -m 0640 dhcp.key /etc/bind/dhcp.key
root@master:~# install -o root -g root -m 0640 dhcp.key /etc/dhcp/dhcp.key

root@master:~# nano /etc/bind/named.conf.local
include "/etc/bind/dhcp.key";

zone "swl.fan" {
        type master;
        file "/var/lib/bind/db.swl.fan";
        allow-update { key dhcp-key; };
};

zone "10.168.192.in-addr.arpa" {
        type master;
        file "/var/lib/bind/db.10.168.192.in-addr.arpa";
        allow-update { key dhcp-key; };
};

root@master:~#  named-checkconf

root@master:~# mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.original
root@master:~# nano /etc/dhcp/dhcpd.conf
ddns-update-style interim;
ddns-updates on;
ddns-domainname "swl.fan.";
ddns-rev-domainname "in-addr.arpa.";
ignore client-updates;
update-optimization false;  # Puede ser necesario en Debian

authoritative;

option ip-forwarding off;
option domain-name "swl.fan";

include "/etc/dhcp/dhcp.key";

zone swl.fan. {
        primary 127.0.0.1;
        key dhcp-key;
}
zone 10.168.192.in-addr.arpa. {
        primary 127.0.0.1;
        key dhcp-key;
}

shared-network redlocal {
        subnet 192.168.10.0 netmask 255.255.255.0 {
                option routers 192.168.10.1;
                option subnet-mask 255.255.255.0;
                option broadcast-address 192.168.10.255;
                option domain-name-servers 192.168.10.5;
                option netbios-name-servers 192.168.10.5;
        option ntp-servers 192.168.10.5;
        option time-servers 192.168.10.5;
                range 192.168.10.30 192.168.10.250;
        }
}

root@master:~# dhcpd -t
Internet Systems Consortium DHCP Server 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcp/dhcpd.leases
PID file: /var/run/dhcpd.pid

root@master:~# systemctl restart bind9.service 
root@master:~# systemctl status bind9.service 

root@master:~# systemctl start isc-dhcp-server.service
root@master:~# systemctl status isc-dhcp-server.service

ntp

root@master:~# aptitude install ntp ntpdate
root@master:~# cp /etc/ntp.conf /etc/ntp.conf.original
root@master:~# nano /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

server 192.168.10.1

restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

restrict 127.0.0.1
restrict ::1

broadcast 192.168.10.255

root@master:~# systemctl restart ntp.service 
root@master:~# systemctl status ntp.service
root@master:~# ntpdate -u sysadmin.swl.fan
27 May 10:04:01 ntpdate[18769]: adjust time server 192.168.10.1 offset 0.369354 sec

Comprobaciones globales del ntp, bind9 e isc-dhcp-server

Desde un cliente Linux, BSD, Mac OS, o Windows compruebe que se sincroniza el tiempo correctamente. Que adquiere una dirección IP dinámica y que el nombre de ese host se resuleve mediante consultas DNS directas e inversas. Cambie el nombre del cliente y vuelva a realizar todas las comprobaciones. No avance hasta que tenga la certeza de que los servicios instalados hasta ahora funcionan correctamente. Para algo escribimos todos los artículos sobre DNS y DHCP en Redes de Computadoras para las PYMES.

Instalación del NIS Server

root@master:~# aptitude show nis
Tiene conflictos con: netstd (<= 1.26)
Descripción: clients and daemons for the Network Information Service (NIS)
 This package provides tools for setting up and maintaining a NIS domain. NIS,
 originally known as Yellow Pages (YP), is mostly used to let several machines
 in a network share the same account information, such as the password file.

root@master:~# aptitude install nis
Configuración de paquetes
 ┌─────────────────────────┤ Configuración de nis ├──────────────────────────┐  
 │ Escoja el «nombre del dominio» de NIS para este sistema. Si quiere que    │  
 │ esta máquina sólo sea un cliente, debería introducir el nombre del        │  
 │ dominio de NIS al que se quiere unir.                                     │  
 │                                                                           │  
 │ De forma alternativa, si esta máquina va a ser un servidor NIS, puede     │  
 │ introducir un nuevo «nombre de dominio» de NIS o el nombre de un dominio  │  
 │ de NIS existente.                                                         │  
 │                                                                           │  
 │ Dominio de NIS:                                                           │  
 │                                                                           │  
 │ swl.fan__________________________________________________________________ │  
 │                                                                           │  
 │                                  <Aceptar>                                │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  

Se demorará lo suyo porque la configuración del servicio no existe como tal. Espere, por favor, a que termine el proceso.

root@master:~# nano /etc/default/nis
# Are we a NIS server and if so what kind (values: false, slave, master)?
NISSERVER=master

root@master:~# nano /etc/ypserv.securenets
# securenets    This file defines the access rights to your NIS server
#               for NIS clients (and slave servers - ypxfrd uses this
#               file too). This file contains netmask/network pairs.
#               A clients IP address needs to match with at least one
#               of those.
#
#               One can use the word "host" instead of a netmask of
#               255.255.255.255. Only IP addresses are allowed in this
#               file, not hostnames.
#
# Always allow access for localhost
255.0.0.0       127.0.0.0

# This line gives access to everybody. PLEASE ADJUST!
# 0.0.0.0       0.0.0.0
255.255.255.0   192.168.10.0

root@master:~# nano /var/yp/Makefile
# Should we merge the passwd file with the shadow file ?
# MERGE_PASSWD=true|false
MERGE_PASSWD=true

# Should we merge the group file with the gshadow file ?
# MERGE_GROUP=true|false
MERGE_GROUP=true

Construimos la base de datos del NIS

root@master:~# /usr/lib/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers.  master.swl.fan is in the list of NIS server hosts.  Please continue to add
the names for the other hosts, one per line.  When you are done with the
list, type a <control D>.
    next host to add:  master.swl.fan
    next host to add:  
The current list of NIS servers looks like this:

master.swl.fan

Is this correct?  [y/n: y]  
We need a few minutes to build the databases...

make[1]: Leaving directory '/var/yp/swl.fan'
master.swl.fan has been set up as a NIS master server.
Now you can run ypinit -s master.swl.fan on all slave server.

root@master:~# systemctl restart nis
root@master:~# systemctl status nis

Agregamos usuarios locales

root@master:~# adduser bilbo
Añadiendo el usuario `bilbo' ...
Añadiendo el nuevo grupo `bilbo' (1001) ...
Añadiendo el nuevo usuario `bilbo' (1001) con grupo `bilbo' ...
Creando el directorio personal `/home/bilbo' ...
Copiando los ficheros desde `/etc/skel' ...
Introduzca la nueva contraseña de UNIX: 
Vuelva a escribir la nueva contraseña de UNIX: 
passwd: contraseña actualizada correctamente
Cambiando la información de usuario para bilbo
Introduzca el nuevo valor, o pulse INTRO para usar el valor predeterminado
    Nombre completo []: Bilbo Bagins
    Número de habitación []: 
    Teléfono del trabajo []: 
    Teléfono de casa []: 
    Otro []: 
¿Es correcta la información? [S/n]

root@master:~# adduser trancos
root@master:~# adduser legolas

y así sucesivamente.

root@master:~# finger legolas
Login: legolas                  Name: Legolas Arquero
Directory: /home/legolas                Shell: /bin/bash
Never logged in.
No mail.
No Plan.

Actualizamos la base de datos del NIS

root@master:/var/yp# make
make[1]: Entering directory '/var/yp/swl.fan'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating netid.byname...
Updating shadow.byname... Ignored -> merged with passwd
make[1]: Leaving directory '/var/yp/swl.fan'

Adicionamos opciones NIS al isc-dhcp-server

root@master:~# nano /etc/dhcp/dhcpd.conf
ddns-update-style interim;
ddns-updates on;
ddns-domainname "swl.fan.";
ddns-rev-domainname "in-addr.arpa.";
ignore client-updates;
update-optimization false;

authoritative;

option ip-forwarding off;
option domain-name "swl.fan";

include "/etc/dhcp/dhcp.key";

zone swl.fan. {
        primary 127.0.0.1;
        key dhcp-key;
}
zone 10.168.192.in-addr.arpa. {
        primary 127.0.0.1;
        key dhcp-key;
}

shared-network redlocal {
        subnet 192.168.10.0 netmask 255.255.255.0 {
                option routers 192.168.10.1;
                option subnet-mask 255.255.255.0;
                option broadcast-address 192.168.10.255;
                option domain-name-servers 192.168.10.5;
                option netbios-name-servers 192.168.10.5;
                option ntp-servers 192.168.10.5;
                option time-servers 192.168.10.5;
                option nis-domain "swl.fan";
                option nis-servers 192.168.10.5;
                range 192.168.10.30 192.168.10.250;
        }
}

root@master:~# dhcpd -t
root@master:~# systemctl restart isc-dhcp-server.service

Instalación del NIS Client

  • Partimos de una instalación limpia -sin interfaz gráfica- de un Debian 8 “Jessie”.
root@mail:~# hostname -f
mail.swl.fan

root@mail:~# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:25:1f:54 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.9/24 brd 192.168.10.255 scope global eth0

root@mail:~# aptitude install nis
root@mail:~# nano /etc/yp.conf
#
# yp.conf       Configuration file for the ypbind process. You can define
#               NIS servers manually here if they can't be found by
#               broadcasting on the local net (which is the default).
#
#               See the manual page of ypbind for the syntax of this file.
#
# IMPORTANT:    For the "ypserver", use IP addresses, or make sure that
#               the host is in /etc/hosts. This file is only interpreted
#               once, and if DNS isn't reachable yet the ypserver cannot
#               be resolved and ypbind won't ever bind to the server.

# ypserver ypserver.network.com
ypserver        master.swl.fan
domain          swl.fan

root@mail:~# nano /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat nis
group:          compat nis
shadow:         compat nis
gshadow:        files

hosts:          files dns nis
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

root@mail:~# nano /etc/pam.d/common-session
# pam-auth-update(8) for details.
session optional        pam_mkhomedir.so skel=/etc/skel umask=077
# here are the per-package modules (the "Primary" block)

root@mail:~# systemctl status nis
root@mail:~# systemctl restart nis

Cerramos sesión y la iniciamos nuevamente pero con un usuario registrado en la base de datos del NIS en master.swl.fan.

root@mail:~# exit
logout
Connection to mail closed.

buzz@sysadmin:~$ ssh legolas@mail
legolas@mail's password: 
Creating directory '/home/legolas'.

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
legolas@mail:~$ pwd
/home/legolas
legolas@mail:~$ 

Cambiamos el password del usuario legolas y comprobamos

legolas@mail:~$ yppasswd 
Changing NIS account information for legolas on master.swl.fan.
Please enter old password:legolas
Changing NIS password for legolas on master.swl.fan.
Please enter new password:arquero
The password must have both upper and lowercase letters, or non-letters.
Please enter new password:Arquero2017
Please retype new password:Arquero2017

The NIS password has been changed on master.swl.fan.

legolas@mail:~$ exit
logout
Connection to mail closed.

buzz@sysadmin:~$ ssh legolas@mail
legolas@mail's password: Arquero2017

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat May 27 12:51:50 2017 from sysadmin.swl.fan
legolas@mail:~$

El Servicio NIS implementado a nivel de servidor y de cliente funciona correctamente.

LDAP

De Wikipedia:

  • LDAP son las siglas de Lightweight Directory Access Protocol (en español Protocolo Ligero/Simplificado de Acceso a Directorios) que hacen referencia a un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP también se considera una base de datos (aunque su sistema de almacenamiento puede ser diferente) a la que pueden realizarse consultas.Un directorio es un conjunto de objetos con atributos organizados en una manera lógica y jerárquica. El ejemplo más común es el directorio telefónico, que consiste en una serie de nombres (personas u organizaciones) que están ordenados alfabéticamente, con cada nombre teniendo una dirección y un número de teléfono adjuntos. Para entender mejor, es un libro o carpeta, en la cual se escriben nombres de personas, teléfonos y direcciones, y se ordena alfabéticamente.

    Un árbol de directorio LDAP a veces refleja varios límites políticos, geográficos u organizacionales, dependiendo del modelo elegido. Los despliegues actuales de LDAP tienden a usar nombres de Sistema de Nombres de Dominio (DNS por sus siglas en inglés) para estructurar los niveles más altos de la jerarquía. Conforme se desciende en el directorio pueden aparecer entradas que representan personas, unidades organizacionales, impresoras, documentos, grupos de personas o cualquier cosa que representa una entrada dada en el árbol (o múltiples entradas).

    Habitualmente, almacena la información de autenticación (usuario y contraseña) y es utilizado para autenticarse aunque es posible almacenar otra información (datos de contacto del usuario, ubicación de diversos recursos de la red, permisos, certificados, etc). A manera de síntesis, LDAP es un protocolo de acceso unificado a un conjunto de información sobre una red.

    La versión actual es LDAPv3, y se encuentra definido en los RFCs RFC 2251 y RFC 2256 (documento base de LDAP), RFC 2829 (método de autentificación para LDAP), RFC 2830 (extensión para TLS), y RFC 3377 (especificación técnica)

    .

Por mucho, el protocolo LDAP -y sus bases de datos compatibles o no con el OpenLDAP- es el mas utilizado en la mayoría de los sistemas de autenticación de hoy día. Como ejemplo de la afirmación anterior, damos a continuación algunos nombres de sistemas -Libres o Privados- que utilizan bases de datos LDAP como backend para almacenar todos sus objetos:

  • OpenLDAP
  • Apache Directory Server
  • Red Hat Directory Server – 389 DS
  • Novell Directory Services – eDirectory
  • SUN Microsystem Open DS
  • Red Hat Identity Manager
  • FreeIPA
  • Samba NT4 Clasic Domain Controller.
    Queremos aclarar que éste sistema fue un desarrollo propio del Team Samba con Samba 3.xxx + OpenLDAP como backend. Microsoft nunca implementó algo parecido. Saltó de los Controladores de Dominio NT 4 a sus Directorios Activos
  • Samba 4 Active Directory – Domain Controler
  • ClearOS
  • Zentyal
  • UCS Uninvention Corporate Server
  • Microsoft Active Directory

Cada implementación tiene sus propias características, y el más estándar y compatible es el OpenLDAP.

Los Active Directory, sean el original de Microsoft o el de Samba 4, constituyen una unión de varios componentes principales que son:

No debemos confundir un Directory Service o Servicio de Directorio con un Active Directory o Directorio Activo. Los primeros pueden o no albergar a la autenticación Kerberos, pero no ofertan el servicio de la Red Microsoft que brinda un Dominio de Windows, ni tampoco tienen un Controlador de Dominio Windows como tal.

Un Servicio de Directorio o Directory Service se puede emplear para autenticar usuarios en una red mixta con clientes UNIX/Linux y Windows. Para éstos últimos se debe instalar en cada cliente algún programa que actúe como intermediario entre el Servicio de Directorio y el propio cliente Windows, como es el Software Libre pGina.

Servicio de Directorio con OpenLDAP

  • Partimos de una instalación limpia -sin interfaz gráfica- de un Debian 8 “Jessie”, con el mismo nombre de equipo “master” utilizado para la instalación del NIS, así como también la configuración de su interfaz de red y del archivo /etc/resolv.conf. A este nuevo servidor le instalamos el ntp, bind9 e isc-dhcp-server, sin olvidar las comprobaciones globales del correcto funcionamiento de los tres servicios anteriores.
root@master:~# aptitude install slapd ldap-utils

Configuración de paquetes

┌────────────────────┤ Configuración de slapd ├─────────────────────┐
│ Introduzca la contraseña para la entrada de administrador de su   │
│ directorio LDAP.                                                  │
│                                                                   │
│ Contraseña del administrador:                                     │
│                                                                   │
│ ********_________________________________________________________ │
│                                                                   │
│                              <Aceptar>                            │
│                                                                   │
└───────────────────────────────────────────────────────────────────┘

Comprobamos la configuración inicial

root@master:~# slapcat
dn: dc=swl,dc=fan
objectClass: top
objectClass: dcObject
objectClass: organization
o: swl.fan
dc: swl
structuralObjectClass: organization
entryUUID: c8510708-da8e-1036-8fe1-71d022a16904
creatorsName: cn=admin,dc=swl,dc=fan
createTimestamp: 20170531205219Z
entryCSN: 20170531205219.833955Z#000000#000#000000
modifiersName: cn=admin,dc=swl,dc=fan
modifyTimestamp: 20170531205219Z

dn: cn=admin,dc=swl,dc=fan
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9emJNSFU1R3l2OWVEN0pmTmlYOVhKSUF4ekY1bU9YQXc=
structuralObjectClass: organizationalRole
entryUUID: c851178e-da8e-1036-8fe2-71d022a16904
creatorsName: cn=admin,dc=swl,dc=fan
createTimestamp: 20170531205219Z
entryCSN: 20170531205219.834422Z#000000#000#000000
modifiersName: cn=admin,dc=swl,dc=fan
modifyTimestamp: 20170531205219Z

Modificamos el archivo /etc/ldap/ldap.conf

root@master:~# nano /etc/ldap/ldap.conf
BASE   dc=swl,dc=fan
URI    ldap://localhost

Unidades Organizativas y grupo general “usuarios”

Adicionamos las Organizational Units mínimas necesarias, así como el grupo Posix “usuarios” al que haremos miembros a todos los usuarios, siguiendo el ejemplo de muchos sistemas que tienen el grupo “users“. Lo denominamos con el nombre de “usuarios” para no entrar en posibles conflictos con el grupo “user” del sistema.

root@master:~# nano base.ldif
dn: ou=people,dc=swl,dc=fan
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=swl,dc=fan
objectClass: organizationalUnit
ou: groups

dn: cn=usuarios,ou=groups,dc=swl,dc=fan
objectClass: posixGroup
cn: usuarios
gidNumber: 10000

root@master:~# ldapadd -x -D cn=admin,dc=swl,dc=fan -W -f base.ldif
Enter LDAP Password: 
adding new entry "ou=people,dc=swl,dc=fan"
adding new entry "ou=groups,dc=swl,dc=fan"

Comprobamos las entradas añadidas

root@master:~# ldapsearch -x ou=people
# people, swl.fan
dn: ou=people,dc=swl,dc=fan
objectClass: organizationalUnit
ou: people

root@master:~# ldapsearch -x ou=groups
# groups, swl.fan
dn: ou=groups,dc=swl,dc=fan
objectClass: organizationalUnit
ou: groups

root@master:~# ldapsearch -x cn=usuarios
# usuarios, groups, swl.fan
dn: cn=usuarios,ou=groups,dc=swl,dc=fan
objectClass: posixGroup
cn: usuarios
gidNumber: 10000

Adicionamos varios usuarios

El password que debemos declarar en el LDAP se debe obtener mediante el comando slappasswd, el cual devuelve una contraseña encriptada SSHA.

Contraseña para el usuario trancos:

root@master:~# slappasswd 
New password: 
Re-enter new password: 
{SSHA}Fn8Juihsr137u8KnxGTNPmnV8ai//0lp

Contraseña para el usuario legolas

root@master:~# slappasswd 
New password: 
Re-enter new password: 
{SSHA}rC50/W3kBmmDd+8+0Lz70vkGEu34tXmD

Contraseña para el usuario gandalf

root@master:~# slappasswd 
New password: 
Re-enter new password: 
{SSHA}oIVFelqv8WIxJ40r12lnh3bp+SXGbV+u

root@master:~# nano usuarios.ldif
dn: uid=trancos,ou=people,dc=swl,dc=fan
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: trancos
cn: trancos
givenName: Trancos
sn: El Rey
userPassword: {SSHA}Fn8Juihsr137u8KnxGTNPmnV8ai//0lp
uidNumber: 10000
gidNumber: 10000
mail: trancos@swl.fan
gecos: Trancos El Rey
loginShell: /bin/bash
homeDirectory: /home/trancos

dn: uid=legolas,ou=people,dc=swl,dc=fan
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: legolas
cn: legolas
givenName: Legolas
sn: Arquero
userPassword: {SSHA}rC50/W3kBmmDd+8+0Lz70vkGEu34tXmD
uidNumber: 10001
gidNumber: 10000
mail: legolas@swl.fan
gecos: Legolas Arquero
loginShell: /bin/bash
homeDirectory: /home/legolas

dn: uid=gandalf,ou=people,dc=swl,dc=fan
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: gandalf
cn: gandalf
givenName: Gandalf
sn: El Mago
userPassword: {SSHA}oIVFelqv8WIxJ40r12lnh3bp+SXGbV+u
uidNumber: 10002
gidNumber: 10000
mail: gandalf@swl.fan
gecos: Gandalf El Mago
loginShell: /bin/bash
homeDirectory: /home/gandalf

root@master:~# ldapadd -x -D cn=admin,dc=swl,dc=fan -W -f usuarios.ldif
Enter LDAP Password: 
adding new entry "uid=trancos,ou=people,dc=swl,dc=fan"
adding new entry "uid=legolas,ou=people,dc=swl,dc=fan"
adding new entry "uid=gandalf,ou=people,dc=swl,dc=fan"

Comprobamos las entradas añadidas

root@master:~# ldapsearch -x cn=trancos
root@master:~# ldapsearch -x uid=trancos

Gestionamos la base de datos del slpad con utilidades de consola

Seleccionamos el paquete ldapscripts para tal tarea. El procedimiento de instalación y configuración es el siguiente:

root@master:~# aptitude install ldapscripts
 
root@master:~# mv /etc/ldapscripts/ldapscripts.conf \
/etc/ldapscripts/ldapscripts.conf.original
 
root@master:~# nano /etc/ldapscripts/ldapscripts.conf
SERVER=localhost
BINDDN='cn=admin,dc=swl,dc=fan'
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
SUFFIX='dc=swl,dc=fan'
GSUFFIX='ou=groups'
USUFFIX='ou=people'
# MSUFFIX='ou=Computers'
GIDSTART=10001
UIDSTART=10003
# MIDSTART=10000
# OpenLDAP client commands
LDAPSEARCHBIN="/usr/bin/ldapsearch"
LDAPADDBIN="/usr/bin/ldapadd"
LDAPDELETEBIN="/usr/bin/ldapdelete"
LDAPMODIFYBIN="/usr/bin/ldapmodify"
LDAPMODRDNBIN="/usr/bin/ldapmodrdn"
LDAPPASSWDBIN="/usr/bin/ldappasswd"
GCLASS="posixGroup"
# UTEMPLATE="/etc/ldapscripts/ldapadduser.template"
PASSWORDGEN="echo %u"

Observen que los scripts utilizan los comandos del paquete ldap-utils. Ejecute dpkg -L ldap-utils | grep /bin para saber cuales son.

root@master:~# sh -c "echo -n 'admin-password' > \
/etc/ldapscripts/ldapscripts.passwd"
 
root@master:~# chmod 400 /etc/ldapscripts/ldapscripts.passwd
 
root@master:~# cp /usr/share/doc/ldapscripts/examples/ldapadduser.template.sample \
/etc/ldapscripts/ldapadduser.template
 
root@master:~# nano /etc/ldapscripts/ldapadduser.template
dn: uid=<user>,<usuffix>,<suffix>
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: <user>
cn: <user>
givenName: <ask>
sn: <ask>
displayName: <ask>
uidNumber: <uid>
gidNumber: 10000
homeDirectory: <home>
loginShell: <shell>
mail: <user>@swl.fan
gecos: <user>
description: Cuenta de Usuario
 
root@master:~# nano /etc/ldapscripts/ldapscripts.conf
## eliminamos el comentario
UTEMPLATE="/etc/ldapscripts/ldapadduser.template"

Añadimos al usuario “bilbo” y lo hacemos miembro del grupos “usuarios”

root@master:~# ldapadduser bilbo usuarios
[dn: uid=bilbo,ou=people,dc=swl,dc=fan] Enter value for "givenName" : Bilbo
[dn: uid=bilbo,ou=people,dc=swl,dc=fan] Enter value for "sn" : Bagins
[dn: uid=bilbo,ou=people,dc=swl,dc=fan] Enter value for "displayName" : Bilbo Bagins
Successfully added user bilbo to LDAP
Successfully set password for user bilbo

root@master:~# ldapsearch -x uid=bilbo
# bilbo, people, swl.fan
dn: uid=bilbo,ou=people,dc=swl,dc=fan
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: bilbo
cn: bilbo
givenName: Bilbo
sn: Bagins
displayName: Bilbo Bagins
uidNumber: 10003
gidNumber: 10000
homeDirectory: /home/bilbo
loginShell: /bin/bash
mail: bilbo@swl.fan
gecos: bilbo
description: Cuenta de Usuario

Para ver el hash del password del usuario bilbo, es necesario efectuar la consulta con autenticación:

root@master:~# ldapsearch -x -D cn=admin,dc=swl,dc=fan -W uid=bilbo

Para borrar al usuario bilbo ejecutamos:

root@master:~# ldapdelete -x -D cn=admin,dc=swl,dc=fan -W uid=bilbo,ou=people,dc=swl,dc=fan
Enter LDAP Password:

root@master:~# ldapsearch -x uid=bilbo

Gestionamos la base de datos del slapd mediante un interfaz web

Disponemos de un Servicio de Directorio funcional, y lo queremos administrar mas fácilmente. Existen muchos programas concebidos para esa tarea como son el phpldapadmin, ldap-account-manager, etcétera, que están disponibles directamente desde los repositorios. También podemos gestionar un Servicio de Directorio por medio del Apache Directory Studio, el que debemos descargar desde Internet.

Para mas información, por favor visite https://blog.desdelinux.net/ldap-introduccion/, y los siguientes 6 artículos.

Cliente LDAP

Escenario:

Digamos que tenemos al equipo mail.swl.fan como servidor de correo implementado según vimos en en el artículo Postfix + Dovecot + Squirrelmail y usuarios locales, que aunque se desarrolló sobre CentOS, bien puede servir de guía para Debian y muchas otras distros Linux. Queremos que, además de los usuarios locales que ya tengamos declarados, disfruten del servicio los usuarios almacenados en la base de datos del OpenLDAP existente en master.swl.fan. Para lograr lo anterior debemos “mapear” a los usuarios del LDAP como usuarios locales en el servidor mail.swl.fan. Esta solución también es válida para cualquier servicio basado en autenticación PAM. El procedimiento general para Debian, es el siguiente:

root@mail:~# aptitude install libnss-ldap libpam-ldap ldap-utils

  ┌────────────────────┤ Configuración de libnss-ldap ├─────────────────────┐
  │ Introduzca el URI («Uniform Resource Identifier», o Identificador       │
  │ Uniforme de Recursos) del servidor de LDAP. Esta cadena es similar a    │
  │ «ldap://<nombre_del_equipo o dirección_IP>:<puerto>/». También puede    │
  │ utilizar «ldaps://» o «ldapi://». El número de puerto es opcional.      │
  │                                                                         │
  │ Se recomienda utilizar una dirección IP para evitar fallos cuando los   │
  │ servicios de nombres de dominio no estén disponibles.                   │
  │                                                                         │
  │ URI del servidor de LDAP:                                               │
  │                                                                         │
  │ ldap://master.swl.fan__________________________________________________ │
  │                                                                         │
  │                                 <Aceptar>                               │
  │                                                                         │
  └─────────────────────────────────────────────────────────────────────────┘

 ┌─────────────────────┤ Configuración de libnss-ldap ├──────────────────────┐
 │ Introduzca el nombre distintivo (DN) de la base de búsquedas de LDAP. En  │
 │ muchos sitios se utilizan las componentes del nombre de dominio con este  │
 │ propósito. Por ejemplo, el dominio «ejemplo.net» utilizaría               │
 │ «dc=ejemplo,dc=net» como nombre distintivo de la base de búsquedas.       │
 │                                                                           │
 │ El nombre distintivo (DN) de la base de búsquedas:                        │
 │                                                                           │
 │ dc=swl,dc=fan____________________________________________________________ │
 │                                                                           │
 │                                  <Aceptar>                                │
 │                                                                           │
 └───────────────────────────────────────────────────────────────────────────┘

 ┌─────────────────────┤ Configuración de libnss-ldap ├──────────────────────┐
 │ Introduzca la versión del protocolo de LDAP que debería usar ldapns. Se   │
 │ recomienda utilizar el número de versión más alto que esté disponible.    │
 │                                                                           │
 │ Versión de LDAP a utilizar:                                               │
 │                                                                           │
 │                                     3                                     │
 │                                     2                                     │
 │                                                                           │
 │                                                                           │
 │                                  <Aceptar>                                │
 │                                                                           │
 └───────────────────────────────────────────────────────────────────────────┘

                                                                                
 ┌─────────────────────┤ Configuración de libnss-ldap ├──────────────────────┐  
 │ Escoja que cuenta se utilizará para las consultas nss con privilegios de  │  
 │ root.                                                                     │  
 │                                                                           │  
 │ Nota: Para que funcione esta opción la cuenta necesita permisos para      │  
 │ poder acceder a los atributos LDAP que están asociados con las entradas   │  
 │ «shadow» de los usuarios así como a las contraseñas de los usuarios y     │  
 │ grupos.                                                                   │  
 │                                                                           │  
 │ Cuenta LDAP para root:                                                    │  
 │                                                                           │  
 │ cn=admin,dc=swl,dc=fan___________________________________________________ │  
 │                                                                           │  
 │                                  <Aceptar>                                │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘ 

  ┌─────────────────────┤ Configuración de libnss-ldap ├─────────────────────┐  
  │ Introduzca la contraseña se utilizará cuando libnss-ldap intente         │  
  │ autenticarse al directorio LDAP con la cuenta LDAP de root.              │  
  │                                                                          │  
  │ La contraseña se guardará en un fichero independiente                    │  
  │ («/etc/libnss-ldap.secret») al que sólo podrá acceder root.              │  
  │                                                                          │  
  │ Si introduce una contraseña vacía se reutilizará la antigua contraseña.  │  
  │                                                                          │  
  │ Contraseña para la cuenta LDAP de root:                                  │  
  │                                                                          │  
  │ ********________________________________________________________________ │  
  │                                                                          │  
  │                                  <Aceptar>                               │  
  │                                                                          │  
  └──────────────────────────────────────────────────────────────────────────┘  

 ┌─────────────────────┤ Configuración de libnss-ldap ├──────────────────────┐  
 │                                                                           │  
 │ nsswitch.conf no se gestiona automáticamente                              │  
 │                                                                           │  
 │ Debe modificar su fichero «/etc/nsswitch.conf» para que utilice una       │  
 │ fuente de datos LDAP si quiere que funcione el paquete libnss-ldap.       │  
 │ Puede utilizar como ejemplo de la configuración de nsswitch el fichero    │  
 │ de ejemplo en «/usr/share/doc/libnss-ldap/examples/nsswitch.ldap» o       │  
 │ puede copiarlo sobre su configuración actual.                             │  
 │                                                                           │  
 │ Tenga en cuenta que antes de eliminar este paquete puede ser conveniente  │  
 │ eliminar las entradas «ldap» del fichero nsswitch.conf para que los       │  
 │ servicios básicos sigan funcionando.                                      │  
 │                                                                           │  
 │                                  <Aceptar>                                │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  

                                                                                
 ┌─────────────────────┤ Configuración de libpam-ldap ├──────────────────────┐  
 │                                                                           │  
 │ Esta opción permite que las herramientas de las contraseñas que utilicen  │  
 │ PAM cambien las contraseñas locales.                                      │  
 │                                                                           │  
 │ La contraseña de la cuenta del administrador de LDAP se guardará en un    │  
 │ archivo separado que sólo podrá leer el administrador.                    │  
 │                                                                           │  
 │ Esta opción se debería desactivar, si se monta «/etc» mediante NFS.       │  
 │                                                                           │  
 │ ¿Desea permitir que la cuenta del administrador de LDAP se comporte como  │  
 │ el administrador local?                                                   │  
 │                                                                           │  
 │                    <Sí>                        <No>                       │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  

 ┌─────────────────────┤ Configuración de libpam-ldap ├──────────────────────┐  
 │                                                                           │  
 │ Escoja si el servidor de LDAP fuerza la identificación antes de obtener   │  
 │ las entradas.                                                             │  
 │                                                                           │  
 │ Esta configuración no suele ser necesaria.                                │  
 │                                                                           │  
 │ ¿Hace falta un usuario para acceder a la base de datos de LDAP?           │  
 │                                                                           │  
 │                    <Sí>                        <No>                       │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  


 ┌─────────────────────┤ Configuración de libpam-ldap ├──────────────────────┐  
 │ Introduzca el nombre de la cuenta del administrador de LDAP.              │  
 │                                                                           │  
 │ Esta cuenta se usará automáticamente para la gestión de la base de        │  
 │ datos, por lo que debe tener los privilegios administrativos apropiados.  │  
 │                                                                           │  
 │ Cuenta del administrador de LDAP:                                         │  
 │                                                                           │  
 │ cn=admin,dc=swl,dc=fan___________________________________________________ │  
 │                                                                           │  
 │                                  <Aceptar>                                │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  


 ┌─────────────────────┤ Configuración de libpam-ldap ├──────────────────────┐  
 │ Introduzca la contraseña de la cuenta del administrador.                  │  
 │                                                                           │  
 │ La contraseña se guardará en el archivo «/etc/pam_ldap.secret». El        │  
 │ administrador será el único que pueda leer este archivo, y permitirá a    │  
 │ libpam-ldap controlar automáticamente la gestión de las conexiones en la  │  
 │ base de datos.                                                            │  
 │                                                                           │  
 │ Si deja este campo en blanco, se volverá a usar la anterior contraseña    │  
 │ guardada.                                                                 │  
 │                                                                           │  
 │ Contraseña del administrador de LDAP:                                     │  
 │                                                                           │  
 │ ********_________________________________________________________________ │  
 │                                                                           │  
 │                                  <Aceptar>                                │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  

root@mail:~# nano /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap
gshadow:        files

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Editemos el archivo /etc/pam.d/common-password, vamos a la línea 26 y eliminamos el valor “use_authtok“:

root@mail:~# nano /etc/pam.d/common-password
#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
# used to change user passwords.  The default is pam_unix.

# Explanation of pam_unix options:
#
# The "sha512" option enables salted SHA512 passwords.  Without this option,
# the default is Unix crypt.  Prior releases used the option "md5".
#
# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
# login.defs.
#
# See the pam_unix manpage for other options.

# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
password    [success=2 default=ignore]  pam_unix.so obscure sha512
password [success=1 user_unknown=ignore default=die] pam_ldap.so try_first_pass
# here's the fallback if no module succeeds
password    requisite           pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
password    required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config

En caso de que necesitemos el Inicio de Sesión Local de los usuarios almacenados en el LDAP, y queramos se creen de forma automática sus carpetas home, debemos editar el archivo /etc/pam.d/common-session y añadir al final del archivo la siguiente línea:

session optional        pam_mkhomedir.so skel=/etc/skel umask=077

En el ejemplo de Servicio de Directorio con OpenLDAP desarrollado antes, el único usuario local que se creó fue el usuario buzz, mientras que en LDAP creamos a los usuarios trancos, legolas, gandalf, y bilbo. Si las configuraciones realizadas hasta el momento son correctas, entonces debemos de ser capaces de listar a los usuarios locales y a los mapeados como locales pero almacenados en el servidor LDAP remoto:

root@mail:~# getent passwd 
buzz:x:1001:1001:Buzz Debian First OS,,,:/home/buzz:/bin/bash
trancos:x:10000:10000:Trancos El Rey:/home/trancos:/bin/bash
legolas:x:10001:10000:Legolas Arquero:/home/legolas:/bin/bash
gandalf:x:10002:10000:Gandalf El Mago:/home/gandalf:/bin/bash
bilbo:x:10003:10000:bilbo:/home/bilbo:/bin/bash

Después de los cambios en la autenticación del sistema, es válido reiniciar el servidor sino estamos frente a un servicio crítico:

root@mail:~# reboot

Posteriormente iniciamos sesión local en el servidor mail.swl.fan con las credenciales de un usuario almacenado en la base de datos LDAP de master.swl.fan. También podemos probar iniciar sesión vía SSH.

 

buzz@sysadmin:~$ ssh gandalf@mail
gandalf@mail's password: 
Creating directory '/home/gandalf'.

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
gandalf@mail:~$ su
Contraseña:

root@mail:/home/gandalf# getent group
buzz:x:1001:
usuarios:*:10000:

root@mail:/home/gandalf# exit
exit

gandalf@mail:~$ ls -l /home/
total 8
drwxr-xr-x 2 buzz    buzz     4096 jun 17 12:25 buzz
drwx------ 2 gandalf usuarios 4096 jun 17 13:05 gandalf

El Servicio de Directorio implementado a nivel de servidor y de cliente, funciona correctamente.

Kerberos

De Wikipedia:

  • Kerberos es un protocolo de autenticación de redes de ordenador creado por el MIT que permite a dos ordenadores en una red insegura demostrar su identidad mutuamente de manera segura. Sus diseñadores se concentraron primeramente en un modelo de cliente-servidor, y brinda autenticación mutua: tanto cliente como servidor verifican la identidad uno del otro. Los mensajes de autenticación están protegidos para evitar eavesdropping y ataques de Replay.

    Kerberos se basa en criptografía de clave simétrica y requiere un tercero de confianza. Además, existen extensiones del protocolo para poder utilizar criptografía de clave asimétrica.

    Kerberos se basa en el Protocolo de Needham-Schroeder. Usa un tercero de confianza, denominado “centro de distribución de claves” (KDC, por sus siglas en inglés: Key Distribution Center), el cual consiste de dos partes lógicas separadas: un “servidor de autenticación” (AS o Authentication Server) y un “servidor emisor de tiquets” (TGS o Ticket Granting Server).   Kerberos trabaja sobre la base de “tickets”, los cuales sirven para demostrar la identidad de los usuarios.

    Kerberos mantiene una base de datos de claves secretas; cada entidad en la red —sea cliente o servidor— comparte una clave secreta conocida únicamente por él y Kerberos. El conocimiento de esta clave sirve para probar la identidad de la entidad. Para una comunicación entre dos entidades, Kerberos genera una clave de sesión, la cual pueden usar para   asegurar sus problemas.

Desventajas de Kerberos

De Ecured:

A pesar de que Kerberos elimina una amenaza de seguridad común, puede ser difícil de implementar por una variedad de razones:

  • La Migración de contraseñas de usuarios desde una base de datos de contraseñas estándar UNIX, tal como /etc/passwd o /etc/shadow, a una base de datos de contraseñas Kerberos, puede ser tediosa y no hay un mecanismo rápido para realizar esta tarea.
  • Kerberos presupone que cada usuario es de confianza, pero que está utilizando una máquina no fiable en una red no fiable. Su principal Objetivo es el de prevenir que las contraseñas no cifradas sean enviadas a través de la red. Sin embargo, si cualquier otro usuario, aparte del usuario adecuado, tiene acceso a la máquina que emite tickets (KDC) para la autenticación, Kerberos estaría en Riesgo.
  • Para que una aplicación use Kerberos, el código debe ser modificado para hacer las llamadas apropiadas a las librerías de Kerberos. Las aplicaciones que son modificadas de esta forma son consideradas como kerberizadas. Para algunas aplicaciones, esto puede suponer un esfuerzo excesivo de Programación, debido al tamaño de la aplicación o su Diseño. Para otras aplicaciones incompatibles, los cambios se deben realizar en el modo en que el servidor de red y sus clientes se comunican; de nuevo, esto puede suponer bastante programación. En general, las aplicaciones de código cerrado que no tienen soporte de Kerberos son usualmente las más problemáticas.
  • Finalmente, si decide usar Kerberos en su red, debe darse cuenta de que es una elección de todo o nada. Si decide usar Kerberos en su red, debe recordar que si se transmite cualquier contraseña a un servicio que no usa Kerberos para autenticar, se corre el riesgo de que el paquete pueda ser interceptado. Así, su red no obtendrá ningún beneficio de usar Kerberos. Para asegurar su red con Kerberos, solo debe utilizar las versiones kerberizadas de todas las aplicaciones cliente/servidor que envíen contraseñas sin cifrar o no utilizar ninguna de estas aplicaciones en la red.

Implementar y configurar de forma manual al OpenLDAP como Back-End de Kerberos no es tarea fácil. Sin embargo, mas adelante veremos que el Samba 4 Active Directory – Domain Controller integra de forma transparente para el Sysadmin, un servidor DNS, la Red Microsoft y su Controlador de Dominio, servidor LDAP como Back-End de casi la totalidad de sus objetos, y al servicio de autenticación basado en Kerberos como los componentes fundamentales de un Active Directory al estilo Microsoft.

Al día de hoy no hemos tenido la necesidad de implementar una “Red Kerberizada”. Por ello es que no escribimos sobre como implementar Kerberos.

Samba 4 Active Directory – Domain Controller

Importante:

No Existe Mejor Documentación que la del sitio wiki.samba.org. El Sysadmin que se precie a si mismo, debe visitar ese sitio -en inglés- y navegar por la gran cantidad de páginas dedicadas por entero a Samba 4, escritas por el propio Team Samba. No creo exista documentación disponible en Internet que la sustituya. De paso, observar la cantidad de visitas reflejadas al final de cada página. Ejemplo de ello es que su página principal o “Main Page” se visitó 276,183 veces hasta el día de hoy 20 de junio del 2017 a las 10:10 hora estándar del este. Además, la documentación la mantienen muy actualizada, pues esa página fue modificada el pasado 6 de junio.

De Wikipedia:

Samba es una implementación libre del protocolo de archivos compartidos de Microsoft Windows (antiguamente llamado SMB, renombrado recientemente a CIFS) para sistemas de tipo UNIX. De esta forma, es posible que   computadoras con GNU/Linux, Mac OS X o Unix en general se vean como servidores o actúen como clientes en redes de Windows. Samba también permite validar usuarios haciendo de Controlador Principal de Dominio (PDC), como miembro de dominio e incluso como un dominio Active Directory para redes basadas en Windows; aparte de ser capaz de servir colas de impresión, directorios compartidos y autentificar con su propio archivo de usuarios.

Entre los sistemas tipo Unix en los que se puede ejecutar Samba, están las distribuciones GNU/Linux, Solaris y las diferentes variantes BSD entre las que podemos encontrar el Mac OS X Server de Apple.

Samba 4 AD-DC con su DNS Interno

  • Partimos de una instalación limpia -sin interfaz gráfica- de un Debian 8 “Jessie”.

Comprobaciones iniciales

root@master:~# hostname
master
root@master:~# hostname --fqdn
master.swl.fan
root@master:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:80:3b:3f brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.5/24 brd 192.168.10.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe80:3b3f/64 scope link 
       valid_lft forever preferred_lft forever
root@master:~# cat /etc/resolv.conf
search swl.fan
nameserver 127.0.0.1
  • Con que declaremos la rama main solamente, es mas que suficiente para nuestros propósitos.
root@master:~# cat /etc/apt/sources.list
deb http://192.168.10.1/repos/jessie-8.6/debian/ jessie main
deb http://192.168.10.1/repos/jessie-8.6/debian/security/ jessie/updates main

Postfix por Exim y utilidades

root@master:~# aptitude install postfix htop mc deborphan

  ┌────────────────────────┤ Postfix Configuration ├─────────────────────────┐  
  │ Escoja el tipo de configuración del servidor de correo que se ajusta     │  
  │ mejor a sus necesidades.                                                 │  
  │                                                                          │  
  │  Sin configuración:                                                      │  
  │   Mantiene la configuración actual intacta.                              │  
  │  Sitio de Internet:                                                      │  
  │   El correo se envía y recibe directamente utilizando SMTP.              │  
  │  Internet con «smarthost»:                                               │  
  │   El correo se recibe directamente utilizando SMTP o ejecutando una      │  
  │   herramienta como «fetchmail». El correo de salida se envía utilizando  │  
  │   un «smarthost».                                                        │  
  │  Sólo correo local:                                                      │  
  │   El único correo que se entrega es para los usuarios locales. No        │  
  │   hay red.                                                               │  
  │                                                                          │  
  │ Tipo genérico de configuración de correo:                                │  
  │                                                                          │  
  │                         Sin configuración                                │  
  │                         Sitio de Internet                                │  
  │                         Internet con «smarthost»                         │  
  │                         Sistema satélite                                 │  
  │                         Sólo correo local                                │  
  │                                                                          │  
  │                                                                          │  
  │                   <Aceptar>                  <Cancelar>                  │  
  │                                                                          │  
  └──────────────────────────────────────────────────────────────────────────┘  

 ┌─────────────────────────┤ Postfix Configuration ├─────────────────────────┐  
 │ El «nombre de sistema de correo» es el nombre del dominio que se utiliza  │  
 │ para «cualificar» _TODAS_ las direcciones de correo sin un nombre de      │  
 │ dominio. Esto incluye el correo hacia y desde «root»: por favor, no haga  │  
 │ que su máquina envíe los correo electrónicos desde root@example.org a     │  
 │ menos que root@example.org se lo haya pedido.                             │  
 │                                                                           │  
 │ Otros programas utilizarán este nombre. Deberá ser un único nombre de     │  
 │ dominio cualificado (FQDN).                                               │  
 │                                                                           │  
 │ Por consiguiente, si una dirección de correo en la máquina local es       │  
 │ algo@example.org, el valor correcto para esta opción será example.org.    │  
 │                                                                           │  
 │ Nombre del sistema de correo:                                             │  
 │                                                                           │  
 │ master.swl.fan___________________________________________________________ │  
 │                                                                           │  
 │                    <Aceptar>                   <Cancelar>                 │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  

Limpiamos

root@master:~# aptitude purge ~c
root@master:~# aptitude install -f
root@master:~# aptitude clean
root@master:~# aptitude autoclean

Instalamos requisitos para compilar Samba 4 y otros paquetes necesarios

root@master:~# aptitude install acl attr autoconf bison \
build-essential debhelper dnsutils docbook-xml docbook-xsl flex gdb \
krb5-user libacl1-dev libaio-dev libattr1-dev libblkid-dev libbsd-dev \
libcap-dev libcups2-dev libgnutls28-dev libjson-perl \
libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl \
libpopt-dev libreadline-dev perl perl-modules pkg-config \
python-all-dev python-dev python-dnspython python-crypto \
xsltproc zlib1g-dev libgpgme11-dev python-gpgme python-m2crypto \
libgnutls28-dbg gnutls-dev ldap-utils krb5-config

 ┌───────────────┤ Configurando la autenticación de Kerberos ├───────────────┐  
 │ Cuando los usuarios intentan usar Kerberos y especifican un nombre        │  
 │ principal o de usuario sin aclarar a qué dominio administrativo de        │  
 │ Kerberos pertenece el principal, el sistema toma el reino                 │  
 │ predeterminado. El reino predeterminado también se puede utilizar como    │  
 │ el reino de un servicio de Kerberos que se ejecute en la máquina local.   │  
 │ Normalmente, el reino predeterminado es el nombre en mayúsculas del       │  
 │ dominio del DNS local.                                                    │  
 │                                                                           │  
 │ Reino predeterminado de la versión 5 de Kerberos:                         │  
 │                                                                           │  
 │ SWL.FAN__________________________________________________________________ │  
 │                                                                           │  
 │                                  <Aceptar>                                │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  
 ┌───────────────┤ Configurando la autenticación de Kerberos ├───────────────┐  
 │ Introduzca los nombres de los servidores Kerberos en el reino SWL.FAN de  │  
 │ Kerberos, separados por espacios.                                         │  
 │                                                                           │  
 │ Servidores de Kerberos para su reino:                                     │  
 │                                                                           │  
 │ master.swl.fan___________________________________________________________ │  
 │                                                                           │  
 │                                  <Aceptar>                                │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  
 ┌───────────────┤ Configurando la autenticación de Kerberos ├───────────────┐  
 │ Introduzca el nombre del servidor administrativo (cambio de contraseña)   │  
 │ para el reino SWL.FAN de Kerberos.                                        │  
 │                                                                           │  
 │ Servidor administrativo para su reino de Kerberos:                        │  
 │                                                                           │  
 │ master.swl.fan___________________________________________________________ │  
 │                                                                           │  
 │                                  <Aceptar>                                │  
 │                                                                           │  
 └───────────────────────────────────────────────────────────────────────────┘  

El proceso anterior se demoró un poco porque aun no tenemos instalado ningún servicio DNS. No obstante, escogió el dominio correctamente por la configuración del archivo /etc/hosts. Recordemos que en el archivo /etc/resolv.conf tenemos declarado como servidor de nombres de dominios a la IP 127.0.0.1.

Configuramos desde ahora el archivo /etc/ldap/ldap/conf

root@master:~# nano /etc/ldap/ldap.conf
BASE    dc=swl,dc=fan
URI ldap://master.swl.fan

Para que las consultas mediante el comando ldapsearch realizadas desde el usuario root sean del tipo ldapsearch -x -W cn=xxxx, debemos crear el archivo /root/.ldapsearc con el siguiente contenido:

root@master:~# nano .ldaprc
BINDDN  CN=Administrator,CN=Users,DC=swl,DC=fan

El sistema de archivos debe soportar ACL – Access Control List

root@master:~# nano /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>  <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=33acb024-291b-4767-b6f4-cf207a71060c / ext4 user_xattr,acl,barrier=1,noatime,errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
UUID=cb73228a-615d-4804-9877-3ec225e3ae32 none            swap    sw              0       0
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0

root@master:~# mount -a

root@master:~# touch testing_acl.txt
root@master:~# setfattr -n user.test -v test testing_acl.txt
root@master:~# setfattr -n security.test -v test2 testing_acl.txt
root@master:~# getfattr -d testing_acl.txt
# file: testing_acl.txt
user.test="test"

root@master:~# getfattr -n security.test -d testing_acl.txt
# file: testing_acl.txt
security.test="test2"

root@master:~# setfacl -m g:adm:rwx testing_acl.txt

root@master:~# getfacl testing_acl.txt
# file: testing_acl.txt
# owner: root
# group: root
user::rw-
group::r--
group:adm:rwx
mask::rwx
other::r--

Obtenemos la fuente del Samba 4, la compilamos, y la instalamos

Es muy recomendable descargar el archivo fuente de la versión Stable desde el sitio https://www.samba.org/. En nuestro ejemplo descargamos la versión samba-4.5.1.tar.gz hacia la carpeta /opt.

root@master:~# cd /opt
root@master:/opt# wget https://download.samba.org/pub/samba/stable/samba-4.5.1.tar.gz
root@master:/opt# tar xvfz samba-4.5.1.tar.gz
root@master:/opt# cd samba-4.5.1/

Opciones de Configuración

Si queremos personalizar las opciones de configuración, ejecutamos:

root@master:/opt/samba-4.5.1# ./configure --help

y con mucho cuidado seleccionar las que necesitemos. Es recomendable comprobar si el paquete descargado se puede instalar en la distribución Linux que estamos empleando, que en nuestro caso es Debian 8.6 Jessie:

root@master:/opt/samba-4.5.1# ./configure distcheck

Configuramos, Compilamos e Instalamos samba-4.5.1

  • A partir de los requisitos antes instalados y de los 8604 archivos (que conforman el compactado samba-4.5.1.tar.gz) que pesan unos 101.7 megas -incluyendo a las carpetas source3 y source4 que pesan unos 61.1 megas- obtendremos un sustituto de un Active Directory al estilo Microsoft, de una calidad y estabilidad mas que aceptables para cualquier ambiente de producción. Debemos destacar la labor del Team Samba en entregarnos el Software Libre Samba 4.

Los comandos a continuación son los clásicos para compilar e instalar paquetes a partir de sus fuentes. Debemos ser pacientes mientras dura todo el proceso. Es la única forma de obtener resultados válidos y correctos.

root@master:/opt/samba-4.5.1# ./configure --with-systemd --disable-cups
root@master:/opt/samba-4.5.1# make
root@master:/opt/samba-4.5.1# make install

Durante el proceso del comando make, podemos observar que se compilan las fuentes del Samba 3 y del Samba 4. Es por ello que el Team Samba afirma que su versión 4 es la actualización natural de la versión 3, tanto para Controladores de Dominio basados en Samba 3 + OpenLDAP, como servidores de ficheros, o versiones anteriores de Samba 4.

Provisioning Samba

Emplearemos como DNS el SAMBA_INTERNAL. En https://wiki.samba.org/index.php?title=Samba_Internal_DNS_Back_End encontraremos mas información. Cuando nos pidan la contraseña del usuario Administrator, debemos teclear una de longitud mínima de 8 caracteres y además, con letras -mayúsculas y minúsculas- y números.

Antes de proceder al aprovisionamiento y para facilitarnos la vida, agregamos el path de los ejecutables de Samba en nuestro archivo .bashrc, Después cerramos y volvemos a iniciar sesión.

root@master:~# nano .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
# export LS_OPTIONS='--color=auto'
# eval "`dircolors`"
# alias ls='ls $LS_OPTIONS'
# alias ll='ls $LS_OPTIONS -l'
# alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:\
/sbin:/bin:/usr/local/samba/sbin:/usr/local/samba/bin"

root@master:~# exit
logout
Connection to master closed.
xeon@sysadmin:~$ ssh root@master

root@master:~# samba-tool domain provision --use-rfc2307 --interactive
Realm [SWL.FAN]: SWL.FAN
 Domain [SWL]: SWL
 Server Role (dc, member, standalone) [dc]: dc
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: SAMBA_INTERNAL
 DNS forwarder IP address (write 'none' to disable forwarding) [192.168.10.5]: 8.8.8.8
Administrator password: TuPassword2017
Retype password: TuPassword2017
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=swl,DC=fan
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=swl,DC=fan
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              master
NetBIOS Domain:        SWL
DNS Domain:            swl.fan
DOMAIN SID:            S-1-5-21-32182636-2892912266-1582980556

No olvidemos copiar el archivo de configuración de Kerberos tal como indica la salida del Provisioning:

root@master:~# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf

Para no teclear el comando samba-tool con su nombre completo, creamos un enlace simbólico con el nombre corto tool:

root@master:~# ln -s /usr/local/samba/bin/samba-tool /usr/local/samba/bin/tool

Instalamos el NTP

Pieza fundamental en un Active Directory es el Servico de Tiempo de Red. Como la autenticación se realiza vía Kerberos y sus Tickets, la sincronización de la hora con el Samba 4 AD-DC es vital.

root@master:~# aptitude install ntp
root@master:~# mv /etc/ntp.conf /etc/ntp.conf.original

root@master:~# nano /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift
ntpsigndsocket  /usr/local/samba/var/lib/ntp_signd
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
server 192.168.10.1
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict default mssntp
restrict 127.0.0.1
restrict ::1
broadcast 192.168.10.255

root@master:~# service ntp restart
root@master:~# service ntp status

root@master:~# tail -f /var/log/syslog

Si al examinar el syslog mediante el comando anterior o mediante journalctl -f recibimos el mensaje:

Jun 19 12:13:21 master ntpd_intres[1498]: parent died before we finished, exiting

debemos reiniciar el servicio y volver a probar. Ahora creamos la carpeta ntp_signd:

root@master:~# ls -ld /usr/local/samba/var/lib/ntp_signd
ls: no se puede acceder a /usr/local/samba/var/lib/ntp_signd: No existe el fichero o el directorio

root@master:~# mkdir /usr/local/samba/var/lib/ntp_signd
root@master:~# chown root:ntp /usr/local/samba/var/lib/ntp_signd/
root@master:~# chmod 750 /usr/local/samba/var/lib/ntp_signd/
root@master:~# chmod g-s,g+x /usr/local/samba/var/lib/ntp_signd/

# Tal y como se pide en samba.wiki.org
root@master:~# ls -ld /usr/local/samba/var/lib/ntp_signd
drwxr-x--- 2 root ntp 4096 jun 19 12:21 /usr/local/samba/var/lib/ntp_signd

Configuramos el inicio de Samba mediante el systemd

root@master:~# nano /lib/systemd/system/samba-ad-dc.service
[Service]
Type=forking
PIDFile=/usr/local/samba/var/run/samba.pid
LimitNOFILE=16384
# EnvironmentFile=-/etc/conf.d/samba
ExecStart=/usr/local/samba/sbin/samba
ExecReload=/usr/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

root@master:~# systemctl enable samba-ad-dc
root@master:~# reboot

root@master:~# systemctl status samba-ad-dc
root@master:~# systemctl status ntp

Ubicación de los archivos del Samba 4 AD-DC

TODOSmenos el recién creado samba-ad-dc.service– los archivos se encuentran en:

root@master:~# ls -l /usr/local/samba/
total 32
drwxr-sr-x  2 root staff 4096 jun 19 11:55 bin
drwxr-sr-x  2 root staff 4096 jun 19 11:50 etc
drwxr-sr-x  7 root staff 4096 jun 19 11:30 include
drwxr-sr-x 15 root staff 4096 jun 19 11:33 lib
drwxr-sr-x  7 root staff 4096 jun 19 12:40 private
drwxr-sr-x  2 root staff 4096 jun 19 11:33 sbin
drwxr-sr-x  5 root staff 4096 jun 19 11:33 share
drwxr-sr-x  8 root staff 4096 jun 19 12:28 var

al mejor estilo de UNIX. Siempre es recomendable navegar por las diferentes carpetas y examinar sus contenidos.

Archivo /usr/local/samba/etc/smb.conf

root@master:~# nano /usr/local/samba/etc/smb.conf 
# Global parameters
[global]
    netbios name = MASTER
    realm = SWL.FAN
    workgroup = SWL
    dns forwarder = 8.8.8.8
    server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate, dns
    server role = active directory domain controller
    allow dns updates = secure only
    idmap_ldb:use rfc2307 = yes
    idmap config * : backend        = tdb
    idmap config * : range          = 1000000-1999999
    ldap server require strong auth = no
    printcap name = /dev/null

[netlogon]
    path = /usr/local/samba/var/locks/sysvol/swl.fan/scripts
    read only = No

[sysvol]
    path = /usr/local/samba/var/locks/sysvol
    read only = No

root@master:~# testparm
Load smb config files from /usr/local/samba/etc/smb.conf
Processing section "[netlogon]"
Processing section "[sysvol]"
Loaded services file OK.
Server role: ROLE_ACTIVE_DIRECTORY_DC

Press enter to see a dump of your service definitions

# Global parameters
[global]
    realm = SWL.FAN
    workgroup = SWL
    dns forwarder = 192.168.10.1
    ldap server require strong auth = No
    passdb backend = samba_dsdb
    server role = active directory domain controller
    rpc_server:tcpip = no
    rpc_daemon:spoolssd = embedded
    rpc_server:spoolss = embedded
    rpc_server:winreg = embedded
    rpc_server:ntsvcs = embedded
    rpc_server:eventlog = embedded
    rpc_server:srvsvc = embedded
    rpc_server:svcctl = embedded
    rpc_server:default = external
    winbindd:use external pipes = true
    idmap config * : range = 1000000-1999999
    idmap_ldb:use rfc2307 = yes
    idmap config * : backend = tdb
    map archive = No
    map readonly = no
    store dos attributes = Yes
    vfs objects = dfs_samba4 acl_xattr
[netlogon]
    path = /usr/local/samba/var/locks/sysvol/swl.fan/scripts
    read only = No
[sysvol]
    path = /usr/local/samba/var/locks/sysvol
    read only = No

Comprobaciones mínimas

root@master:~# tool domain level show
Domain and forest function level for domain 'DC=swl,DC=fan'

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2

root@master:~# ldapsearch -x -W

root@master:~# tool dbcheck
Checking 262 objects
Checked 262 objects (0 errors)

root@master:~# kinit Administrator
Password for Administrator@SWL.FAN: 
root@master:~# klist -f
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@SWL.FAN

Valid starting     Expires            Service principal
19/06/17 12:53:24  19/06/17 22:53:24  krbtgt/SWL.FAN@SWL.FAN
    renew until 20/06/17 12:53:18, Flags: RIA

root@master:~# kdestroy
root@master:~# klist -f
klist: Credentials cache file '/tmp/krb5cc_0' not found

root@master:~# smbclient -L localhost -U%
Domain=[SWL] OS=[Windows 6.1] Server=[Samba 4.5.1]

    Sharename       Type      Comment
    ---------       ----      -------
    netlogon        Disk      
    sysvol          Disk      
    IPC$            IPC       IPC Service (Samba 4.5.1)
Domain=[SWL] OS=[Windows 6.1] Server=[Samba 4.5.1]

    Server               Comment
    ---------            -------

    Workgroup            Master
    ---------            -------

root@master:~# smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password: 
Domain=[SWL] OS=[Windows 6.1] Server=[Samba 4.5.1]
  .                                   D        0  Mon Jun 19 11:50:52 2017
  ..                                  D        0  Mon Jun 19 11:51:07 2017

        19091584 blocks of size 1024. 16198044 blocks available

root@master:~# tool dns serverinfo master -U administrator

root@master:~# host -t SRV _ldap._tcp.swl.fan
_ldap._tcp.swl.fan has SRV record 0 100 389 master.swl.fan.

root@master:~# host -t SRV _kerberos._udp.swl.fan
_kerberos._udp.swl.fan has SRV record 0 100 88 master.swl.fan.

root@master:~# host -t A master.swl.fan
master.swl.fan has address 192.168.10.5

root@master:~# host -t SOA swl.fan
swl.fan has SOA record master.swl.fan. hostmaster.swl.fan. 1 900 600 86400 3600

root@master:~# host -t NS swl.fan
swl.fan name server master.swl.fan.

root@master:~# host -t MX swl.fan
swl.fan has no MX record

root@master:~# samba_dnsupdate --verbose

root@master:~# tool user list
Administrator
krbtgt
Guest

root@master:~# tool group list
# La salida es un montón de grupos. ;-)

Administramos al Samba 4 AD-DC recién instalado

Si queremos modificar la expiración en días de la contraseña del Administrador; la complejidad de las contraseñas; la longitud mínima de la contraseña; la duración -en días- mínima y máxima de la contraseña; y cambiar la contraseña del Administrador declarada durante el Provisioning, debemos ejecutar los siguientes comandos con los valores ajustados a sus necesidades:

root@master:~# tool
Usage: samba-tool <subcommand>
Main samba administration tool.
Options:
  -h, --help       show this help message and exit

  Version Options:
    -V, --version  Display version number
Available subcommands:
  dbcheck     - Check local AD database for errors.
  delegation  - Delegation management.
  dns         - Domain Name Service (DNS) management.
  domain      - Domain management.
  drs         - Directory Replication Services (DRS) management.
  dsacl       - DS ACLs manipulation.
  fsmo        - Flexible Single Master Operations (FSMO) roles management.
  gpo         - Group Policy Object (GPO) management.
  group       - Group management.
  ldapcmp     - Compare two ldap databases.
  ntacl       - NT ACLs manipulation.
  processes   - List processes (to aid debugging on systems without setproctitle).
  rodc        - Read-Only Domain Controller (RODC) management.
  sites       - Sites management.
  spn         - Service Principal Name (SPN) management.
  testparm    - Syntax check the configuration file.
  time        - Retrieve the time on a server.
  user        - User management.
For more help on a specific subcommand, please type: samba-tool <subcommand> (-h|--help)

root@master:~# tool user setexpiry administrator --noexpiry
root@master:~# tool domain passwordsettings set  --min-pwd-length=7
root@master:~# tool domain passwordsettings set  --min-pwd-age=0
root@master:~# tool domain passwordsettings set --max-pwd-age=60
root@master:~# tool user setpassword --filter=samaccountname=Administrator --newpassword=Passw0rD

Añadimos varios registros DNS

root@master:~# tool dns
Usage: samba-tool dns <subcommand>
Domain Name Service (DNS) management.
Options:
  -h, --help  show this help message and exit
Available subcommands:
  add         - Add a DNS record
  delete      - Delete a DNS record
  query       - Query a name.
  roothints   - Query root hints.
  serverinfo  - Query for Server information.
  update      - Update a DNS record
  zonecreate  - Create a zone.
  zonedelete  - Delete a zone.
  zoneinfo    - Query for zone information.
  zonelist    - Query for zones.
For more help on a specific subcommand, please type: samba-tool dns <subcommand> (-h|--help)

Servidor de correo

root@master:~# tool dns add master swl.fan mail A 192.168.10.9 -U administrator
root@master:~# tool dns add master swl.fan swl.fan MX "mail.swl.fan 10" -U administrator

IP fijas de otros servidores

root@master:~# tool dns add master swl.fan sysadmin A 192.168.10.1 -U administrator
root@master:~# tool dns add master swl.fan fileserver A 192.168.10.10 -U administrator
root@master:~# tool dns add master swl.fan proxy A 192.168.10.11 -U administrator
root@master:~# tool dns add master swl.fan chat A 192.168.10.12 -U administrator

Zona Inversa

root@master:~# tool dns zonecreate master 10.168.192.in-addr.arpa -U administrator
Password for [SWL\administrator]:
Zone 10.168.192.in-addr.arpa created successfully

root@master:~# tool dns add master 10.168.192.in-addr.arpa 5 PTR master.swl.fan. -Uadministrator
root@master:~# tool dns add master 10.168.192.in-addr.arpa 9 PTR mail.swl.fan. -Uadministrator
root@master:~# tool dns add master 10.168.192.in-addr.arpa 1 PTR sysadmin.swl.fan. -Uadministrator
root@master:~# tool dns add master 10.168.192.in-addr.arpa 10 PTR fileserver.swl.fan. -Uadministrator
root@master:~# tool dns add master 10.168.192.in-addr.arpa 11 PTR proxy.swl.fan. -Uadministrator
root@master:~# tool dns add master 10.168.192.in-addr.arpa 12 PTR chat.swl.fan. -Uadministrator

Comprobaciones

root@master:~# tool dns query master swl.fan mail ALL -U administrator
Password for [SWL\administrator]:
  Name=, Records=1, Children=0
    A: 192.168.10.9 (flags=f0, serial=2, ttl=900)

root@master:~# host master
master.swl.fan has address 192.168.10.5
root@master:~# host sysadmin
sysadmin.swl.fan has address 192.168.10.1
root@master:~# host mail
mail.swl.fan has address 192.168.10.9
root@master:~# host chat
chat.swl.fan has address 192.168.10.12
root@master:~# host proxy
proxy.swl.fan has address 192.168.10.11
root@master:~# host fileserver
fileserver.swl.fan has address 192.168.10.10
root@master:~# host 192.168.10.1
1.10.168.192.in-addr.arpa domain name pointer sysadmin.swl.fan.
root@master:~# host 192.168.10.5
5.10.168.192.in-addr.arpa domain name pointer master.swl.fan.
root@master:~# host 192.168.10.9
9.10.168.192.in-addr.arpa domain name pointer mail.swl.fan.
root@master:~# host 192.168.10.10
10.10.168.192.in-addr.arpa domain name pointer fileserver.swl.fan.
root@master:~# host 192.168.10.11
11.10.168.192.in-addr.arpa domain name pointer proxy.swl.fan.
root@master:~# host 192.168.10.12
12.10.168.192.in-addr.arpa domain name pointer chat.swl.fan.

Para Curiosos

root@master:~# ldbsearch -H /usr/local/samba/private/sam.ldb.d/\
DC=DOMAINDNSZONES,DC=SWL,DC=FAN.ldb | grep dn:

Añadimos usuarios

root@master:~# tool user
Usage: samba-tool user <subcommand>
User management.
Options:
  -h, --help  show this help message and exit
Available subcommands:
  add            - Create a new user.
  create         - Create a new user.
  delete         - Delete a user.
  disable        - Disable an user.
  enable         - Enable an user.
  getpassword    - Get the password fields of a user/computer account.
  list           - List all users.
  password       - Change password for a user account (the one provided in authentication).
  setexpiry      - Set the expiration of a user account.
  setpassword    - Set or reset the password of a user account.
  syncpasswords  - Sync the password of user accounts.
For more help on a specific subcommand, please type: samba-tool user <subcommand> (-h|--help)

root@master:~# tool user create trancos Trancos01
User 'trancos' created successfully
root@master:~# tool user create gandalf Gandalf01
User 'gandalf' created successfully
root@master:~# tool user create legolas Legolas01
User 'legolas' created successfully
root@master:~# tool user list
Administrator
gandalf
legolas
trancos
krbtgt
Guest

Administración mediante interfaz gráfica o vía cliente web

Visite wiki.samba.org para una detallada información sobre cómo instalar la herramienta de Microsoft RSAT o Remote Server Administración Tools. Si Usted no requiere de las clásicas políticas que brinda un Microsoft Active Directory, puede instalar el paquete ldap-account-manager el cual ofrece una sencilla interfaz para la administración mediante un navegador web.

En los sistemas operativos Windows Server se incluye el paquete de programas Microsoft Remote Server Administration Tools (RSAT).

Unimos al dominio a un cliente Windows 7 con nombre “seven”

Como no tenemos un servidor DHCP en la red, lo primero que debemos hacer es configurar la tarjeta de red del cliente con una IP fija, declarar que el DNS primario será la IP del samba-ad-dc, y comprobar que está activada la opción “Registrar la dirección de ésta conexión en el DNS”. No es ocioso comprobar que el nombre “seven” no está registrado aun en el DNS Interno de Samba.

Después que unimos el equipo al dominio y lo reiniciamos, intentemos iniciar sesión con el usuario “trancos“. Comprobaremos que todo funciona OK. También es recomendable chequear los logs del Cliente Windows y comprobar como se sincroniza la hora correctamente.

Los Administradores con alguna experiencia en Windows, encontrarán que cualquier comprobación que hagan en el cliente, arrojará resultados satisfactorios.

Resumen

Espero que sea útil el artículo a los lectores de la Comunidad DesdeLinux.

¡Adiós!

4 COMENTARIOS

  1. Articulo largo pero detallado, muy buen paso a paso de como hacer todo.

    Destaco NIS, la verdad si bien se de su existencia, nunca supe bien su funcionamiento, ya que para ser sincero siempre me dio la impresion de que estaba practicamente muerto al lado de LDAP y Samba 4.

    PD: Felicitaciones por tu nuevo proyecto personal! Una lastima que no vayas a seguir escribiendo aca, pero por lo menos hay un lugar donde seguirte.

  2. Genial la sección del NIS, me solidarizo con Gonzalo Martinez, lo conocía someramente pero no tenia idea de como implementarlo y en que situaciones se utiliza.
    Gracias una vez por tremendo “tronco” de articulo teórico y practico.
    Por ultimo nuevos éxitos en tu nuevo proyecto “gigainside”.

Dejar una respuesta