Guía Samba4 como Controlador de Dominio y Directorio Activo [Actualización]

Posted on agosto 19, 2013

0


Esta es la versión más reciente de esta guía para configurar Samba como un Controlador de Dominio y Directotrio Activo y, de hecho, la que se utilizó en el Bootcamp en FCLD Santiago el fin de semana pasado. Entre las mejoras con respecto a versiones anteriores de esta guía, tenemos a Bind 9.9.3 con soporte DLZ, NTP 4.2.6 y por supuesto Samba 4.1.0rc2.

Para los fines de esta guía se asume que ya tienes experiencia manejando servidor y clientes en un entorno Windows. Así como también experiencia con GNU/Linux, ya que no me detendré a explicar como usar el editor vi o el comando sed y herramientas como iptables, Selinux y los initscripts del sistema.

En el futuro próximo Samba se convertirá en una alternativa fiable, económica y robusta, que de la mano con GNU/Linux, encontrará su nicho las PyMES, y posiblemente empresas más grandes, para que las mismas puedan montar su estructura informática con Controlador de Dominio, Directorio Activo y los demás servicios que se pueden configurar en Linux como Proxy, Servidor Web, Base de Datos, etc.


Es un placer para mí ver cómo ha llegado a esta etapa luego de varios años recorridos. Pueden ver la lista de cambios y mejoras en el siguiente enlace.

SOTWARE QUE UTILIZAREMOS
Centos 6.4 32bits virtualizado en VirtualBox
Samba 4.1.0rc2
Bind 9.9.3
NTP 4.2.6p5
DHCP
Kerberos
Librerías de desarrollo (make, gcc, python, openssl, etc.)

Manos a la obra…

INSTALAR EL SISTEMA OPERATIVO 
CentOS 6.4 minimal en VirtualBox con dos interfaces de red y todo lo demás por defecto.
eth0 como NAT para tomar conexión a Internet (10.0.2.0/24)
eth1 Bridged a la LAN del Dominio (192.168.5.0/24)

Al finalizar la instalación y loguearnos por primera vez en el servidor cambiamos el hostname del mismo, deshabilitamos iptables y selinux para evitar inconvenientes hasta nuevo aviso.

[root@localhost ~]# sed -i 's/HOSTNAME=localhost.local/HOSTNAME=sambapdc01.mydomain.local/g' /etc/sysconfig/network 
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@localhost ~]# iptables -F
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
[root@localhost ~]# service iptables restart
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
[root@localhost ~]# hostname sambapdc01.mydomain.local
[root@localhost ~]# service network restart
Shutting down interface eth0: [ OK ]
Shutting down interface eth1: [ OK ]
Shutting down interface loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
Bringing up interface eth1: [ OK ]
[root@localhost ~]# logout

Al regresar, configuramos la Interfaz de red para actualizar y descargar paquetes. Esta interfaz está NAT en la configuración de la máquina virtual, pero editaremos el script ya que no nos interesa que el dhclient nos genere el fichero resolv.conf.

[root@sambapdc01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
DEFROUTE=yes
IPADDR=10.0.2.15
NETMASK=255.255.255.0
GATEWAY=10.0.2.2

Configurar la interfaz de red para el Dominio y red local, quedando de la siguiente manera.

[root@sambapdc01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1 
DEVICE=eth1
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=no
DEFROUTE=no
DNS1=127.0.0.1
IPADDR=192.168.5.1
NETMASK=255.255.255.0

Editamos el fichero resolv.conf para resolver nombres de Internet.

[root@sambapdc01 ~]# vi /etc/resolv.conf 
nameserver 8.8.8.8
nameserver 8.8.4.4

[root@sambapdc01 ~]# service network restart
Shutting down interface eth0: [ OK ]
Shutting down interface eth1: [ OK ]
Shutting down interface loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
Bringing up interface eth1: [ OK ]

[root@sambapdc01 ~]# reboot

ACTUALIZAR EL SISTEMA: Instalar dependencias, librerías de desarrollo y compilación, y otros servicios.

[root@sambapdc01 ~]# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt 
[root@sambapdc01 ~]# rpm -i http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
[root@sambapdc01 ~]# yum update -y
[root@sambapdc01 ~]# yum install -y man mlocate bash-completion nmap nano wget screen
[root@sambapdc01 ~]# yum install -y dhcp python-dns make gcc rpm-build libtool autoconf openssl-devel libacl-devel libblkid-devel gnutls-devel readline-devel python-devel gdb pkgconfig gtkhtml2 setroubleshoot-server setroubleshoot-plugins policycoreutils-python libsemanage-python setools-libs-python setools-libs krb5-server krb5-libs krb5-workstation popt-devel libxml2-devel libattr-devel key-utils-devel cyrus-sasl-devel libidn-devel libsepol-devel
[root@sambapdc01 ~]# reboot

DESCARGAR, INSTALAR BIND9 Compilaremos una versión reciente y le podremos soporte DLZ (Dinamyc Loadable Zones) como requiere Samba 4

[root@sambapdc01 ~]# mkdir /usr/src/bind9 
[root@sambapdc01 ~]# cd /usr/src/bind9
[root@sambapdc01 bind9]# wget ftp://ftp.ciril.fr/pub/isc/bind9/9.9.3/bind-9.9.3.tar.gz
[root@sambapdc01 bind9]# tar zxvf bind-9.9.3.tar.gz
[root@sambapdc01 bind9]# cd bind-9.9.3/
[root@sambapdc01 bind-9.9.3]# ./configure --sysconfdir=/etc/named --localstatedir=/var/named --with-gssapi=/usr/include/gssapi --with-dlopen=yes
[root@sambapdc01 bind-9.9.3]# make && make install
[root@sambapdc01 bind-9.9.3]# cd
[root@sambapdc01 ~]# groupadd -g 25 named
[root@sambapdc01 ~]# useradd -g named -u 25 -d /var/named -M -s /sbin/nologin named

DESCARGAR, INSTALAR NTP (MUY IMPORTANTE PARA QUE LOS SERVICIOS FUNCIONEN CORRECTAMENTE) Si no hay sincronización de tiempo entre servidor y clientes, muchos servicios no estarán disponibles para éstos últimos. Necesitamos una versión de NTP igual o superior a la 4.2.6 y con soporte signd. Lamentablemente la versión actual de CentOS no la provee, por lo que descargaremos el código fuente para compilarlo.

[root@sambapdc01 ~]# mkdir /usr/src/ntp4/
[root@sambapdc01 ~]# cd /usr/src/ntp4/
[root@sambapdc01 ntp4]# wget http://archive.ntp.org/ntp4/ntp-4.2/ntp-4.2.6p5.tar.gz
[root@sambapdc01 ntp4]# cd ntp-4.2.6p5/
[root@sambapdc01 ntp-4.2.6p5]# ./configure --enable-ntp-signd
[root@sambapdc01 ntp-4.2.6p5]# make && make install

DESCARGAR, INSTALAR SAMBA4

[root@sambapdc01 ~]# mkdir /usr/src/samba4 
[root@sambapdc01 ~]# cd /usr/src/samba4
[root@sambapdc01 samba4]# wget https://download.samba.org/pub/samba/rc/samba-4.1.0rc2.tar.gz
[root@sambapdc01 samba4]# tar zxvf samba-4.1.0rc2.tar.gz
[root@sambapdc01 samba4]# cd samba-4.1.0rc2/
[root@sambapdc01 samba-4.1.0rc2]# ./configure.developer && make && make install
[root@sambapdc01 samba-4.1.0rc2]# cd

Agregar la ruta de Samba4 al PATH

[root@sambapdc01 ~]# nano .bash_profile 
PATH=$PATH:$HOME/bin:/usr/local/samba/bin:/usr/local/samba/sbin
[root@sambapdc01 ~]# source .bash_profile

Verificamos que se instaló correctamente.

[root@sambapdc01 ~]# samba -V 
Version 4.1.0rc2

HACER LA PROVISIÓN DEL DOMINIO CON SAMBA4

[root@sambapdc01 ~]# samba-tool domain provision --realm=mydomain.local --domain=MYDOMAIN --adminpass 'solucion.123' --server-role=dc --dns-backend=BIND9_DLZ 
Looking up IPv4 addresses
More than one IPv4 address found. Using 192.168.5.1
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=mydomain,DC=local
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=mydomain,DC=local
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
See /usr/local/samba/private/named.conf for an example configuration include file for BIND
and /usr/local/samba/private/named.txt for further documentation required for secure DNS updates
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
Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: sambapdc01
NetBIOS Domain: MYDOMAIN
DNS Domain: mydomain.local
DOMAIN SID: S-1-5-21-4230643479-790999145-160529251

Antes de iniciar Samba4 por primera vez, configuramos BIND y Kerberos, los cuales son imprescindibles para su correcto funcionamiento.

CONFIGURAR DNS (BIND) Es importante perder todo el tiempo necesario para que este servicio esté a punto, ya que el funcionamiento de Samba4 depende totalmente del mismo. Crear el fichero /etc/named.conf Quedando de la siguiente manera:

[root@sambapdc01 ~]# nano /etc/named.conf 
options {
allow-query { localhost; 192.168.5.1; };
allow-update { localhost; 192.168.5.1; };
allow-transfer { localhost; 192.168.5.1; };
allow-recursion { localhost; 192.168.5.1; };
forwarders { 10.0.2.2; 8.8.8.8; };
tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab";
};
include "/usr/local/samba/private/named.conf";

Editar el fichero named.conf de Samba4 para que use dlopen para Bind 9.9.0 en adelante.

[root@sambapdc01 ~]# nano /usr/local/samba/private/named.conf
dlz "AD DNS Zone" {
# For BIND 9.8.0
# database "dlopen /usr/local/samba/lib/bind9/dlz_bind9.so";

# For BIND 9.9.0
database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_9.so";
};

Debemos generar el fichero rndc.key que corresponde a Bind, ya que al ser compilado y no de repositorios, no lo genera automáticamente.

[root@sambapdc01 ~]# rndc-confgen -a -r /dev/urandom
wrote key file "/etc/named/rndc.key"
[root@sambapdc01 ~]# chmod 766 /etc/named/rndc.key

Editar el fichero resolv.conf

[root@sambapdc01 ~]# nano /etc/resolv.conf 
domain mydomain.local
nameserver 127.0.0.1

INICIAMOS SAMBA PARA QUE EL MISMO CREE LA ESTRUCTURA DE ARCHIVOS Y CARPETAS NECESARIAS PARA SU FUNCIONAMIENTO. ESTO OCURRE AL INICIARLO POR PRIMERA VEZ.

[root@sambapdc01 ~]# samba -i -M single & 
samba version 4.1.0rc2 started.
Copyright Andrew Tridgell and the Samba Team 1992-2013
samba: using 'single' process model
Attempting to autogenerate TLS self-signed keys for https for hostname 'SAMBAPDC01.mydomain.local'
TLS self-signed keys generated OK

[root@sambapdc01 ~]# killall samba

Iniciamos Bind

[root@sambapdc01 ~]# /usr/local/sbin/named -u named -d 3 &

CONFIGURAR KERBEROS Editamos el fichero de configuración borrando todo y dejando solo lo siguiente.

[root@sambapdc01 ~]# nano /etc/krb5.conf 
[libdefaults]
default_realm = MYDOMAIN.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true

CONFIGURAR DHCP

[root@sambapdc01 ~]# vi /etc/dhcp/dhcpd.conf 
option domain-name "mydomain.local";
option domain-name-servers 192.168.5.1, 8.8.8.8;
option netbios-name-servers 192.168.5.1;
option ntp-servers 192.168.5.1;
authoritative;
subnet 192.168.5.0 netmask 255.255.255.0 {
range 192.168.5.10 192.168.5.20;
option broadcast-address 192.168.5.255;
option routers 192.168.5.1;
}

CONFIGURAR NTP Creamos el fichero ntp.conf para el servicio NTP, con el siguiente contenido

[root@sambapdc01 ~]# nano /etc/ntp.conf 
server 127.127.1.1
fudge 127.127.1.1 stratum 12
server 0.pool.ntp.org iburst prefer
server 1.pool.ntp.org iburst prefer
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp
ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/
restrict default mssntp
restrict 127.0.0.1
restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 1.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery

CONFIGURAR SELINUX A continuación aplicamos los permisos necesarios para que los servicios tengan acceso a los ficheros de configuración y Selinux no nos de problemas si lo habilitamos luego y poder hacer las pruebas de lugar. Aplicar permisos y crear políticas de Selinux (por si lo habilitamos luego)

[root@sambapdc01 ~]# chgrp root /usr/local/samba/var/lib/ntp_signd/ 
[root@sambapdc01 ~]# chmod 750 /usr/local/samba/var/lib/ntp_signd/
[root@sambapdc01 ~]# chown named:named /usr/local/samba/private/dns.keytab
[root@sambapdc01 ~]# chown named:named /usr/local/samba/private/named.conf
[root@sambapdc01 ~]# chmod 644 /usr/local/samba/private/dns.keytab
[root@sambapdc01 ~]# chmod 644 /usr/local/samba/private/named.conf
[root@sambapdc01 ~]# chown named:named /usr/local/samba/private/dns
[root@sambapdc01 ~]# chmod g+r /usr/local/samba/private/dns.keytab
[root@sambapdc01 ~]# chmod 775 /usr/local/samba/private/dns
[root@sambapdc01 ~]# chcon -t named_conf_t /usr/local/samba/private/dns.keytab
[root@sambapdc01 ~]# chcon -t named_conf_t /usr/local/samba/private/named.conf
[root@sambapdc01 ~]# chcon -t named_var_run_t /usr/local/samba/private/dns
[root@sambapdc01 ~]# semanage fcontext -a -t named_conf_t /usr/local/samba/private/dns.keytab
[root@sambapdc01 ~]# semanage fcontext -a -t named_conf_t /usr/local/samba/private/named.conf
[root@sambapdc01 ~]# semanage fcontext -a -t named_conf_t /usr/local/samba/private/named.conf.update
[root@sambapdc01 ~]# semanage fcontext -a -t named_var_run_t /usr/local/samba/private/dns
[root@sambapdc01 ~]# semanage fcontext -a -t ntpd_t /usr/local/samba/var/lib/ntp_signd
[root@sambapdc01 ~]# chcon -u system_u -t ntpd_t /usr/local/samba/var/lib/ntp_signd
[root@sambapdc01 ~]# chcon -u system_u -t ntpd_t /usr/local/samba/var/lib/
[root@sambapdc01 ~]# chcon -t ntpd_t /usr/local/samba/var/lib/ntp_signd/socket

Es posible que en los comandos chcon anteriores obtengamos una salida de error como esta: chcon: can’t apply partial context to unlabeled file `/usr/local/samba/var/lib/ntp_signd’ Por lo que crearemos una política para que nos permita el acceso.

[root@sambapdc01 ~]# nano samba4.te 
module samba4 1.0;
require {
type ntpd_t;
type usr_t;
type initrc_t;
class sock_file write;
class unix_stream_socket connectto;
}
#============= ntpd_t ==============
allow ntpd_t usr_t:sock_file write;

#============= ntpd_t ==============
allow ntpd_t initrc_t:unix_stream_socket connectto;

La revisamos y cargamos.

[root@sambapdc01 ~]# checkmodule -M -m -o samba4.mod samba4.te 
checkmodule: loading policy configuration from samba4.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 10) to samba4.mod
[root@sambapdc01 ~]# semodule_package -o samba4.pp -m samba4.mod
[root@sambapdc01 ~]# semodule -i samba4.pp
[root@sambapdc01 ~]# reboot

AL REGRESAR PROBAMOS TODO PARA VERIFICAR QUE ESTAMOS BIEN

[root@sambapdc01 ~]# /usr/local/sbin/named -u named -d 3 &
[root@sambapdc01 ~]# /usr/local/bin/ntpd &
[root@sambapdc01 ~]# service dhcpd start
Starting dhcpd: [ OK ]
[root@sambapdc01 ~]# samba -i -M single &
[1] 1287
samba version 4.1.0rc2 started.
Copyright Andrew Tridgell and the Samba Team 1992-2013
samba: using 'single' process model

Probando Kerberos

[root@sambapdc01 ~]# kinit administrator@MYDOMAIN.LOCAL 
Password for administrator@MYDOMAIN.LOCAL:
Warning: Your password will expire in 41 days on Thu Sep 5 16:42:14 2013

[root@sambapdc01 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@MYDOMAIN.LOCAL

Valid starting Expires Service principal
07/25/13 17:01:47 07/26/13 03:01:47 krbtgt/MYDOMAIN.LOCAL@MYDOMAIN.LOCAL
renew until 07/26/13 17:01:41

Probando Samba4

[root@sambapdc01 ~]# smbclient -L localhost -U% 
Domain=[MYDOMAIN] OS=[Unix] Server=[Samba 4.1.0rc2]

Sharename Type Comment
--------- ---- -------
netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.1.0rc2)
Domain=[MYDOMAIN] OS=[Unix] Server=[Samba 4.1.0rc2]

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

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

[root@sambapdc01 ~]# smbclient //localhost/netlogon -UAdministrator%'solucion.123' -c 'ls'
Domain=[MYDOMAIN] OS=[Unix] Server=[Samba 4.1.0rc2]
. D 0 Thu Jul 25 16:41:45 2013
.. D 0 Thu Jul 25 16:42:22 2013

52475 blocks of size 131072. 33551 blocks available

Podemos visualizar los usuarios y grupos:

[root@sambapdc0a1 ~]# wbinfo -u 
Administrator
Guest
krbtgt
dns-sambapdc01

[root@sambapdc01 ~]# wbinfo -g
Enterprise Read-Only Domain Controllers
Domain Admins
Domain Users
Domain Guests
Domain Computers
Domain Controllers
Schema Admins
Enterprise Admins
Group Policy Creator Owners
Read-Only Domain Controllers
DnsUpdateProxy

[root@sambapdc01 ~]# samba-tool dns query 127.0.0.1 mydomain.local @ ALL
Password for [administrator@MYDOMAIN.LOCAL]:
Name=, Records=3, Children=0
SOA: serial=1, refresh=900, retry=600, expire=86400, minttl=0, ns=sambapdc01.mydomain.local., email=hostmaster.mydomain.local. (flags=600000f0, serial=1, ttl=3600)
NS: sambapdc01.mydomain.local. (flags=600000f0, serial=1, ttl=900)
A: 192.168.5.1 (flags=600000f0, serial=1, ttl=900)
Name=_msdcs, Records=0, Children=0
Name=_sites, Records=0, Children=1
Name=_tcp, Records=0, Children=4
Name=_udp, Records=0, Children=2
Name=DomainDnsZones, Records=0, Children=2
Name=ForestDnsZones, Records=0, Children=2
Name=sambapdc01, Records=1, Children=0
A: 192.168.5.1 (flags=f0, serial=1, ttl=900)

Probando DNS (BIND)

[root@sambapdc01 ~]# host -t SRV _ldap._tcp.mydomain.local. 
_ldap._tcp.mydomain.local has SRV record 0 100 389 sambapdc01.mydomain.local.

[root@sambapdc01 ~]# host -t SRV _kerberos._udp.mydomain.local.
_kerberos._udp.mydomain.local has SRV record 0 100 88 sambapdc01.mydomain.local.

[root@sambapdc01 ~]# host -t A sambapdc01.mydomain.local.
sambapdc01.mydomain.local has address 10.0.2.15
sambapdc01.mydomain.local has address 192.168.5.1

Probando el DNS Dinámico Editar el fichero smb.conf y agregar la siguiente línea en la sección [global]

[root@sambapdc01 ~]# nano /usr/local/samba/etc/smb.conf
nsupdate command = /usr/local/bin/nsupdate

[root@sambapdc01 ~]# samba_dnsupdate --verbose --all-names
IPs: ['192.168.5.1', '10.0.2.15']
Calling nsupdate for A mydomain.local 192.168.5.1
Outgoing update query:
...
...
...

CREAR EL SCRIPT PARA EL DAEMON DE SAMBA4

[root@sambapdc01 ~]# nano /etc/rc.d/init.d/samba4 
#! /bin/bash
#
# samba4 Bring up/down samba4 service
#
# chkconfig: - 90 10
# description: Activates/Deactivates all samba4 interfaces configured to \
# start at boot time.
#
### BEGIN INIT INFO
# Provides:
# Should-Start:
# Short-Description: Bring up/down samba4
# Description: Bring up/down samba4
### END INIT INFO
# Source function library.
. /etc/init.d/functions

if [ -f /etc/sysconfig/samba4 ]; then
. /etc/sysconfig/samba4
fi

CWD=$(pwd)
prog="samba4"

start() {
# Attach irda device
echo -n $"Starting $prog: "
/usr/local/samba/sbin/samba
sleep 4
if ps ax | grep -v "grep" | grep -q /samba/sbin/samba ; then success $"samba4 startup"; else failure $"samba4 startup"; fi
echo
}
stop() {
# Stop service.
echo -n $"Shutting down $prog: "
killall samba
sleep 6
if ps ax | grep -v "grep" | grep -q /samba/sbin/samba ; then failure $"samba4 shutdown"; else success $"samba4 shutdown"; fi
echo
}
status() {
/usr/local/samba/sbin/samba --show-build
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status irattach
;;
restart|reload)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac

exit 0

CREAR EL SCRIPT PARA EL DAEMON DE BIND9

[root@sambapdc01 ~]# nano /etc/rc.d/init.d/named9 
#! /bin/bash
#
# bind9 Bring up/down bind9 service
#
# chkconfig: - 90 10
# description: Activates/Deactivates all bind9 interfaces configured to \
# start at boot time.
#
### BEGIN INIT INFO
# Provides:
# Should-Start:
# Short-Description: Bring up/down bind9
# Description: Bring up/down bind9
### END INIT INFO
# Source function library.
. /etc/init.d/functions

if [ -f /etc/sysconfig/bind9 ]; then
. /etc/sysconfig/bind9
fi

CWD=$(pwd)
prog="bind9"

start() {
# Attach irda device
echo -n $"Starting $prog: "
/usr/local/sbin/named -u named
sleep 6
if ps ax | grep -v "grep" | grep -q /sbin/named ; then success $"bind9 startup"; else failure $"bind9 startup"; fi
echo
}
stop() {
# Stop service.
echo -n $"Shutting down $prog: "
killall named
sleep 6
if ps ax | grep -v "grep" | grep -q /sbin/named ; then failure $"bind9 shutdown"; else success $"bind9 shutdown"; fi
echo
}
status() {
/usr/local/sbin/named -V
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status irattach
;;
restart|reload)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac

exit 0

CREAR EL SCRIPT PARA EL DAEMON DE NTP4

[root@sambapdc01 ~]# nano /etc/rc.d/init.d/ntpd4 
#! /bin/bash
#
# ntp4 Bring up/down ntp4 service
#
# chkconfig: - 90 10
# description: Activates/Deactivates all ntp4 interfaces configured to \
# start at boot time.
#
### BEGIN INIT INFO
# Provides:
# Should-Start:
# Short-Description: Bring up/down ntp4
# Description: Bring up/down ntp4
### END INIT INFO
# Source function library.
. /etc/init.d/functions

if [ -f /etc/sysconfig/ntp4 ]; then
. /etc/sysconfig/ntp4
fi

CWD=$(pwd)
prog="ntp4"

start() {
# Attach irda device
echo -n $"Starting $prog: "
/usr/local/bin/ntpd
sleep 2
if ps ax | grep -v "grep" | grep -q /bin/ntpd ; then success $"ntp4 startup"; else failure $"ntp4 startup"; fi
echo
}
stop() {
# Stop service.
echo -n $"Shutting down $prog: "
killall ntpd
sleep 2
if ps ax | grep -v "grep" | grep -q /bin/ntpd ; then failure $"ntp4 shutdown"; else success $"ntp4 shutdown"; fi
echo
}
status() {
/usr/local/bin/ntpd --help
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status irattach
;;
restart|reload)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac

exit 0

Les damos los permisos necesarios

[root@sambapdc01 ~]# chmod 755 /etc/init.d/samba4 
[root@sambapdc01 ~]# chmod 755 /etc/init.d/named9
[root@sambapdc01 ~]# chmod 755 /etc/init.d/ntpd4

ACTIVAMOS LOS SERVICIOS PARA QUE INICIEN EN EL ARRANQUE DEL SISTEMA

[root@sambapdc01 ~]# chkconfig samba4 --level 345 on 
[root@sambapdc01 ~]# chkconfig dhcpd --level 345 on
[root@sambapdc01 ~]# chkconfig named9 --level 345 on
[root@sambapdc01 ~]# chkconfig ntpd4 --level 345 on

CONFIGURAR EL SERVIDOR PARA COMPARTIR CONEXIÓN A INTERNET. Esta parte es opcional, pero muy importante, sobre todo si luego queremos configurar un proxy como Squid para filtrar el contenido de navegación en la red local y mantener un cache de los datos de navegación de los usuarios.

[root@sambapdc01 ~]# iptables -F 
[root@sambapdc01 ~]# iptables -P INPUT ACCEPT
[root@sambapdc01 ~]# iptables -P FORWARD ACCEPT
[root@sambapdc01 ~]# iptables -P OUTPUT ACCEPT
[root@sambapdc01 ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@sambapdc01 ~]# iptables -A INPUT -p icmp -j ACCEPT
[root@sambapdc01 ~]# iptables -A INPUT -i lo -j ACCEPT
[root@sambapdc01 ~]# iptables -A INPUT -i eth0 -j ACCEPT
[root@sambapdc01 ~]# iptables -A INPUT -i eth1 -j ACCEPT
[root@sambapdc01 ~]# iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
[root@sambapdc01 ~]# iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@sambapdc01 ~]# iptables -A FORWARD -p icmp -j ACCEPT
[root@sambapdc01 ~]# iptables -A FORWARD -i lo -j ACCEPT
[root@sambapdc01 ~]# iptables -A FORWARD -i eth0 -j ACCEPT
[root@sambapdc01 ~]# iptables -A FORWARD -i eth1 -j ACCEPT
[root@sambapdc01 ~]# iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
[root@sambapdc01 ~]# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
[root@sambapdc01 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
[root@sambapdc01 ~]# chkconfig iptables --level 345 on
[root@sambapdc01 ~]# service iptables restart
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: nat filter [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
[root@sambapdc01 ~]# sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
[root@sambapdc01 ~]# sysctl -w && service network restart

COMPROBAR DESDE UN HOST DEL DOMINIO QUE EL SERVIDOR ESTA FUNCIONANDO

[root@rainbow ~]# nmap 192.168.5.1 

Starting Nmap 6.25 ( http://nmap.org ) at 2013-06-24 08:57 AST
Nmap scan report for 192.168.5.1
Host is up (0.030s latency).
Not shown: 987 closed ports
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
88/tcp open kerberos-sec
111/tcp open rpcbind
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
636/tcp open ldapssl
1024/tcp open kdm
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl

Nmap done: 1 IP address (1 host up) scanned in 0.46 seconds

VISUALIZAR LOS ROLES DEL CONTROLADOR DE DOMINIO SAMBA4. Estos son:

  1. SchemaMasterRole: Es el único controlador de dominio encargado de las actualizaciones del Esquema del Active Directory 
  2. DomainNamingMasterRole: Es el controlador de dominio responsable de realizar los cambios al espacio de nombres del directorio de todo el bosque 
  3. RidAllocationMasterRole: Es el único responsable de procesar los requerimientos de identificadores relativos de todos los controladores de dominio dentro de un dominio dado. También es el responsable de quitar un objeto de su dominio y colocarlo en otro dominio durante la reubicación del objeto. 
  4. PdcEmulationMasterRole: Es necesario para actualizar la hora en la empresa. Windows 2000/XP/2003/Vista incluyen el servicio W32time que es requerido por el protocolo de autenticación Kerberos.
  5. InfrastructureMasterRole: Cuando un objeto en un dominio hace referencia a otro objeto en otro dominio, este lo hace mediante el GUID, el SID y el DN del objeto que esta siendo referenciado. El Infrastructure Master es el controlador de dominio responsable de actualizar el SID y el Distinguished Name de un objeto en una referencia de objeto entre dominios.

[root@sambapdc01 ~]# samba-tool fsmo show
InfrastructureMasterRole owner: CN=NTDS Settings,CN=SAMBAPDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=mydomain,DC=local
RidAllocationMasterRole owner: CN=NTDS Settings,CN=SAMBAPDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=mydomain,DC=local
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=SAMBAPDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=mydomain,DC=local
DomainNamingMasterRole owner: CN=NTDS Settings,CN=SAMBAPDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=mydomain,DC=local
SchemaMasterRole owner: CN=NTDS Settings,CN=SAMBAPDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=mydomain,DC=local

AUNQUE FALTAN LAS CONFIGURACIONES SIGUIENTES PARA SU CORRECTO FUNCIONAMIENTO, YA NUESTRO CONTROLADOR DE DOMINIO ESTA LISTO PARA USARSE, POR LO QUE PODEMOS AGREGAR AL DOMINIO CLIENTES WINDOWS EN LA MISMA FORMA TRADICIONAL CON SERVIDORES WINDOWS. 

CONFIGURAR UNA CARPETA COMPARTIDA El proceso de provisión creó el archivo de configuración de Samba4 ubicado en /usr/local/samba/etc/smb.conf el cual no tiene recursos compartidos configurados. Así que agregaremos un recurso compartido a modo de prueba.

[root@sambapdc01 ~]# mkdir /root/Shared 
[root@sambapdc01 ~]# nano /usr/local/samba/etc/smb.conf
[Shared]
path = /root/Shared
comment = Root's shared folder
read only = yes

En las versiones anteriores de Samba4 es necesario reiniciar el servicio para que los compartidos se hagan visibles.

AGREGAR IMPRESORAS COMPARTIDAS Podemos compartir las impresoras conectadas al servidor usando CUPS, y ya que Samba4 se comunica con CUPS vía sockets, no es necesario hacer configuración o dar permisos mas que escuchar la directiva del socket de CUPS.

[root@sambapdc01 ~]# mkdir /usr/local/samba/var/spool 
[root@sambapdc01 ~]# chmod 1777 /usr/local/samba/var/spool

Editamos el fichero de configuración de Samba4 y agregamos lo siguiente.

[root@sambapdc01 ~]# nano /usr/local/samba/etc/smb.conf 
[printers]
path = /usr/local/samba/var/spool
comment = All Printers
browseable = Yes
read only = No
printable = Yes

Por conveniencia los clientes Windows pueden consultar el servidor que sirve las impresoras en busca de controladores. Para habilitar esta funcionalidad en Samba4 debemos crear el compartido especial print$.

[root@sambapdc01 ~]# mkdir -p /usr/local/samba/var/print/{COLOR,IA64,W32ALPHA,W32MIPS,W32PPC,W32X86,WIN40,x64} 
[root@sambapdc01 ~]# nano /usr/local/samba/etc/smb.conf
[print$]
path = /usr/local/samba/var/print
comment = Point and Print Printer Drivers
read only = No

Nota: No es necesario reiniciar el daemon de Samba4

AGREGAR MAS USUARIOS AL ACTIVE DIRECTORY DE SAMBA4. Al contrario que en versiones anteriores, Samba4 no requiere un usuario local por cada usuario que creamos en Samba.

[root@sambapdc01 ~]# samba-tool user add fraterneo 
New Password:
Retype Password:
User 'fraterneo' created successfully

Lo verificamos viendo su SID

[root@sambapdc01 ~]# wbinfo --name-to-sid fraterneo 
S-1-5-21-4036476082-4153129556-3089177936-1005 SID_USER (1)

CONFIGURANDO ROAMING PROFILES

[root@sambapdc01 ~]# mkdir /usr/local/samba/var/profiles 

Editamos el fichero de configuracion de Samba4 y agregamos lo siguiente.

[root@sambapdc01 ~]# nano /usr/local/samba/etc/smb.conf 
[profiles]
path = /usr/local/samba/var/profiles
read only = No

En Windows usando RSAT vamos a Active Directory Users and Computers, seleccionamos todos lo usuarios, clic al botón derecho del mouse y abrimos Properties. Luego en la pestaña Profile, colocamos la siguiente ruta tal como está.

\\sambapdc01.mydomain.local\profiles\%USERNAME% 

También hay que darle los permisos desde Windows a la carpeta profiles. Entramos como usuario administrator en el cliente Windows y abrimos el servidor CentOS (sambapdc01) desde Inicio > Ejecutar > \\sambapdc01, luego vamos a Propiedades de la carpeta profiles y en la pestaña Seguridad aplicamos los permisos para que todos los usuarios puedan crear su profile en la forma típica como se hace en un servidor Windows.

PROBANDO SINCRONIZACION DEL TIEMPO. Desde un cliente Windows probamos que nuestro servidor esté sincronizando el tiempo.

C:\>w32tm /resync /rediscover 
Enviando comando Resync a local computer...
El comando se ha completado correctamente.