Integración de FreeNAS nun dominio LDAP

De Manuais Informática - IES San Clemente.
Ir a la navegación Ir a la búsqueda
  • Neste apartado veremos os pasos necesarios para integrar o equipo FreeNAS dentro do dominio, de forma que poidamos acceder a el cos usuarios do mesmo.
  • Antes de nada, debemos crear unha instantánea na máquina FreeNAS, co nome Recén instalada

Cambiar o nome da máquina

  • Este paso non é imprescindible, pero imos cambiar o nome da máquina para poñer o que se corresponde co escenario.

Crear pool zfs e configuralo como pool do sistema

  • Para integrar o equipo FreeNAS no dominio non habería por que ter ningún volume definido, pero nas últimas versións FreeNAS precisa ter configurado algún volume como volume do sistema, xa que aí garda certa información de configuración. Esta información é necesaria para poder iniciar algúns servizos como SMB.

Integrar o equipo no dominio

  • Imos xa coa integración da máquina FreeNAS dentro do dominio para que recoñeza os usuarios e grupos do servidor LDAP. Aquí a configuración será diferente se estamos traballando nun dominio con samba3 e CIFS ou tan só co LDAP e NFS.

Integración nun dominio con LDAP e NFS

Integración nun dominio con LDAP e samba3

Comprobación dos usuarios do dominio

  • Unha vez integrado o equipo FreeNAS no dominio, usando unha das dúas opcións explicadas nos apartados anteriores, podemos comprobar que os usuarios e grupos do dominio están xa dispoñibles no sistema:

Crear o esqueleto de carpetas

  • Comezaremos creando o esqueleto de carpetas, que será moi similar ao que tiñamos en dserver00 na Parte III, 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
cd scripts
  • Seguindo a mesma filosofía que na Parte III, 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 III:
  • 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 exportasen 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 III. 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/profes || mkdir -p $DIR_USUARIOS/profes


#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/alumnos/$CURSO || mkdir -p $DIR_USUARIOS/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

  • Este script é tamén idéntico ao que usamos na Parte III.
  • SCRIPT: 02_axustar_permisos_esqueleto.sh
#!/bin/bash

#Chamar ao script de variables
. ./00_variables.sh # Tamén podería ser: source ./00_variables.sh


#Cartafol /home/iescalquera
chown root:g-usuarios $DIR_USUARIOS 	# Cambiar grupo propietario
chmod 750 $DIR_USUARIOS		# Axustar permisos

#Cartafol profes
chown root:g-profes $DIR_USUARIOS/profes
chmod 750 $DIR_USUARIOS/profes


#Cartafol alumnos
chown root:g-usuarios $DIR_USUARIOS/alumnos
chmod 750 $DIR_USUARIOS/alumnos

#Cartafoles cursos
for CURSO in $(cat f00_cursos.txt)
do
	chown root:g-usuarios $DIR_USUARIOS/alumnos/$CURSO
	chmod 750 $DIR_USUARIOS/alumnos/$CURSO
done


#Cartafol comun
chown root:g-usuarios $DIR_COMUN
chmod 750 $DIR_COMUN


#Subcartafol departamentos

chown root:g-profes $DIR_COMUN/departamentos
chmod 770 $DIR_COMUN/departamentos



#Subcartafoles cursos
# O participante no curso á vista do esquema de permisos
# e do exemplo de arriba debe ser quen de axustar
# os permisos de /comun/cursos
# Ollo!!!!! nas subcarpetas co grupo others.
# Unha pista para o grupo propietario dos cursos: g-"$CURSO"-profes 
#
#IMPORTANTE: o que se lle engada ao script, debe valer para futuros crecementos en curso: asir1, asir2, etc.
#Con só dar de alta no ficheiro f00_cursos.txt os cursos non deberamos tocar nada no presente script.
  • Executamos o script
sh 02_axustar_permisos_esqueleto.sh
  • Comprobamos resultados, por exemplo na carpeta /mnt/datos/usuarios:
[root@nas00] /mnt/datos/scripts# ls -la /mnt/datos/usuarios/
total 34
drwxr-x---  4 root  g-usuarios  4 May 24 07:05 ./
drwxr-xr-x  6 root  wheel       6 May 24 07:03 ../
drwxr-x---  4 root  g-usuarios  4 May 24 07:05 alumnos/
drwxr-x---  2 root  g-profes    2 May 24 07:05 profes/

Creación das carpetas persoais dos usuarios (home)

  • Traemos para a carpeta scripts o contido de /etc/skel de uclient01.
[root@nas00] /mnt/datos/scripts# scp -r uadmin@uclient01:/etc/skel .
Could not create directory '/root/.ssh'.
The authenticity of host 'uclient01.iescalquera.local (172.16.5.20)' can't be established.
ECDSA key fingerprint is 08:66:4b:b7:0b:2c:ac:f0:c7:20:19:2a:0a:5d:dd:2c.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/root/.ssh/known_hosts).
uadmin@uclient01.iescalquera.local's password: 
.bashrc                      100% 3637     3.6KB/s   00:00    
.bash_logout                 100%  220     0.2KB/s   00:00    
examples.desktop             100% 8980     8.8KB/s   00:00    
.profile                     100%  675     0.7KB/s   00:00
  • Agora renomeamos a carpeta que se trouxo de Ubuntu, para evitar confusións.
[root@nas00] /mnt/datos/scripts# mv skel skel_ubuntu
[root@nas00] /mnt/datos/scripts# ls
./           00_variables.sh         02_axustar_permisos_esqueleto.sh  skel_ubuntu/
../          01_crear_esqueleto.sh   f00_cursos.txt
  • Para finalizar, o script que crea as carpetas persoais dos usuarios e axusta os seus permisos teremos que modificalo un pouco, xa que en lugar de crear as carpetas dos usuarios en /home/iescalquera, que é a ruta que indican os datos dos usuarios no LDAP, haberá que crealas na carpeta /mnt/datos/usuarios (que está configurada no script de variables na variable $DIR_USUARIOS).
  • Faremos esta substitución utilizando o mesmo comando awk.
  • SCRIPT: 03_crear_home_usuarios_axustar_permisos.sh
#!/bin/bash

#Chamar ao script de variables
. ./00_variables.sh

#Lembrar que  cada usuario ten o seguinte formato
# Un/unha profe  -> sol:x:10000:10000:Profe - Sol Lua:/home/iescalquera/profes/sol:/bin/bash
# Un/unha alumna -> mon:x:10002:10000:DAM1 Mon Mon:/home/iescalquera/alumnos/dam1/mon:/bin/bash

# Observar que posición ocupan os campos e que están separados por :

# Imos etraer con awk dos usuarios con ID (campo 3) entre 10000 e 60000 os campos
# Usuario (campo 1) e home (campo 6)
# Deste último campo (home) imos extraer o grupo ao que pertence o usuario
# Neste caso o separador de campos é /, e o grupo está no 4º campo.


#Volcamos tódolos usuarios (locais e ldap) do sistema a un ficheiro
getent passwd>usuarios.txt


#Extraemos os campos anteriores
for USUARIO in $( awk -F: '$3>=10000 && $3<60000  {print $1":"$6}' usuarios.txt )
do
	#USUARIO vai ter o seguinte formato
	# sol:/home/iescalquera/profes/sol

 	NOME_USUARIO=$( echo $USUARIO | awk -F: '{print $1}')
        HOME_USUARIO_LDAP=$( echo $USUARIO | awk -F: '{print $2}')
 	HOME_USUARIO=$( echo $USUARIO | awk -v DIR=$DIR_USUARIOS -F: '{gsub("/home/iescalquera",DIR,$2);print $2}')
	GRUPO_GLOBAL_USUARIO=$( echo $HOME_USUARIO_LDAP | awk -F/ '{print $4}')

	#Creamos a carpeta persoal do usuario/a
	test -d $HOME_USUARIO || mkdir -p $HOME_USUARIO

 	#Copiamos o contido de skel_ubuntu (ocultos incluídos, -a) á carpeta persoal do usuario/a
	cp -a skel_ubuntu/\. $HOME_USUARIO

	#Comprobamos se o usuario/a é un profe
	if [ $GRUPO_GLOBAL_USUARIO = "profes" ]
	then
		#Se é un profe deixamos entrar só a ese profe na súa carpeta persoal
		chown -R $NOME_USUARIO:g-usuarios $HOME_USUARIO
		chmod -R 700 $HOME_USUARIO
	else
		#Se é un alumno o campo 5 do home coincide con parte do nome do grupo ao que pertence
		GRUPO_ALUMNO=$( echo $HOME_USUARIO_LDAP |awk -F/ '{print $5}')

		#Se é un alumno deixamos entrar en modo lectura execución aos profes dese curso
		# en modo recursivo
		chown -R $NOME_USUARIO:g-"$GRUPO_ALUMNO"-profes $HOME_USUARIO
		chmod -R 750 $HOME_USUARIO
	fi
done

rm usuarios.txt
  • Unha vez executado o script con:
sh 03_crear_home_usuarios_axustar_permisos.sh
  • Podemos comprobar con ls -la sobre as carpetas dos usuarios o seu resultado.


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