Controlador de Dominio de Active Directory mediante Samba4
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.
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
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
Por defecto, Windows non amosa o menú 'Ferramentas administrativas no menú inicio, para engadilo manualmente segue estes pasos:
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
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%"
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.
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 Usuarios
- 03-CrearAlumno.bat: Crea un alumno a parti duns parámetros
Temos que pasarlle os seguintes parámetros
- $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 Ajusto 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 Ajusto permisos2
icacls \\%SERVER%\Datos\%1 /grant "Domain Admins":(OI)(CI)F
icacls \\%SERVER%\Datos\%1 /grant "%1":(OI)(CI)F
rem Restauro os conxuntoo de caracteres por defecto da consola
mode con cp select=850 >nul
Comprobamos como o usuario foi creado correctamente
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
#Comprobamos
net ads testjoin
host -t A adclient.iesrodeira.com.
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.