TDC / TOC
Objetivo
El script bastiona-linux pretende facilitar el proceso de aplicación de los requisitos corporativos de bastionado, a la vez que crea una plataforma flexible para la incorporación de nuevas medidas que puedan surgir en el futuro así como para eliminar o modificar las ya existentes.
Ejecución
El script se puede ejecutar de dos maneras:
1- Mediante la asignación de permisos de ejecución
chmod +x bastiona-REL.sh
./ bastiona-REL.sh
2- Invocando una nueva instancia de bash con el script como argumento
bash bastiona-REL.sh
Argumentos de ejecución
Es posible indicar como argumento de ejecución las opciones:
- -h o –help: Muestra un mensaje de ayuda por pantalla
- -r o –restore: Restaura el sistema al estado pre-bastionado, deshace todos los cambios realizados por el script de bastionado
Flujo de ejecución
El script sigue el siguiente flujo de ejecución, una vez invocado el archivo bastiona-REL.sh:
1- Incluye el archivo variables.sh
2- Incluye el archivo functions.sh
3- Comprueba los argumentos
4- Incluye el archivo head.sh
5- Crea el directorio $RUTA_BASE/bastionado, algunos módulos guardan información en él
6- Crea el directorio $RUTA_BASE/.bastionado_restore, en el se guarda toda la información de restauración, no se puede eliminar nunca
7- Se asegura de que SELinux esté activo o lo desactiva en caso de estar restaurando
8- Comprueba si el script se está ejecutando a través de SSH
9- Ejecuta los módulos acabados en .sh de la carpeta módulos
- Cada módulo muestra mensajes de OK o FALLO para cada tarea que realiza
- Cada módulo almacena el mensaje de OK o FALLO en el archivo de log indicado por la variable $LOGRUTA («/tmp/$(hostname)hardening$(date +%d-%m_%H-%M).log» por defecto)
- Cada módulo almacena los datos necesarios para la restauración en el directorio indicado por la variable $RUTA_RESTAURACION
- En caso de ser una restauración, cada módulo recupera los datos necesarios desde el directorio indicado por la variable $RUTA_RESTAURACION
10- Ejecuta los módulos acabados en .sh del directorio final-steps
11- Ejecuta las acciones que no se pueden ejecutar automáticamente, estas acciones las establecen los módulos pertinentes, en este paso tan solo se ejecutan
12- Muestra los mensajes de finalización de la ejecución
Estructura del script
El script se divide en dos partes:
1- El núcleo
2- Los módulos
Todos los archivos están contenidos en el directorio bastiona-linux y su estructura de árbol es la siguiente:
bastiona-linux
modules
final-steps
….
….
….
….
audit.rules
Bastille-3.0.9-1.0.noarch.rpm
bastiona-REL.sh
functions.sh
head.sh
variables.sh
El núcleo
El núcleo se encarga de:
- Establecer las variables
- Comprobar que se cumplen con los requisitos de ejecución
- Ejecuta los módulos de forma ordenada
- Muestra un mensaje sobre la ejecución de cada módulo
- Crea un archivo log que almacena el resultado de la ejecución de cada módulo
- Realiza las tareas marcadas para ejecutar al final del script
Los archivos que componen el núcleo, por orden de inclusión, son los siguientes:
Archivo |
Función |
bastiona-REL.sh | Es el archivo principal, el encargado de gestionar la ejecución correcta de los módulos y el que se debe invocar desde línea de comandos |
variables.sh | Almacena las variables que son configurables por el usuario, ya sean del núcleo o de los módulos. Las variables se agrupan por módulos, los módulos que puedan ser configurables por el usuario deben incluir los parámetros editables en este archivo |
functions.sh | Define algunas funciones genéricas que se pueden utilizar tanto en el núcleo como en los módulos |
head.sh | Realiza unas comprobaciones previas a la ejecución, muestras un mensaje de advertencia y pide confirmación al usuario antes de iniciar la ejecución del script |
Los módulos
Los módulos son pequeños scripts que realizan funciones concretas, por lo general cada paso del proceso de bastionado se compondrá de un script, aunque en ocasiones un script se puede encargar de varios pasos si están íntimamente relacionados. Los módulos se encuentran en el directorio modules y en el subdirectorio modules\final-steps.
Su orden de ejecución viene determinado por dos parámetros: el nombre del archivo y su ubicación. Primero se ejecutan por orden alfabético los módulos del directorio modules seguidos por orden alfabético de los módulos del directorio modules\final-steps.
Listado de módulos
Estos son los módulos que existen actualmente y sus funciones:
Archivo |
Función |
00-yum.sh | Comprueba si hay conexión a Internet y si la hay configura el repositorio public yum de oracle |
01-secure-pwd.sh | Configura mejoras en las contraseñas: sha512, recordar las 10 últimas contraseñas y realizar comprobaciones a las nuevas |
02-add-admin.sh | Crea un usuario con privilegios de administración (sudo y su) |
banner.sh | Configura el mensaje que se muestra al iniciar sesión. Utiliza la variable banner |
bios.sh | Muestra consejos sobre la configuración del BIOS al final de la ejecución del script |
cron-at.sh | Configura cron y at para que solo puedan ser ejecutados por el usuario root |
disable-ctrlaltdel.sh | Deshabilita el reinicio de la máquina mediante la combinación de teclas control+alt+delete |
disable-devices.sh | Muestra un listado de los dispositivos que estén utilizando módulos del kernel y desactiva los indicados por el usuario |
disable-remotefs.sh | Desactiva los módulos utilizados para montar recursos compartidos, tras pedir confirmación al usuario |
disable-root-login.sh | Desactiva la contraseña de root, impidiendo de esta manera el inicio de sesión con este usuario. También desactiva el acceso del mismo a todas las terminales del sistema |
disable-suid.sh | Busca archivos con el bit SUID activo y se lo deshabilita a los archivos indicados por el usuario. Este módulo utiliza las variables:
|
file-permissions.sh | Establece permisos restrictivos a los archivos: passwd,shadow,group,gshadow |
fstab.sh | Establece opciones restrictivas a los puntos de montaje |
grub.sh | Protege el gestor de arranque mediante contraseñaq |
ipv6.sh | Desactiva el uso de ipv6 por parte del SO |
ntp.sh | Configura la sincronización del reloj mediante NTP. Utiliza la variable NTPSERVER |
process-accounting.sh | Activa el registro de procesos que se ejecutan en el sistema |
remote-logs.sh | Configura el envío de logs a un servidor remoto. Utiliza las variables
|
remove-compile-tools.sh | Elimina utilidades de compilación. Utiliza la variable compilers |
secure-bootup.sh | Desactiva el inicio interactivo del sistema |
secure-shell.sh | Configura el tiempo de inactividad para las shells, pasado este tiempo se cierra la sesión |
services.sh | Muestra los puertos que están a la escucha y aconseja su revisión al finalizar la parte automática del script. |
ssh.sh | Configura el servidor SSH para que sea más seguro y configura las reglas necesarias para iptables |
sudo-su.sh | Configura sudo y su para que permita su ejecución a miembros del grupo de administradores |
sysctl.sh | Configura parámetros del sistema mediante sysctl |
tcpwrappers.sh.disabled | Configura los permisos de tcpwrappers, este módulo está desactivado |
umask.sh | Configura la máscara de creación de archivos a una más restrictiva |
updates.sh | Muestra un mensaje sobre la política de actualizaciones de la compañía al usuario al finalizar la automatización |
zeroconf.sh | Desactiva el servicio de autodescubrimiento de avahi |
final-steps/ 01-amtu.sh | Instala y configura AMTU si hay conexión a Internet |
final-steps/ 02-aide.sh | Instala y configura AIDE si hay conexión a Internet |
final-steps/ 03-auditd.sh | Activa y configura el auditado del sistema, utiliza el archivo audit.rules |
final-steps/ 04-bastille.sh | Instala el paquete Bastille desde el archivo Bastille-3.0.9-1.0.noarch.rpm y lo ejecuta |
final-steps/ 100-iptables.sh.disabled | Configura las reglas de denegación de tráfico de entrada y salida para iptables, este módulo está desactivado ya que de esto se encargará el departamento correspondiente |
Descargar
El script se puede descargar desde este link bastiona-linux