Controlador de Dominio de Active Directory mediante Samba4

De Wiki do Ciclo ASIR do IES de Rodeira
Saltar á navegación Saltar á procura

Instalaremos un sistema Debian Jessie que actuará como controlador de dominio para o dominio asir.iesrodeira.com, e uniremos ao dominio ordenadores Windows e Linux, de xeito que os usuarios do dominio podan iniciar sesión en calqueira ordenador da rede.

A administración do DC se poderá realizar mediante as ferramentas administrativas Windows, que serán instaladas nun Windows 7/8.1/2008/2012.


SAMBA 4

Permíte entre outras cousas implementar un Controlador de Dominio de Active Directory nunha máquina con Sistema Operativo GNU/Linux. O Controlador de Dominio (PDC) engloba as seguintes funcións:

  • Servidor de Autentificación (KDC Kerberos Domain Controler): Autentifica os inicios de sesión dos usuarios.
  • OPENLDAP: Emprega LDAP para consultar a información almacenada no catálogo do Directorio Activo.
  • Servidor DNS: Para localizar os equipos na rede e os obxectos no Dominio

Situación Inicial

Partimos dunha máquina virtual con Debian Jessie. A súa IP será 172.20.0.5 e o nome do equipo será radagast

root@radagast:~# more /etc/hosts
127.0.0.1	localhost
127.0.1.1	radagast.IESRODEIRA.COM	radagast


root@radagast:~# more /etc/hostname 
radagast

root@radagast:~# more /etc/resolv.conf 
domain iesrodeira.com
search iesrodeira.com
nameserver 172.20.0.5 # Ten que ter a si mesmo como servidor DNS
nameserver 8.8.8.8

Instalación do Active Directory Domain Controller

O DC se utilizará principalmente para a autenticación de usuarios e para dar acceso a carpetas compartidas con información de interese para o conxunto do alumnado. Os ficheiros personais dos alumnos estarán situados nas máquinas cliente, e os perfís móbiles desactivados. O host no que instalaremos o controlador de dominio será radagast.iesrodeira.com con IP 172.20.0.5. A información relevante é a seguinte:

Realm (Dominio Kerberos): ASIR.IESRODEIRA.COM
Domain:ASIR
Server Role:dc
DNS Backend:Internal
DNS Forwarder:172.20.2.1

Instalación do DC

  • En primeiro lugar necesitamos que a rede esté sincronizada. Utilizaremos servidores de tempo da rede local mediante NTP:
apt-get install ntp
vim /etc/ntp.conf

Engadimos a ntp.conf as seguintes lineas:

server gandalf.iesrodeira.com iburst
server earendil.iesrodeirra.com iburst
server hora.roa.es iburst

Comprobaremos a sincronización con ntpq -p

  • Instalamos de Samba e smbclient
apt-get install samba smbclient ldb-tools
  • Creamos o controlador de dominio
samba-tool domain provision --use-rfc2307 --interactive --use-xattrs=yes

Aqui especificamos o Realm, Dominio, Server Role, Tipo de DNS e o Forwarder. O noso dominio será ASIR, e será un subdominio de IESRODEIRA.COM, sendo o Realm ASIR.IESRODEIRA.COM. O nome do Host será radagast.iesrodeira.com, e o DNS Forwarder 172.20.2.1 ou proxy.iesrodeira.com.

Realm [IESRODEIRA.COM]: ASIR.IESRODEIRA.COM
Domain [ASIR]: enter
Server Role (dc, member, standalone) [dc]: enter
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: enter
DNS forwarder IP address (write 'none' to disable forwarding) [172.20.2.1]: 172.20.2.1

Se creará automáticamente un usuario Administrator que será administrador do dominio. Reiniciamos samba e comprobamos o seu funcionamento:

/etc/init.d/samba restart
smbclient -L localhost -U%
smbclient //localhost/netlogon -UAdministrator -c 'ls'
#Comprobamos o funcionamento do servidor DNS integrado no SAMBA4
host -t SRV _ldap._tcp.asir.iesrodeira.com.
host -t SRV _kerberos._udp.asir.iesrodeira.com.
host -t A radagast.asir.iesrodeira.com.
  • OPCIONAL: Comprobamos o funcionamento e as credenciais Kerberos:
apt-get install krb5-user
mv /etc/krb5.conf /etc/krb5.conf.orixinal
cp /var/lib/samba/private/krb5.conf /etc
kinit Administrador #Solicitamos un ticket para o usuario administrador
klist               #Comprobamos que o ticket existe
kdestroy

Si queremos resolver os nomes do AD en esta máquina (por exemplo, para poñer cuotas de disco), instalamos libnss-winbind e dexamos así /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 winbind 
group:          compat winbind
shadow:         compat
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns
networks:       files

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

netgroup:       nis

Podemos comprobar o funcionamento con getent passwd e getent group.

Netlogon e Shares

Os shares se configuran en /etc/samba/smb.conf que quedaría así:

[global]
	workgroup = ASIR
	realm = ASIR.IESRODEIRA.COM
	netbios name = RADAGAST
	server role = active directory domain controller
	dns forwarder = 172.20.2.1
        #allow dns updates = signed
	idmap_ldb:use rfc2307 = yes


[netlogon]
	path = /var/lib/samba/sysvol/asir.iesrodeira.com/scripts
	read only = No

# Compartidos por NFS
# earendil:/isos
[Software]
	path = /SAMBA/software/otros
        comment = "Software Gratuito e Drivers"
        read only = No

[MSDN]
	path = /SAMBA/software/msdn
	comment = "Software de Microsoft MSDN"
	read only = No

#disk01 en earendil: Disks/Storage, NO RAID
[Buzon]
	path = /SAMBA/buzon/info
	comment = "Buzon Alumnado"
	read only = No

[Xefatura]
	path = /SAMBA/xefatura/info
	comment = "Xefatura de Departamento"
	read only = No

#disk02 en earendil: System/Storage, RAID
[Datos]
	path = /SAMBA/datos/homes
	comment = "Datos do Usuario"
	read only = No

[Maquinas Virtuais]
	path = /SAMBA/vms/info
	comment = "Maquinas Virtuais"
	read only = No

[sysvol]
	path = /var/lib/samba/sysvol
	read only = No

Unha vez creados os shares en smb.conf podemos activar a configuración co comando smbcontrol all reload-config.

Os directorios compartidos, se montan por NFS de outros servidores en algúns casos, e de outro disco en outros. No directorio no que se almacenará a información dos usuarios, gustaríanos poder restrinxir as cuotas de uso, polo que faremos uso das cuotas nativas ext4 instalando o paquete quota

  apt-get install quota

O fstab será o seguinte:

# /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>
/dev/mapper/DC_ROOT-Root 	/               ext4    	user_xattr,acl,errors=remount-ro 0       1
/dev/mapper/DC_ROOT-Homes 	/home           ext4    	defaults        0       2
/dev/mapper/DC_ROOT-swap 	none            swap    	sw              0       0
/dev/sr0        		/media/cdrom0   udf,iso9660 	user,noauto     0       0
/dev/mapper/ERaid-Datos		/SAMBA/datos	ext4		user_xattr,acl,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0   0	2
/dev/mapper/Stripped-Buzon	/SAMBA/buzon	ext4		user_xattr,acl,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0   0	2
/dev/mapper/Stripped-MaqViruais /SAMBA/vms	ext4		user_xattr,acl	0	2
/dev/mapper/Stripped-Xefatura	/SAMBA/xefatura	ext4		user_xattr,acl	0	2
nfs:/templates			/SAMBA/vms/info/KVM		nfs4	ro	0	0
earendil:/isos/software		/SAMBA/software/otros		nfs4	ro	0	0
earendil:/isos/msdn		/SAMBA/software/msdn/isos	nfs4	ro	0	0
Boxinfo info.png
Para asegurar a montaxe dos shares nfs no fstab e necesario asegurarse de que os nomes se resolven correctamente no inicio, polo que se deberían engadir as entradas correspondentes a /etc/hosts

Unha vez montados todos os shares, configuraremos as quotas:

quotacheck -gcu /SAMBA/datos
quotacheck -gcu /SAMBA/buzon
quotacheck -vguma
quotaon -av

Xa podemos editar e poñer as cuotas cos comandos setquota ou edquota. Podemos tamén obter información das cuotas con repquota. Si queremos poñer a moitos usuarios a mesma cuota podemos facelo do seguinte xeito:

#Supoñemos que ''quotauser'' ten postas as cuotas. Pon cuotas aos usuarios con PID > 999
edquota -p quotauser `awk -F: '$3 > 999 {print $1}' /etc/passwd`

Instalación dun Cliente Windows 8.1

Nos clientes Windows, bastará engadir con normalidade o equipo ao dominio ASIR.

O cliente Windows terá que ter como servidor de DNS a IP do Servidor de dominio (172.20.0.5). Unha vez feito esto será un membro do dominio do xeito habitual.

Farémolo empregando o único usuario dispoñible agora mesmo administrator con contrasinal abc123.

Engadimos un equipo chamado Windows7 con IP 172.20.2.100


Comprobamos que o equipo se engadiu correctamente

  • Comprobamos que o servidor DNS actualizouse co novo equipo
nslookup windows7.asir.iesrodeira.com
Server:		172.20.0.5
Address:	172.20.0.5#53

Name:	windows7.asir.iesrodeira.com
Address: 172.20.4.100
  • Comprobamos que o equipo aparece na base de datos do Dominio
pdbedit -L
RADAGAST$:3000024:
Administrator:0:
WINDOWS7$:3000023:
krbtgt:3000017:
nobody:65534:nobody

Ferramentas de Administración do Dominio

Para administrar o servidor samba podemos facer uso das ferramentas de administración remota de Windows (RSAT - Remote Server Administration Tools). Estas ferramentas se poden descargar nos seguinte sitios:

Unha vez instaladas temos que activalas en Panel de Control->Programas->Programas e Características->Activar e Desactivar as Características de Windows->Ferramentas de Administración Remota do Servidor

Selecciona polo menos as seguintes caraterísticas

CaracteristicasActivadas.png

Por defecto, Windows non amosa o menú 'Ferramentas administrativas no menú inicio, para engadilo manualmente segue estes pasos:

ActivarFerramentasAdministrativas.png

Agora podemos xestionar o noso dominio creado con Samba4 dende as ferramentas de administración remota de Windows. Podemos empregar entre outras

  • DNS: Permitirános xestionar o servidor DNS do noso servidor
  • Usuarios e equipos de active directory: Permitiranos crear usuarios e Unidades organizativas


Xestionando os permisos dos recursos compartidos no Servidor

Podemos empregar as ferramentas de Windows para xestionar os seus permisos. Para comprobar as carpetas compartidas no noso servidor simplemente escribimos \\radagast no explorador de arquivos

PermisosRecursosCompartidos.png

Automatizando a creación dos recursos compartidos no Servidor

Supoñamos que inicialmente só temos unha carpeta compartida no noso servidor. O seu código /etc/samba/smb.conf sería.

#As miñas carpetas compartidas

[Software]
	path = /SAMBA/software
        comment = "Software Gratuito e Drivers"
        read only = No

Podemos facer unha serie de scripts que nos faciliten a creación de novos recursos compartidos

  • 00-variables.sh: Define variables que se empregarán nos outros scripts
# Variables para os scripts
# Para empregalo source 00-variables.sh
# Non necesita permiso de execución, source engade ó código

export SAMBACONF=/etc/samba/smb.conf
export DISCO1=/SAMBA #Disco onde se almacenan os recursos compartidos
  • 01-creaunshare.sh: Crea un recurso compartido. Pasámoslle tres parámetros Nome Recurso compartido, Comentario, Carpeta
#!/bin/bash
source 00-variables.sh
if grep "\[$1\]" $SAMBACONF
then
	echo "[$1] xa existe..."
else
	echo "[$1]" >> $SAMBACONF
	echo comment = $2 >> $SAMBACONF
	echo path = $3 >> $SAMBACONF
	echo read only = No >> $SAMBACONF
	echo >> $SAMBACONF
fi
  • 02-creashares.sh: Crea varios recursos compartidos empregando os outros scripts
#!/bin/bash
source 00-variables.sh

#Copia de seguridade do arquivo de configuración actual
copia=$(date +%Y%m%d%H%M%S)
cp $SAMBACONF $SAMBACONF.copia-$copia

#Creamos datos usuarios
mkdir $DISCO1/datos
./01-creaunshare.sh Datos "Datos dos alumnos" $DISCO1/datos

#buzón do alumnado
mkdir $DISCO1/buzonAlumnado
./01-creaunshare.sh "Buzon Alumnado" "Buzón do alumnado" $DISCO1/buzonAlumnado

# Actualizamos a configuración do servidor samba
smbcontrol all reload-config
Empregando BATS para crear a organización do noso Dominio

Podemos empregar .bat para crear dende o noso windows engadido o Dominio tanto unidades organizativas como usuarios, grupos..

O noso Dominio almacenará os usuarios do Ciclo de Informática do IES de Rodeira. Temos un só ciclo que se imparte tanto en Diurno como Nocturno.

Creando as Unidades Organizativas
  • 00-Variables.bat: Define variables que se empregarán nos outros scripts
@echo off
set SERVER=radagast
set DOMINIO=dc=asir,dc=iesrodeira,dc=com
set CURSO=Curso 2013-2014
  • 01-CrearOU.bat: Crea as unidades organizativas
@echo off
call 00-Variables.bat
dsadd ou "ou=ASIR,%DOMINIO%"
dsadd ou "ou=Administradores,ou=ASIR,%DOMINIO%"
dsadd ou "ou=Alumnos,ou=ASIR,%DOMINIO%"
dsadd ou "ou=Equipos,ou=ASIR,%DOMINIO%"
dsadd ou "ou=Profesores,ou=ASIR,%DOMINIO%"

REM Creo OU dentro de alumnos
dsadd ou "ou=Rexime Adultos,ou=Alumnos,ou=ASIR,%DOMINIO%"
dsadd ou "ou=%CURSO%,ou=Rexime Adultos,ou=Alumnos,ou=ASIR,%DOMINIO%"
dsadd ou "ou=Rexime Diurno,ou=Alumnos,ou=ASIR,%DOMINIO%"
dsadd ou "ou=%CURSO%,ou=Rexime Diurno,ou=Alumnos,ou=ASIR,%DOMINIO%"

REM Creo OU dentro de Equipos
dsadd ou "ou=Departamento,ou=Equipos,ou=ASIR,%DOMINIO%"
dsadd ou "ou=Aula3,ou=Equipos,ou=ASIR,%DOMINIO%"
dsadd ou "ou=Aula4,ou=Equipos,ou=ASIR,%DOMINIO%"


OU creadas.PNG

Creando os Grupos de Usuarios

Creamos os diferentes grupos de usuarios, cada un dentro da súa correspondente Unidade Organizativa. Ademáis haberá grupos que pertenzan a outros subgrupos, por exemplo, S-alumnosASIDiurno é membro de S-alumnosASI.

  • 02-CrearGrupos.bat: Crea os grupos do noso Directorio Activo
@echo off
call 00-Variables.bat
rem Administradores ASI
dsadd group "cn=S-admASI,ou=ASIR,%DOMINIO%" 		
rem Alumnos ASI
dsadd group "cn=S-alumnosASI,ou=Alumnos,ou=ASIR,%DOMINIO%"	
dsadd group "cn=S-alumnosASIAdultos,ou=Rexime Adultos,ou=Alumnos,ou=ASIR,%DOMINIO%" -memberOf "cn=S-alumnosASI,ou=Alumnos,ou=ASIR,%DOMINIO%"
dsadd group "cn=S-alumnosASIDiurno,ou=Rexime Diurno,ou=Alumnos,ou=ASIR,%DOMINIO%" -memberOf "cn=S-alumnosASI,ou=Alumnos,ou=ASIR,%DOMINIO%"
rem Profesores
dsadd group "cn=S-profesoresASI,ou=Profesores,ou=ASIR,%DOMINIO%"

Podemos comprobar que se crean na súa correspondente OU dende Usuarios e Equipos de AD de Windows.

Grupos creados.png

Podemos comprobar dende o Servidor radagast que os grupos foron creados con

getent group
ASIR\S-admASI:*:3000025:
ASIR\S-alumnosASI:*:3000026:
ASIR\S-alumnosASIAdultos:*:3000027:
ASIR\S-alumnosASIDiurno:*:3000028:
ASIR\S-profesoresASI:*:3000029:
Creando un Usuario

É interesante ter un bat para automatizar a creación dos alumnos, xa que serán moitos e variarán cada curso. Os profesores poden crearse manualmente xa que son poucos, senón podería facerse un .bat semellante a este.

  • 03-CrearAlumno.bat: Crea un alumno coa contrasinal por defecto (abc123.) a partir dos seguintes parámetros, tamén crea a súa carpeta de rede
    • $1=xiana (SAMID)
    • $2= Martínez (ln)
    • $3= Pérez
    • $4 = Xiana (fn)
    • $5 = (d|a) quenda (diurno|adultos)

Exemplo de emprego

03-CrearAlumno.bat xiana Martínez Pérez Xiana d
@echo off
call 00-Variables.bat
rem para corregir problema de acentos
mode con cp select=1250 > nul

rem Creo carpeta de usuario

	mkdir \\%SERVER%\Datos\%1

rem Axusto permisos1

	rem Desactivo herdanza
	icacls \\%SERVER%\Datos\%1 /inheritance:r


rem Creo usuario
if /i "%5"=="d" (
	set grupo=S-alumnosASIDiurno
	set contedor=Rexime Diurno
	) else (
		set grupo=S-alumnosASIAdultos
		set contedor=Rexime Adultos
	)

dsadd user "cn=%4 %2 %3,ou=%CURSO%,ou=%CONTEDOR%,ou=Alumnos,ou=ASIR,%DOMINIO%" ^
	-samid %1 ^
	-fn %4 ^
	-ln %2 ^
	-display "%4 %2 %3" ^
	-pwd abc123. ^
	-memberof "cn=%grupo%,ou=%CONTEDOR%,ou=Alumnos,ou=ASIR,%DOMINIO%" ^
	-hmdir \\%SERVER%\Datos\%1 ^
	-hmdrv Z: ^
	-canchpwd yes ^
	-pwdneverexpires yes ^
	-disabled no

rem Axusto permisos2
icacls \\%SERVER%\Datos\%1 /grant "Domain Admins":(OI)(CI)F 
icacls \\%SERVER%\Datos\%1 /grant "%1":(OI)(CI)F rem CT para o usuario

rem Restauro os conxunto de caracteres por defecto da consola
mode con cp select=850 >nul

Comprobamos como o usuario foi creado correctamente

UsuarioCreado.png

Agora Xiana xa pode iniciar sesión. Vemos como se automonta a súa carpeta de rede e comproba que ten os permisos axeitados e pode escribir nela

Unidades xiana.png

Tamén podemos comprobar a información do usuario creado dende o Servidor Samba. Isto é responsabilidade de Winbind, é o encargado de resolver a información dos usuarios do Active Directory.

getent passwd | grep xiana
ASIR\xiana:*:3000033:100:Xiana Martínez Pérez:/home/ASIR/xiana:/bin/false

Comprobamos que o usuario existe e o seu UID no servidor Debian será 3000033, pero dende unha máquina Windows empregará outro identificador o SID. Winbind proporciónanos o comando wbinfo para obter os SID dun usuario a partir do seu UID e viceversa

wbinfo --uid-to-sid=3000033
S-1-5-21-4115708957-2851539935-2112738394-1121

wbinfo --sid-to-name=S-1-5-21-4115708957-2851539935-2112738394-1121
ASIR\xiana 1
Creando varios Usuarios

Crearemos un novo bat que lea os datos dos novos usuarios dun arquivo .csv e os cree empregando o .bat do apartado anterior

Especificaremos os datos dos alumnos nun arquivo chamado alumnos.csv co seguinte formato: Login, Apelido1, Apelido2, Nome, Quenda


pgarcia,García,Sanchez,Pablo,d
amartinez,Martínez,Pérez,Ana,d
ublanco,Blanco,Pérez,Uxía,a
  • 04-CrearAlumnos.bat: Emprega 03-CrearAlumno.bat e alumnos.csv para a creación masiva de alumnos
@echo off
rem para corregir problema de acentos
mode con cp select=1250 > nul
For /f "tokens=1,2,3,4,5 delims=, " %%i in (alumnos.csv) do (
	call 03-CrearAlumno.bat %%i %%j %%k %%l %%m
)
mode con cp select=850 >nul

Instalación dun Cliente Debian Jessie

Uniremos o equipo adclient.iesrodeira.com ao dominio, e iniciaremos sesións cos usuarios dados de alta no mesmo.

En primeiro lugar, debemos asegurarnos que o noso /etc/hosts, e o hostname conteñen as entradas correctas. No noso caso:

/etc/hostname

adclient.iesrodeira.com

/etc/hosts

127.0.0.1       localhost
127.0.1.1       adclient.local
172.20.33.33    adclient.asir.iesrodeira.com    adclient

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

/etc/resolv.conf

domain iesrodeira.com
#radagast.iesrodeira.com
nameserver 172.20.0.7

Si queremos que un cliente Linux (no noso caso Debian Jessie) poida facer uso da infraestructura de Active Directory, precisamos o seguinte: ntp, krb5-user, libpam-krb5, acl, winbind, libnss-winbind, libpam-winbind e samba.

Procederemos á instalación de krb5-user e samba....

#Realm: ASIR.IESRODEIRA.COM, kdc: radagast.asir.iesrodeira.com, administrative server: radagast.asir.iesrodeira.com
apt-get install krb5-user samba

Precisaremos tamén crear un arquivo smb.conf co seguinte contido:

[global]
        netbios name=adclient
        security = ads
        realm = asir.iesrodeira.com
        password server = radagast.asir.iesrodeira.com
        workgroup = ASIR
        template homedir = /home/%D/%U
        template shell = /bin/bash
        client use spnego = yes
        client ntlmv2 auth = yes
        encrypt passwords = yes
        domain master = no
        local master = no
        preferred master = no
        os level = 0

        idmap config ASIR:backend = ad
        idmap config ASIR:schema_mode = rfc2307
        idmap config *:backend = tdb
        idmap config *:range = 3000000 - 400000

        winbind nss info = rfc2307
        winbind enum users = yes
        winbind enum groups = yes
        winbind trusted domains only = no

Unimos o equipo ao dominio e comprobamos:

net ads join -U Administrator -k 
Enter Administrator's password:
Using short domain name -- ASIR
Joined 'ADCLIENT' to dns domain 'asir.iesrodeira.com'
#Comprobamos
net ads testjoin
Join is OK
#Comprobamos o DNS
host -t A adclient.iesrodeira.com.
adclient.asir.iesrodeira.com has address 172.20.33.33

Configuramos a autenticación:

apt-get install libpam-krb5 acl winbind libnss-winbind libpam-winbind 
#Autenticación. Engadimos winbind a group e passwd en nsswitch.conf
vim /etc/nsswitch.conf 
/etc/init.d/winbind stop 
/etc/init.d/samba restart 
/etc/init.d/winbind start
#Comprobamos
wbinfo -u
wbinfo -g
getent passwd
getent groups

E importante a sincronización con NTP. Podemos sincronizalo cos servidores de sincronización da rede gandalf.iesrodeira.com e earendil.iesrodeira.com, ou convertir o controlador de dominio en un servidor NTP e sincronizalo con él.

Configuraremos pam_mkhomedir e, si queremos, pam_mount e pam_exec. Engadimos session required pam_mkhomedir.so skel=/etc/skel umask=0022 ao ficheiro /etc/pam.d/common-session.

Referencias

Wiki Oficial de Samba