8 de septiembre de 2014

Instalación de Samba4 como Controlador de Dominio AD en CentOS 6.5.

Hola.

Este fin de semana me quedé encerrado porque estoy enfermo. Aburrido como estaba me dio por ponerme al día con un trabajito que tenía pendiente: instalar un nuevo servidor con GNU/Linux y samba 4 como Active Directory Domain Controller para reemplazar uno con Slackware y samba 3.6.

La distro que elegí es CentOS 6 porque como servidor está muy probado, es muy estable y hay una excelente comunidad de usuarios y documentación de apoyo. Además la conozco muy de cerca porque es mi PC de escritorio en mi lugar de trabajo.
Explicar conceptos como "distro" está fuera del objetivo de esta publicación, si quieres aprender puedes empezar cliqueando aquí.

Y ahora vamos a los pasos que seguí en el proceso, guiado por la documentación que cito al final. Se supone que el servidor que estamos instalando tiene conexión a Internet.

1. Instalar el SO CentOS 6.

Instalé CentOS 6 sobre una partición LVM (Logical Volume Manager), dejando espacio libre en el disco para otra partición LVM de datos (a trabajar más adelante). Recomiendo aprender a usar LVM en Linux porque da mucha flexibilidad para resolver problemas de espacio en disco, evitando reparticionar y reiniciar servidores, ver en la bibliografía al final.

Yo instalé desde un DVD con la versión 6.2, y dejé 3 particiones así:

/boot      ext3 256 MB
/dev/sda2  LVM   64 GB
/dev/sda3  LVM  232 GB

/boot guarda ficheros necesarios para que el SO inicie y tiene que ser de tipo ext3 o ext4, /dev/sda2 será la que contenga el SO, y /dev/sda3 contendrá las particiones de datos. En las dos últimas hay mucho espacio para hacer crecer los sistemas de ficheros que alojen, llegado el caso, y esa es la utilidad de que sean de tipo LVM.

Sobre la partición ``/dev/sda2'' creé un VG (Volume Group), y sobre él los LVs (Logical Volume) para el sistema operativo:

/dev/mapper/vgservidor1-lvhome on /home type ext4 (rw)
/dev/mapper/vgservidor1-lvopt on /opt type ext4 (rw)
/dev/mapper/vgservidor1-lvtmp on /tmp type ext4 (rw)
/dev/mapper/vgservidor1-lvusr on /usr type ext4 (rw)
/dev/mapper/vgservidor1-lvvar on /var type ext4 (rw)


y el área de paginación (o swap)

/dev/mapper/vgservidor1-lvswap  swap  swap

Nuevamente, no voy a explicar en profundidad los conceptos de LVM acá, pero estúdienlo y úsenlo si van a administrar cualquier SO tipo Unix.

2. Actualizar el SO.

Una vez instalado el SO lo actualicé a la última versión estable (6.5 a la fecha) con el comando

# yum -y update --skip-broken

3. Crear usuario regular.

Terminada la actualización y reiniciado el sistema (para que ejecutara el núcleo nuevo), creé un usuario para mí que fuera miembro del grupo ``wheel'' (como el ``root''), habilité para el grupo ``wheel'' la ejecución de todos los comandos via sudo, e inhabilité el acceso de ``root'' remoto.

# useradd -c Nicolas -g wheel -G users -m nconde
# visudo

Se abre el fichero ``/etc/sudoers'', en él descomenté la línea que dice

# %wheel  ALL=(ALL)       ALL

borrándole el signo ``#'' del principio. Guardé el fichero y lo cerré.

# vim /etc/ssh/sshd_config

Aquí cambié las líneas

#PermitRootLogin yes

por

PermitRootLogin no

y

#PermitUserEnvironment no

por

PermitUserEnvironment yes

Lo guardé, salí del editor y reinicié el servicio ``sshd'' con

# service sshd restart

A partir de este momento cerré la sesión remota del usuario ``root'' y abrí una nueva con ``nconde''.

4. Pasar SELinux a modo permisivo.

Bajé el nivel de SELinux editando su fichero de configuración:

$ sudo vim /etc/sysconfig/selinux
SELINUX=permissive


5. Eliminar Samba 3.

Quité todos los paquetes de samba que había instalado el sistema operativo:

$ sudo yum remove samba*

6. Descargar, compilar e instalar Samba 4.

6.1. Descargué el paquete de fuentes de samba 4 desde el sitio oficial de Samba, y lo descomprimí en el home directory de mi usuario:

$ tar -xvzf samba-4.1.11.tar.gz
$ cd samba-4.1.11


6.2. Instalé los paquetes necesarios (prerrequisitos) según la documentación oficial:

$ sudo yum install gcc libacl-devel libblkid-devel gnutls-devel \
   readline-devel python-devel gdb pkgconfig krb5-workstation \
   zlib-devel setroubleshoot-server libaio-devel \
   setroubleshoot-plugins policycoreutils-python \
   libsemanage-python setools-libs-python setools-libs \
   popt-devel libpcap-devel sqlite-devel libidn-devel \
   libxml2-devel libacl-devel libsepol-devel libattr-devel \
   keyutils-libs-devel cyrus-sasl-devel cups-devel bind-utils


6.3. Configuré y construí los binarios y bibliotecas.

# ./configure --enable-debug --enable-selftest
# make


6.4. Instalé samba 4 y creé el fichero de arranque para el sistema.

# make install

Una vez que terminó la copia de ficheros (casi 5000, paciencia), creé el script de inicio ``/etc/init.d/samba4'' como lo da la documentación de Samba y que dice así:

$ sudo vim /etc/init.d/samba4

[code]
#!/bin/bash
#
# samba4        This shell script takes care of starting and stopping
#               samba4 daemons.
#
# chkconfig: - 58 74
# description: Samba 4.0 will be the next version of the Samba suite
# and incorporates all the technology found in both the Samba4 alpha
# series and the stable 3.x series. The primary additional features
# over Samba 3.6 are support for the Active Directory logon protocols
# used by Windows 2000 and above.

### BEGIN INIT INFO
# Provides: samba4
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop samba4
# Description: Samba 4.0 will be the next version of the Samba suite
# and incorporates all the technology found in both the Samba4 alpha
# series and the stable 3.x series. The primary additional features
# over Samba 3.6 are support for the Active Directory logon protocols
# used by Windows 2000 and above.
### END INIT INFO

# Source function library.
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

prog=samba
prog_dir=/usr/local/samba/sbin/
lockfile=/var/lock/subsys/$prog


start() {
        [ "$NETWORKING" = "no" ] && exit 1
#       [ -x /usr/sbin/ntpd ] || exit 5

                # Start daemons.
                echo -n $"Starting samba4: "
                daemon $prog_dir/$prog -D
        RETVAL=$?
                echo
        [ $RETVAL -eq 0 ] && touch $lockfile
        return $RETVAL
}


stop() {
        [ "$EUID" != "0" ] && exit 4
                echo -n $"Shutting down samba4: "
        killproc $prog_dir/$prog
        RETVAL=$?
                echo
        [ $RETVAL -eq 0 ] && rm -f $lockfile
        return $RETVAL
}

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

[/code]

$ sudo ln -s /etc/init.d/samba4 /etc/rc.d/rc3.d/S80samba4
$ sudo chmod 755 /etc/init.d/samba4
$ sudo /etc/init.d/samba4 restart



7. Crear el dominio.

Con samba corriendo ya, creé el dominio con el comando

$ sudo /usr/local/samba/bin/samba-tool domain provision

y dejando todos los valores por defecto salvo el nombre del REALM (en mayúsculas, es muy importante) y la clave del usuario ``Administrator''.


8. Probar funcionamiento de Samba 4.

Para probar que samba 4 estaba funcionando con el dominio creado ejecuté

$ /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator -c 'ls'


9. Agregar el directorio de documentación.

Agregué la ruta a las páginas de manual de Samba para que las encuentre el comando ``man'':

$ sudo vim /etc/man.config

Agregué la línea

MANPATH /usr/local/samba/share/man

después de la última que encontré comenzando con ``MANPATH''.


10. Configurar DNS.

Active Directory trae un servidor de nombres, y Samba 4 también, así que configuré y probé el DNS interno de Samba en lugar de ``bind'' u otro.

$ vim /etc/resolv.conf

Agregué las dos líneas siguientes:

[code]
domain <nombre_dominio>
nameserver <ip_del_servidor>

[/code]

Pruebo que haya resolución de nombres:

$ host -t A <fqdm_del_servidor>

Debe devolver una línea con la dirección IP del mismo.


11. Configurar Kerberos.

Respaldé el fichero de configuración original de kerberos:

$ sudo mv /etc/krb5.conf /etc/krb5.conf.orig

y enlacé (se puede copiar también) el creado por la configuración de samba4:

$ sudo ln -s /usr/local/samba/private/krb5.conf /etc/

Pruebo que haya tickets kerberos:

$ kinit Administrator@<REALM>
$ klist
Ticket cache: FILE:/tmp/krb5cc_500
Default principal: Administrator@<REALM>

Valid starting     Expires            Service principal
[...]


¡Funciona!


12. Configurar el cortafuegos.

A continuación abrí los puertos que usa Samba en el firewall. En CentOS, Fedora, etc. se ejecuta:

$ sudo system-config-firewall-tui

Elegí ``Personalizar'', marqué ``Samba'' en la ventana de ``Servicios confiables'', guardé mos cambios y reinicié el firewall con

$ sudo service iptables restart

Verifico las reglas con

$ sudo iptables -L


13. Crear particiones a compartir.

Mi controlador de dominio también hace las veces de servidor de ficheros, así que creé las particiones para exportar a los usuarios en el dominio.
Nuevamente: estudien LVM.

13.1. Preparar las particiones.

$ sudo vgcreate vgdata /dev/sda3
$ sudo lvcreate -L 64G -n lvadmin vgdata
$ sudo mkfs -t ext4 /dev/mapper/vgdata-lvadmin

$ sudo mkdir -p /export/samba/admin

Explicado muy someramente: sobre la partición LVM /dev/sda3 del paso 1, creé un VG (volume group) llamado ``vgdata'', en ese VG creé un LV (logical volume) llamado ``lvadmin'' que ocupa 64 GB, el LV contiene un file system a compartir ("carpetas compartidas" las llaman los administradores Windows), que creé en el tercer comando.
Con el cuarto comando creé el directorio donde se montará el file system.

13.2. Agregar las particiones a ``/etc/fstab''.

Para que el SO disponga de los sistemas de ficheros (file systems) y pueda usarlos, hay que montarlos: decir desde qué directorio se accede cada uno.
Para que el SO monte los FS al iniciarse (bootear), los agregué al fichero ``/etc/fstab'' como se muestra a continuación:

/dev/mapper/vgdata-lvadmin    /export/samba/admin   ext4    defaults,user_xattr,acl,barrier=1    1 2

Las opciones las da la documentación oficial de Samba:

"ext4
fstab

For filesystems of that type shared by Samba, add the following options to your /etc/fstab:

/dev/...          /srv/samba/demo          ext4          user_xattr,acl,barrier=1          1 1

Note: The ``barrier=1“ option ensures that tdb transactions are safe against unexpected power loss.

Please be careful modifying your fstab. It can lead into an unbootable system!
"


14. Exportar los file systems.

Para que los usuarios del dominio puedan acceder a los directorios compartidos... hay que compartirlos. Eso se hace desde el fichero ``/usr/local/samba/etc/smb.conf'':

$ vim /usr/local/samba/etc/smb.conf

[pub]
    comment = Un comentario con espacios
    path = /export/samba/admin
    read only = No


$ sudo /etc/init.d/samba restart


Y eso ha sido todo. Cuando lo haya instalado y probado con clientes informaré del progreso.

Hasta la próxima.


Bibliografía:
  • https://wiki.samba.org/index.php/Samba_AD_DC_HOWTO
  • https://wiki.samba.org/index.php/Samba_AD_DC_HOWTO
  • http://tldp.org/HOWTO/pdf/LVM-HOWTO.pdf (en Inglés)
  • http://rm-rf.es/gestion-de-lvm-en-linux-logical-volume-manager/


A/C Nicolás Conde González.



Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional.

No hay comentarios:

Publicar un comentario