Servidor de dominio en ubuntu server 12.04.2 con samba 4

Servidor de dominio en ubuntu server 12.04.2 con samba 4
Os dejo un tuto sobre como montar un servidor de dominio con samba 4.

A continuación voy a explicar 2 métodos de como hacerlo, mediante apt y compilar el código fuente, personalmente prefiero el segundo método, pero de todas formas hay lo dejo:

Para montar el servidor de dominio en ubuntu 12.04.2, para este ejemplo, necesitaremos el anteriormente mencionado samba 4, bind9 y kerberos aplicable a la siguiente topología:

topologia
Primera opción(compilar fuente).
– Configuración inicial:

sudo su

echo “# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.103
netmask 255.255.255.0
gateway 192.168.1.1
network 192.168.1.0
dns-nameserves 192.168.1.103 192.168.1.1
dns-search servidorlocal.test.local
# Secundary network interface
auto eth1
iface eth1 inet dhcp” >> /etc/network/interfaces

echo “servidorlocal” > /etc/hostname

echo “127.0.0.1 localhost
192.168.1.103 servidorlocal servidorlocal.test.local” >/etc/hosts

– Actualizamos nuestro servidor e instalamos los paquetes necesarios:

apt-get update && apt-get dist-upgrade

apt-get install build-essential libacl1-dev python-dev libldap2-dev pkg-config gdb libgnutls-dev libblkid-dev libreadline-dev libattr1-dev python-dnspython libpopt-dev libbsd-dev attr docbook-xsl libcups2-dev git
reboot

- Descargamos samba 4 y lo dejamos en la ruta /usr/src/samba4: 
 git clone git://git.samba.org/samba.git /usr/src/samba4/ 
 - Antes de compilar, se prepara el paquete conforme a nuestras necesidades: 
 cd /usr/src/samba4/  
 ./configure --enable-debug 
 - Se compila el paquete, en este punto paciencia, porque dependiendo de los recursos del equipo, puede tardar más o menos: 
 make 
- Una vez compilado, procedemos al instalar samba 4: 
    make install 
     
     - Añadimos al path la ruta de los ejecutables de samba 4 para lo cual, editamos/creamos el archivo .bashrc e introducimos la siguiente linea:
     

    export PATH=”/usr/local/samba/sbin:/usr/local/samba/bin:$PATH”

    - Creamos el dominio:

    samba-tool domain provision --realm test.local --domain TEST --adminpass P$ssword --server-role=dc --use-ntvfs

    - Probamos que samba funciona correctamente: 

    [email protected]:/home/antonio#smbclient -L localhost -U%
      Domain=[TEST] OS=[Unix] Server=[Samba 4.2.0pre1-GIT-44429f9]

      Sharename Type Comment
      ——— —- ——-
      netlogon Disk
      sysvol Disk
      IPC$ IPC IPC Service
      Domain=[TEST] OS=[Unix] Server=[Samba 4.2.0pre1-GIT-44429f9]

      Server Comment
      ——— ——-

      Workgroup Master
      ——— ——-


      [email protected]:/home/antonio# /usr/local/samba/bin/smbclient //localhost/netlogon -U ‘administrator’

        Enter administrator’s password:
        Domain=[TEST] OS=[Unix] Server=[Samba 4.2.0pre1-GIT-44429f9]
      - Antes de probar que los DNS funcionan correctamente listar el archivo /usr/local/samba/etc/smb.conf, debiendo quedar:

      # Global parameters
      [global]
      workgroup = TEST
      realm = test.local
      netbios name = SERVIDORLOCAL
      server role = active directory domain controller
      dns forwarder = 192.168.1.1
      allow dns updates = nonsecure and secure
      server services = rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate, dns, smb
      dcerpc endpoint servers = epmapper, wkssvc, rpcecho, samr, netlogon, lsarpc, spoolss, drsuapi, dssetup, unixinfo, browser, eventlog6, backupkey, dnsserver, winreg, srvsvc
      [netlogon]
      path = /usr/local/samba/var/locks/sysvol/test.local/scripts
      read only = No
      [sysvol]
      path = /usr/local/samba/var/locks/sysvol
      read only = No

      - Tambien listaremos el contenido del fichero /etc/resolv.conf, donde la salida que obtendremos será al parecido a esto:

        # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
        # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
        nameserver 192.168.1.103
        search test.local
      * Si modificamos/introducimos algún parámetro, sera conveniente reiniciar.

      - - Para comprobar que nuestro servidor DNS funciona, podemos ejecutar:

      r [email protected]:/home/antonio# netstat -tunpe | grep “:53”

            tcp 0 0 127.0.0.1:53699 127.0.0.1:953 TIME_WAIT 0 0

      [email protected]:/home/antonio# host -t SRV _ldap._tcp.test.local.

      _ldap._tcp.test.local has SRV record 0 100 389 servidorlocal.test.local.

      [email protected]:/home/antonio# host -t SRV _kerberos._udp.test.local.

             _kerberos._udp.test.local has SRV record 0 100 88 servidorlocal.test.local.

      [email protected]:/home/antonio# host -t servidorlocal.test.local. 
          
               servidorlocal.test.local has address 192.168.1.103 

       - Para hacer que nuestros clientes modifique sus DNS cuando el servidor los modifica, editamos el archivo /etc/bind/named.conf e introducimos la siguiente linea: 

              tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";

       
      - Instalamos kerberos: 

      apt-get install krb5-user 

      [email protected]:/home/antonio# kinit [email protected] 

        Password for [email protected]:
        Warning: Your password will expire in 41 days on Fri Aug 30 15:06:12 2013 
         
        * En caso de nos devuelva una fallo, editar fichero /usr/local/samba/share/setup/krb5.conf:
      [libdefaults]
      default_realm = TEST.LOCAL
      dns_lookup_realm = true
      dns_lookup_kdc = true

      [email protected]:/home/antonio# klist -e

        Ticket cache: FILE:/tmp/krb5cc_0
        Default principal: [email protected]
        Valid starting Expires Service principal
        20/07/2013 01:30 20/07/2013 11:30 [email protected]
        renew until 21/07/2013 01:30
      -Para hacer que samba 4 se ejecute al inicio, creamos el archivo /etc/init.d/samba4 con el siguiente contenido:

      #! /bin/sh
      ### BEGIN INIT INFO
      # Provides: samba
      # Required-Start: $network $local_fs $remote_fs
      # Required-Stop: $network $local_fs $remote_fs
      # Default-Start: 2 3 4 5
      # Default-Stop: 0 1 6
      # Short-Description: start Samba daemons
      ### END INIT INFO
      #
      # Start/stops the Samba daemon (samba).
      # Adapted from the Samba 3 packages.
      #

      SAMBAPID=/var/run/samba/samba.pid

      # clear conflicting settings from the environment
      unset TMPDIR
      # See if the daemon and the config file are there
      test -x /usr/local/samba/sbin -a -r /usr/local/samba/etc/ || exit 0

      . /lib/lsb/init-functions

      case "$1" in
      start)
      log_daemon_msg "Starting Samba 4 daemon" "samba"
      if ! start-stop-daemon --start --quiet --oknodo --exec /usr/local/samba/sbin/samba -- -D; then
      log_end_msg 1
      exit 1
      fi

      log_end_msg 0
      ;;
      stop)
      log_daemon_msg "Stopping Samba 4 daemon" "samba"

      start-stop-daemon --stop --quiet --name samba $SAMBAPID
      # Wait a little and remove stale PID file
      sleep 1
      if [ -f $SAMBAPID ] && ! ps h `cat $SAMBAPID` > /dev/null
      then
      # Stale PID file (samba was succesfully stopped),
      # remove it (should be removed by samba itself IMHO.)
      rm -f $SAMBAPID
      fi

      log_end_msg 0
      ;;
      restart|force-reload)
      $0 stop
      sleep 1
      $0 start
      ;;
      *)
      echo "Usage: /etc/init.d/samba {start|stop|restart|force-reload}"
      exit 1
      ;;
      esac

      exit 0


      chmod 755 /etc/init.d/samba4

      update-rc.d samba4 defaults

      Segunda opción
      – Primero vamos a configurar nuestro servidor:

      sudo su


      echo “# The primary network interface

      auto eth0

      iface eth0 inet static

      address 192.168.1.103

      netmask 255.255.255.0

      gateway 192.168.1.1

      network 192.168.1.0

      dns-nameserves 192.168.1.103 192.168.1.1

      dns-search servidorlocal.test.local

      # Secundary network interface

      auto eth1

      iface eth1 inet dhcp” >> /etc/network/interfaces


      echo “servidorlocal” > /etc/hostname


      echo “127.0.0.1 localhost
      192.168.1.103 servidorlocal servidorlocal.test.local” > /etc/hosts

      – En segundo lugar actualizamos nuestro servidor:

      apt-get update && apt-get dist-upgrade

      reboot

      – Instalamos samba 4:

      apt-get install samba4

          * En este momento es posible que nos devuelva un error que nos dice algo asi como que samba 4 no se pudo configurar, bien, tendremos que editar el archivo /var/lib/dpkg/status y en el paquete samba4 modificar status: install ok half-configured por install ok installed. Si más tarde necesitamos desinstalar samba 4:
        • Borraremos el archivo/var/lib/dpkg/status.
        • Renombraremos el archivo var/lib/dpkg/status-old a var/lib/dpkg/status-old.bak.
        • Y por último renombramos el archivo var/lib/dpkg/status-old.bak a var/lib/dpkg/status-old.

         – Creamos el dominio:
          
        /usr/share/samba/setup/provision –realm=test.local –domain=TEST –adminpass=’P$ssword’ –server-role=dc 


        – Donde deberemos obtener la información relacionada con el nuevo dominio creado:

        Server Role: domain controller

        Hostname: servidorlocal

        NetBIOS Domain: TEST

        DNS Domain: test.local

        DOMAIN SID: S-1-5-21-41787111-135949663-3539000777

        – Para comprobar que todos los parámetros del archivo de configuración de samba son correctos:
          
        [email protected]:/home/antonio# testparm


        [global]

        workgroup = TEST

        realm = TEST.LOCAL

        passdb backend = samba4

        idmap config * : backend = tdb


        [netlogon]

        path = /var/lib/samba/sysvol/test.local/scripts

        read only = No


        [sysvol]

        path = /var/lib/samba/sysvol

        read only = No

        – Si todo a ido bien, podemos inciar samba y comprobar que nuestro servidor de dominio funciona correctamente:

        initctl start samba4


        apt-get installsamba4-clients

        [email protected]:/home/antonio#smbclient -L localhost -U%
        Sharename Type Comment

        ——— —- ——-

        netlogon Disk

        sysvol Disk

        IPC$ IPC IPC Service

        - Si obtenemos una salida parecida a la anterior, procedemos a instalar y configurar el servidor DNS:
          apt-get install bind9

          nano /etc/bind/named.conf
        include "/var/lib/samba/private/named.conf"
          nano /etc/apparmor.d/usr.sbin.named

        /var/lib/samba/private/** rkw,
        /var/lib/samba/private/dns/** rkw,
        /usr/lib/x86_64-linux-gnu/samba/bind9/** rm,
        /usr/lib/x86_64-linux-gnu/samba/gensec/** rm,
        /usr/lib/x86_64-linux-gnu/ldb/modules/ldb/** rm,
        /usr/lib/x86_64-linux-gnu/samba/ldb/** rm,

        service bind9 restart

          service apparmor reload

            - Para comprobar que nuestro servidor DNS funciona, podemos ejecutar: 
            [email protected]:/home/antonio#netstat -tunpe | grep ":53" 
             
            tcp 0 0 127.0.0.1:53 699 127.0.0.1:953 TIME_WAIT 0 0
            - Comprobamos que samba 4 y bind9 funcionancorrectamente:

            [email protected]:/home/antonio# host -t SRV _ldap._tcp.test.local. 
             

            _ldap._tcp.test.local has SRV record 0 100 389 servidorlocal.test.local.


            [email protected]:/home/antonio# host -t SRV _kerberos._tcp.test.local. 
             

            _kerberos._tcp.test.local has SRV record 0 100 88 servidorlocal.test.local. 

            [email protected]:/home/antonio# host -t A servidorlocal.test.local.

                            servidorlocal.test.local has address 192.168.1.103

            - Para hacer que nuestros clientes modifique sus DNS cuando el servidor los modifica, editamos el archivo /etc/bind/named.conf e introducimos la siguiente linea:
              tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
            - Instalamos kerberos:
            apt-get install krb5-user

            [email protected]:/home/antonio# kinit [email protected] 
             
            Password for [email protected]:
            Warning: Your password will expire in 41 days on Fri Aug 30 15:06:12 2013


            [email protected]:/home/antonio# klist -e


            Ticket cache: FILE:/tmp/krb5cc_0
            Default principal: [email protected]
            Valid starting Expires Service principal
            20/07/2013 01:30 20/07/2013 11:30 [email protected]
            renew until 21/07/2013 01:30
             

            Opciones comunes
            - Para probar que todo esto realmente funciona vamos a configurar, a modo de prueba, un cliente, en este caso windows xp:
            1. Entramos en la configuración IP y establecemos los parámetros correctos.
            1. Por último modificamos el nombre del equipo, para que se una al dominio.

              joined

            – Crear recurso compartido, a modo de ejemplo se creara una carpeta:
            mkdir /home/compartido



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

            [compatido] path = /home/compartido
            comment = Carpeta comun
            read only = yes

            – Para crear nuevos usuarios:
            samba-tool user add “user”


            Conclusión: A titulo personal pienso que este proyecto, si bien tiene muy buena pinta,
            de momento no lo pondría en producción, ya que intuyo que el proyecto esta todavía en pañales,
            aunque a mi no me ha dado ningún pete, pero como dicen en mi tierra, el miedo es libre.
             
            Este tuto no es ni mucho menos un todo, pero si creo que es un buen punto de partida para
            empezar con samba 4.
             
            Para la confeción del este tuto se ha consultado diferentes recursos:
             
            http://www.jadota.com/2013/01/installing-samba4-on-ubuntu-12-04/

            http://www.matrix44.net/cms/notes/gnulinux/samba-4-ad-domain-with-ubuntu-12-04
             
            http://www.darklab.co.uk/2013/01/15/creating-a-samba-4-active-directory-primary-domain-controller-on-ubuntu-12-04-1-server/