Integración de FreeNAS nun dominio Samba4 e compartición de recursos por CIFS

De Manuais Informática - IES San Clemente.
Ir a la navegación Ir a la búsqueda
  • 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

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.

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).

Integrar o equipo no dominio


Aprende.png
TEN EN CONTA QUE...

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

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).
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.

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>


-- Antonio de Andrés Lema e Carlos Carrión Álvarez