Integración de FreeNAS nun dominio Samba4 e compartición de recursos por CIFS
- Nesta sección imos ver como integrar unha máquina con FreeNAS nun dominio con Samba4, para usala como sistema de almacenamento das carpetas persoais e comúns dos usuarios separado do controlador do dominio.
- Antes de comezar, restauraremos as seguintes máquinas as instantáneas indicadas (recórdese facer unha instantánea do estado actual antes de revertir as instantáneas):
- Máquina FreeNAS: Revertimos a instantánea Recén instalada.
- Máquinas dserver00, uclient01 e wclient01: Revertímolas á instantánea Escenario 5.A ou Escenario 5.B, en función do escenario que escolléramos na parte IV.
Integrar o equipo FreeNAS no dominio
- O primeiro será seguir os pasos necesarios para integrar o equipo FreeNAS dentro do dominio, para que poidamos acceder a el cos usuarios do mesmo.
Cambiar o nome da máquina
Na lapela de Información do apartado de Sistema da ferramenta de administración de FreeNAS, veremos que por defecto ten como nome freenas. Este nome non ten ningún inconveniente, pero nós seguindo o noso esquema queremos que o nome do equipo sexa nas00.iescalquera.local. Picamos no botón de Edit para cambiar o nome.
Sincronizar a hora por NTP
- Como en todos os equipos que integramos no dominio Samba4, para que o proceso de autenticación con Kerberos funcione precisamos que a hora dos equipos do dominio estea sincronizada, por iso imos configurar no equipo FreeNAS os mesmos servidores de hora que xa configuramos tanto en dserver como nos clientes.
Vemos que o equipo xa ven configurado con unha serie de servidores NTP. Estes servidores poderían valernos, pero para ser coherentes na instalación e asegurarnos que non hai desfases na hora imos configurar os mesmos que utilizamos nas outras máquinas. Así ademais vemos como personalizar os servidores NTP que utilizamos, porque tamén poderíamos ter un servidor de NTP propio na nosa rede local sincronizar a hora de todos os equipos con ese, en lugar de utilizar servidores NTP externos. Así que seleccionamos un dos servidores NTP e picamos en Delete para quitalo...
Crear pool zfs e configuralo como pool do sistema
- Aínda que xa temos creado un volume, ímolo borrar para crear un volume novo e configuralo como conxunto de datos do sistema, xa que aí garda FreeNAS certa información de configuración. Esta información é necesaria para poder iniciar algúns servizos como CIFS (SMB).
Abrimos o xestor de volumes para crear un volume co nome datos. Podemos facer un volume en RAID con varios discos, pero tendo en conta que traballamos con unha máquina virtual na que os discos residen en realidade en ficheiros dun mesmo disco duro físico non imos conseguir un mellor rendemento senón ao revés. Por tanto, imos coller un único disco para o volume, e picamos en Add Volume.
Integrar o equipo no dominio
Para que o equipo FreeNAS se poida integrar no dominio e logo os clientes accedan correctamente aos recursos compartidos, é moi importante que todos os equipos (clientes, máquina FreeNAS e dserver) teñan a hora sincronizada. Aínda que temos os sistemas configurados para sincronizar a hora por NTP, temos detectado que en ocasións ao gardar o estado e restaurar as máquinas virtuais o sistema tarda uns minutos en tomar a hora correcta. En caso necesario, pódese usar o comando date para comprobar e modificar a hora se é necesario tanto na máquina FreeNAS como en dserver.
- Chega xa o momento de integrar o equipo FreeNAS no dominio Samba4
Imos ao apartado Directorio e dentro del á pestana AD (Active Directory). Introducimos os datos do dominio:
*Nome do dominio: iescalquera.local
*Nome de conta no dominio: administrator (é a conta dun usuario administrador do dominio)
*Contrasinal da conta no dominio: abc123. (é o contrasinal dese usuario)
*Activamos a opción de Habilitado para activar este servizo de directorio no sistema.
En lugar de aceptar, imos picar en Modo Avanzado para cambiar un par de parámetros.Activamos as opcións de Extensións de Unix (xa que é un dominio con Samba4) e Usar el dominio predeterminado para non ter que poñer o nome do dominio antes do nome do usuario para os usuarios do dominio, e que sexan así como usuarios locais. Por outro lado, establecemos o valor de AD timeout a 60 (na última versión de FreeNAS ese xa é o valor por defecto), porque nas probas realizadas sobre as máquinas virtuais no momento en que se integra o equipo no dominio o retardo pode ser maior de 10 segundos, e entón daría un erro ao intentar integrar o equipo no dominio. Aceptamos picando en Guardar.
Configurar e compartir as carpetas por CIFS
- Agora que xa temos dispoñibles na máquina FreeNAS os usuarios e grupos do dominio, podemos crear a estrutura de carpetas, establecer os permisos necesarios e compartir as carpetas por CIFS para que sexan utilizadas polos equipos cliente.
Crear o esqueleto de carpetas
- Comezaremos creando o esqueleto de carpetas, que será moi similar ao que tiñamos en dserver00 para Samba4, así que poderemos reutilizar os mesmos scripts cambiando as carpetas base.
- Definiremos en FreeNAS dous conxuntos de datos (datasets) dentro do volume ZFS datos; para as carpetas dos usuarios e a carpeta común respectivamente. Desta forma podemos usar configuracións independentes para cada un deles, como cotas de disco, nivel de compresión, etc.
- Na máquina FreeNAS, creamos no volume ZFS unha carpeta para crear os scripts para a creación do esqueleto de carpetas:
cd /mnt/datos
mkdir scripts_samba4
cd scripts_samba4
- Seguindo a mesma filosofía das partes anteriores, creamos un ficheiro de texto para almacenar todos os cursos que temos.
- FICHEIRO DE CURSOS: f00_cursos.txt
dam1 dam2
- O seguinte script establece o valor das variables que almacenan as rutas ás carpetas base do esqueleto, que neste caso cambian con respecto á parte VII:
- SCRIPT DE VARIABLES GLOBAIS: 00_variables.sh
#!/bin/bash
# Define variable globais que van usar os demais scripts
#Variables
DIR_USUARIOS=/mnt/datos/usuarios
DIR_COMUN=/mnt/datos/comun
# Exportar variables
# Nos scripts que se van usar a continuación non faría falla que se exportansen as variables.
# Pero quedan exportadas por se a posteriori calquera dos scripts que vai importar
# o contido deste ficheiro precisase chamar a outros scripts que precisasen usar estas variables
export DIR_USUARIOS
export DIR_COMUN
- E por último, o seguinte script é exactamente o mesmo que o da parte VII. O que fai é crear todas as carpetas do esqueleto.
- SCRIPT: 01_crear_esqueleto.sh
#!/bin/bash
#Chamar ao script de variables, temos varias opcións:
. ./00_variables.sh # Tamén podería ser: source ./00_variables.sh
#Crear esqueleto profes
#Por se executamos o script varias veces, comprobamos se xa existe o directorio
test -d $DIR_USUARIOS/persoais/profes || mkdir -p $DIR_USUARIOS/persoais/profes
#Crear esqueleto para os perfis de Windows
test -d $DIR_USUARIOS/perfisWindows || mkdir -p $DIR_USUARIOS/perfisWindows
#Crear esqueleto para os perfis de Linux
test -d $DIR_USUARIOS/perfisLinux || mkdir -p $DIR_USUARIOS/perfisLinux
#Crear esqueleto alumnos e comun
#Lemos o ficheiro cursos e procesamos cada curso
for CURSO in $(cat f00_cursos.txt)
do
test -d $DIR_USUARIOS/persoais/alumnos/$CURSO || mkdir -p $DIR_USUARIOS/persoais/alumnos/$CURSO
test -d $DIR_COMUN/$CURSO || mkdir -p $DIR_COMUN/$CURSO
done
#Crear en comun a carpeta para os departamentos
test -d $DIR_COMUN/departamentos || mkdir -p $DIR_COMUN/departamentos
- Executamos o script para crear o esqueleto de carpetas:
sh 01_crear_esqueleto.sh
- Comprobamos a súa execución, visualizando co comando ls -R o contido de /mnt/datos/usuarios e /mnt/datos/comun.
Configurar os permisos
- Neste apartado hai que destacar unha cuestión importante. FreeNAS permite o uso de ACLs para establecer os permisos das carpetas e ficheiros, pero non son o mesmo tipo de ACLs que vimos na Parte VII (ACLs POSIX). FreeNAS utiliza NFSv4ACLs, que son unha variante que permiten aínda máis opcións que as ACLs POSIX (xa que por exemplo, inclúen máis permisos que r,w e x), e que se achegan máis as ACLs que utilizan os sistemas Windows.
- Non imos afondar moito na configuración das ACLs NFSv4, o que faremos é tan só destacar as diferenzas máis importantes con respecto á configuración das ACLs POSIX. No seguinte enlace móstranse exemplos da configuración da ACL NFSv4 sobre un ficheiro cos comandos getfacl e setfacl:
- Na páxina pódense ver como diferenzas máis importantes as seguintes:
- A sintaxe para indicar o propietario do ficheiro (owner@) o grupo propietario (group@) e todos os usuarios (everyone@).
- O maior número de permisos que se admiten (escribir, engadir, escribir atributos, escribir a acl, etc.).
- A posibilidade de indicar e cada elemento da ACL a acción de permitir (allow) ou denegar (deny).
- Teremos polo tanto que adaptar o script que fixemos na parte IV para axustas os permisos á sintaxe do comando setfacl para ACLs NFSv4, que será da forma:
setfacl -m etiqueta:calificador:permisos:herdanza:tipo
- Onde os campos introducidos serán:
- etiqueta: u para usuario, g para grupo, owner@ para o usuario propietario, group@ para o grupo propietario e everyone@ para todos os usuarios.
- calificador: O usuario ou grupo á que afecta a ACL, que só usaremos se na etiqueta introducimos u ou g respectivamente.
- permisos: Agora temos moitos máis posibles permisos para establecer, xa que ademais de lectura (r), escritura (w) e execución (x), aparecen entre outros: engadir datos (p), borrar fillos (D), borrar (d), ler atributos (a), escribir atributos (A), ler a ACL (c) e escribir a ACL (C). Para facilitar a sintaxe, tamén dispoñemos de conxuntos de permisos, que son:
- full_set: Todos os permisos (control total).
- modify_set: Todos os permisos salvo modificar a ACL e usuario propietario (permiso de lectura e escritura).
- read_set: Permisos de lectura.
- write_set: Permisos de escritura.
- herdanza: Podemos utilizar varios valores neste campo para indicar se queremos que a ACL se herde aos ficheiros e carpetas que se creen dentro da carpeta (agora non podemos usar a opción -d):
- f: Herdable para os ficheiros que se creen dentro da carpeta.
- d: Herdable para as subcarpetas.
- i: Só herdable, pero non aplicable á propia carpeta.
- tipo: allow (permitir) ou deny (denegar).
- O script de axuste dos permisos podería quedar como segue:
SCRIPT: 02_axustar_acls_esqueleto.sh
#!/bin/bash
#Chamar ao script de variables
. ./00_variables.sh # Tamén podería ser: source ./00_variables.sh
#Establecemos de forma recursiva os permisos de Linux
chown -R root:wheel $DIR_USUARIOS
chmod -R 700 $DIR_USUARIOS
chown -R root:wheel $DIR_COMUN
chmod -R 700 $DIR_COMUN
#Cartafol de usuarios e subcartafoles
setfacl -m g:g-usuarios:rxpaRc::allow $DIR_USUARIOS
setfacl -m g:"Domain Admins":rxpaRc::allow $DIR_USUARIOS
setfacl -m g:g-usuarios:rxpaRc::allow $DIR_USUARIOS/persoais
setfacl -m g:"Domain Admins":rxpaRc:fd:allow $DIR_USUARIOS/persoais
setfacl -m g:g-usuarios:modify_set::allow $DIR_USUARIOS/perfisWindows
setfacl -m g:g-usuarios:modify_set::allow $DIR_USUARIOS/perfisLinux
#Cartafol profes
setfacl -m g:g-profes:rxpaRc::allow $DIR_USUARIOS/persoais/profes
setfacl -m g:"Domain Admins":modify_set:fd:allow $DIR_USUARIOS/persoais/profes
setfacl -m group@::fd:allow $DIR_USUARIOS/persoais/profes
#Cartafol alumnos
setfacl -m g:g-profes:rxpaRc::allow $DIR_USUARIOS/persoais/alumnos
setfacl -m g:g-alum:rxpaRc::allow $DIR_USUARIOS/persoais/alumnos
setfacl -m g:"Domain Admins":rxpaRc:fd:allow $DIR_USUARIOS/persoais/alumnos
#Cartafoles cursos
for CURSO in $(cat f00_cursos.txt)
do
setfacl -m g:g-$CURSO-alum:rxpaRc::allow $DIR_USUARIOS/persoais/alumnos/$CURSO
setfacl -m g:g-$CURSO-profes:rxpaRc:fd:allow $DIR_USUARIOS/persoais/alumnos/$CURSO
setfacl -m group@::fd:allow $DIR_USUARIOS/persoais/alumnos/$CURSO
setfacl -m g:"Domain Admins":modify_set:fd:allow $DIR_USUARIOS/persoais/alumnos/$CURSO
done
#Cartafol comun
setfacl -m g:g-profes:rxpaRc::allow $DIR_COMUN
setfacl -m g:g-alum:rxpaRc::allow $DIR_COMUN
#Subcartafol departamentos
setfacl -m g:g-profes:modify_set:fd:allow $DIR_COMUN/departamentos
#Subcartafoles cursos
# O participante no curso á vista do esquema de permisos
# do exemplo de arriba debe ser quen de axustar
# os permisos de comun/cursos
- Executamos o script:
sh 02_axustar_acls_esqueleto.sh
- Unha vez executado o script, recoméndase comprobar con getfacl -v que cada carpeta ten a ACL que lle corresponde.
Compartir as carpetas por CIFS
- O único que nos resta por facer na máquina FreeNAS é compartir por CIFS os dous conxuntos de datos que conteñen toda o esqueleto das carpetas dos usuarios e común.
Configurar os usuarios e equipos do dominio para acceder ás carpetas almacenadas en FreeNAS
- Agora que xa temos na NAS os recursos compartidos necesarios para poder almacenar as carpetas dos usuarios e comúns, imos facer a configuración necesaria para que tanto os equipos Windows como Linux utilicen esas carpetas en lugar das compartidas no controlador de dominio.
Configuración para os equipos Windows
- Para cambiar a configuración dos equipos Windows, non haberá que facer nada nos clientes. Os cambios farémolo na configuración dos usuarios e no script de inicio de sesión.
Editamos en dserver00 o script de inicio de sesión inicio.bat, e nos comandos net use que conectan as carpetas comun e alumnos (para os profes), cambiamos dserver00 por nas00 (recórdese que no ficheiro de configuración de samba se pode consultar onde está a carpeta que contén os scripts de inicio de sesión, que é a que está compartida como netlogon).
Configuración para os equipos Linux
- Cambiamos no ficheiro /etc/security/pam_mount.conf.xml dserver00 por nas00
- Engadimos o parámetro noperm xa que o cliente non recoñece as ACLs NFSv4.
...
<volume sgrp="g-profes" fstype="cifs" server="nas00.iescalquera.local" path="usuarios/persoais/profes/%(USER)" mountpoint="/media/%(USER)/Persoal" options="workgroup=iescalquera,iocharset=utf8,uid=%(USER),noperm" />
<volume sgrp="g-dam1-alum" fstype="cifs" server="nas00.iescalquera.local" path="usuarios/persoais/alumnos/dam1/%(USER)" mountpoint="/media/%(USER)/Persoal" options="workgroup=iescalquera,iocharset=utf8,uid=%(USER),gid=g-dam1-profes,noperm" />
<volume sgrp="g-dam2-alum" fstype="cifs" server="nas00.iescalquera.local" path="usuarios/persoais/alumnos/dam2/%(USER)" mountpoint="/media/%(USER)/Persoal" options="workgroup=iescalquera,iocharset=utf8,uid=%(USER),gid=g-dam2-profes,noperm" />
<volume sgrp="g-usuarios" fstype="cifs" server="nas00.iescalquera.local" path="comun" mountpoint="/media/%(USER)/Comun" options="workgroup=iescalquera,iocharset=utf8,noperm" />
<volume sgrp="g-profes" fstype="cifs" server="nas00.iescalquera.local" path="usuarios/persoais/alumnos" mountpoint="/media/%(USER)/Alumnos" options="workgroup=iescalquera,iocharset=utf8,noperm" />
<volume sgrp="g-usuarios" fstype="cifs" server="nas00.iescalquera.local" path="usuarios/perfisLinux" mountpoint="/home/local/IESCALQUERA" options="workgroup=iescalquera,iocharset=utf8,uid=%(USER),noperm" />
</pam_mount>