Introduccin El objetivo de la prctica consiste en la utilizacin de los mecanismos que implementa Linux para la gestin de usuarios y grupos en un sistema de estas caractersticas. Adems se pretende familiarizar a los administradores con los mecanismos de proteccin habilitados en este sistema operativo. En particular, se abordarn los siguientes conceptos: Usuarios y grupos primarios Grupos suplementarios Reglas de proteccin de ficheros y directorios Utilizacin de los bits SETUID y SETGID en ficheros ejecutables Utilizacin del bit SETGID en directorios Utilizacin del sticky bit Listas de control de acceso (ACLs) Cuotas de disco Para ello, se plantea un caso prctico de una organizacin que utiliza un sistema Linux como soporte informtico. Reglas de seguridad en la Organizacin El plan de seguridad de la Organizacin cubre los siguientes aspectos: 1. Contraseas: Los usuarios deben cambiar sus contraseas cada 3 meses. Es necesario notificar a los usuarios 1 da antes de que su contrasea caduque. Transcurridos 2 das desde la caducidad del password, la cuenta ha de quedar desactivada. En la prctica, la contrasea de cada usuario coincidir con el nombre de usuario. 2. Directorio de cada usuario Todo usuario del sistema debe poseer un subdirectorio del directorio /home cuyo nombre debe coincidir con el de la cuenta del usuario En este directorio, el usuario debe poder crear y borrar ficheros y directorios, pero no debe poder modificar los permisos de su directorio de conexin. Ningn otro usuario del sistema podr acceder a dicho directorio ni a su contenido Cada usuario tendr una cuota de disco de 50 Mb que podr sobrepasar temporalmente (2 das). 3. Proyectos en ejecucin La Organizacin tiene varios proyectos en curso. Para estos proyectos, se ha de cumplir: Cada proyecto debe tener un directorio bajo el directorio /export/proyectos donde se almacenar la documentacin asociada al mismo. Todos los usuarios que participan en un proyecto deben tener la posibilidad de leer, modificar, crear y borrar los archivos que forman parte del proyecto Cuando un usuario cree un archivo en el directorio del proyecto, por defecto, ste debe poder ser ledo, modificado o borrado por cualquier otro usuario del mismo proyecto Ningn otro usuario podr acceder a estos directorios Existir un directorio /export/proyectos/comun donde se almacenar informacin comn a todos los proyectos de tal forma que todos los usuarios puedan aadir y modificar informacin a este directorio, pero slo el propietario de cada carpeta pueda eliminarla. 4. Ejecutivos En la empresa existen varios ejecutivos que tienen asignada la evaluacin de algunos de los proyectos existentes con las siguientes restricciones: Los ejecutivos asociados a un determinado proyecto podrn leer la informacin de ese proyecto Los ejecutivos que no pertenezcan a un proyecto no deben poder acceder directamente a los directorios de los proyectos Para que estos ejecutivos puedan controlar el estado de cada proyecto, deben existir en el directorio /usr/local/bin tantos programas como proyectos existan. Estos programas internamente han de realizar un ls sobre el directorio del proyecto correspondiente El programa que permite evaluar cada proyecto, debe cumplir lo siguiente: - Debe poder ser ejecutado nicamente por los ejecutivos de la organizacin. - Debe tener asignado los permisos suficientes para poder ejecutar el ls sobre el directorio correspondiente. Situacin actual de la Organizacin Actualmente, se tiene la siguiente situacin: Existen 3 proyectos: Aeropuerto, Centro Comercial y Parque Dos ejecutivos: ejec1 y ejec2 La distribucin de los usuarios por proyectos es de la siguiente forma:
Usuario Proyecto Aeropuerto Centro Comercial Parque ejec1 ejec2
Opcional: Se valorar cualquier aportacin extra del alumno: limitacin de horas de conexin, acceso restringido a ciertos terminales, creacin de scripts para la automatizacin,
Para la realizacin de la prctica se ha desarrollado el siguiente script: #--------------------------------------------------------------- #El script empieza a partir de aqu:
#! /bin/bash #Cuentas de usuario que vamos a crear declare -a Nombreusu=(usu1 usu2 usu3 usu4 usu5 usu6 marta); #proyectos declare -a Proyectos=(Aeropuerto CentroComercial Parque); #y usuarios asociados a cada proyecto declare -a Aeropuerto=(usu2 usu3 usu4 usu5 marta); declare -a CentroComercial=(usu1 usu3 usu4 usu5); declare -a Parque=(usu5 usu6);
#cuentas de ejecutivos declare -a Nombreeje=(ejec1 ejec2 marta); #sus proyectos declare -a Proyectoseje=(AeropuertoE CentroComercialE ParqueE); #Los ejecutivos asociados a cada proyecto declare -a AeropuertoE=(ejec1 ejec2); declare -a CentroComercialE=(ejec2); declare -a ParqueE=(ejec1 marta);
for j in "${Nombreusu[@]}" do echo "Creando cuenta de ${j}" #creamos la cuenta de usuario con el nombre dado, por defecto su home es su nombre useradd $j -f2 #hacemos que su directorio personal pertenezca a root y a su grupo de #usuario, en el que solo debera estar el usuario chown root:$j /home/$j #luego le damos permisos al grupo para que el usuario pueda escribir en el chmod 770 /home/$j #le asignamos como password el nombre del usuario echo $j | passwd --force --stdin $j #Cambiamos las propiedades de la contrasea con chage #Desactivamos las cuentas dos dias despues de la fecha de expiracin #Avisamos durante un dia #Cambiar contraseas cada 3 meses (90 dias) chage -I 2 -W 1 -M 90 $j #cuotas para los usuarios #suponemos que han sido activadas previamente a nivel de FS #y configuradas, aqu solo va la configuracin del usuario setquota -u $j 51200 51200 0 0 -a setquota -T -u $j 172800 172800 -a
done #primero creamos la carpeta /export y sus subcarpetas mkdir /export mkdir /export/proyectos mkdir /export/proyectos/comun #le damos sus permisos chmod -R 777 /export #ponemos el sticky bit en la carpeta comun chmod 1777 /export/proyectos/comun
#Ahora vamos con los proyectos #Para cada proyecto crearemos un grupo for i in "${Proyectos[@]}" do echo "Proyecto: " echo $i #Creamos el grupo groupadd $i #creamos una carpeta en /export/proyectos mkdir /export/proyectos/$i chgrp $i /export/proyectos/$i chmod 2770 /export/proyectos/$i #para cada proyecto iteramos para ver los usuarios que estan asociados a el eval varAlias=\${$i[@]} for j in $varAlias do echo "Usuario: " echo $j #aadimos el usuario al grupo usermod -a -G $i $j done done
groupadd ejecutivos #ahora vienen los ejecutivos for j in "${Nombreeje[@]}" do echo "Creando cuenta de ${j}" #creamos el usuario useradd $j -f2 echo $j | passwd --force --stdin $j #lo aadimos al grupo "ejecutivos" usermod -a -G ejecutivos $j done
#damos permisos de lectura a los ejecutivos a /export/proyectos setfacl -m group:ejecutivos:rx /export/proyectos
#Ahora vamos con los proyectos de los ejecutivos #Para cada proyecto crearemos un grupo for i in "${Proyectoseje[@]}" do echo "Proyecto: " echo $i
#para cada proyecto iteramos para ver los usuarios que estan asociados a el eval varAlias=\${$i[@]} for j in $varAlias do echo "Usuario: " echo $j #calculamos el nombre del proyecto quitandole la E del final #para poder darle el setfacl eval w=`echo $i | head -c -2` echo $w setfacl -m user:$j:rx /export/proyectos/$w done done
#------------------------------------------------------ # Final del script
Aparte del script se ha modificado el /etc/fstab para activar las cuotas
Y luego remontado el sistema de ficheros mount -o remount
para finalmente crear los ficheros de cuota con quotacheck -cug
Creación de Jaulas Chroot para El Mantenimiento de Aplicaciones Web Mediante Sistemas de Control de Versiones (SCV) Distribuidos Sobre Debian GNU-Linux 7
LAECI - Laboratorio de Altos Estudios en Ciencias Informáticas