Los templates de Bastille resultan muy útiles para automatizar configuraciones de equipos ya sean jails, equipos físicos o máquinas virtuales , en este artículo veremos como realizar una configuración base mediante este sistema.
El primer paso es crear el repositorio de git, en mi caso se trata de un repositorio en un GitLab alojado localmente.
Clonamos el repositorio en nuestro pc local:
Creamos los directorios y ficheros que Bastillefile necesita para realizar la configuración:
cd bastille-basicconfiguration
mkdir -p home/kr0m/.ssh/
vi home/kr0m/.ssh/authorized_keys
vi home/kr0m/.bashrc
vi home/kr0m/.bash_profile
vi home/kr0m/.vimrc
mkdir -p root/.scripts
vi root/.bashrc
vi root/.bash_profile
vi root/.vimrc
vi root/.scripts/securityCheck.sh
vi root/.scripts/sshKeys.py
vi root/.scripts/sshAccess.py
mkdir -p usr/local/etc/rc.d
vi usr/local/etc/rc.d/sshAccess
mkdir -p var/cron/tabs/
vi var/cron/tabs/root
La estructura final de directorios/ficheros será la siguiente:
├── Bastillefile
├── home
│ └── kr0m
│ ├── .bash_profile
│ ├── .bashrc
│ ├── .ssh
│ │ └── authorized_keys
│ └── .vimrc
├── root
│ ├── .bash_profile
│ ├── .bashrc
│ ├── .scripts
│ │ ├── securityCheck.sh
│ │ ├── sshAccess.py
│ │ └── sshKeys.py
│ └── .vimrc
├── usr
│ └── local
│ └── etc
│ └── rc.d
│ └── sshAccess
└── var
└── cron
└── tabs
└── root
Definimos en el Bastillefile las acciones a realizar sobre la jail, instalación de software, modificación de ficheros, adición de usuarios, copia de ficheros y arranque de servicios:
CMD ASSUME_ALWAYS_YES=yes pkg upgrade
PKG vim bash bash-completion curl bat py39-pip rsync python
CMD pip install --upgrade pip
CMD pip install requests
CMD bash -c 'sed -i "" "s/127.0.0.1\t\tlocalhost localhost.my.domain/127.0.0.1\t\t$HOSTNAME $HOSTNAME.alfaexploit.com localhost localhost.my.domain/g" /etc/hosts'
CMD bash -c 'id kr0m 1>2&>/dev/null;if [ $? -eq 0 ];then echo "KR0M-PASSWORD" | pw usermod -n kr0m -s /usr/local/bin/bash -h 0;else echo "KR0M-PASSWORD" | pw useradd -n kr0m -m -G wheel -s /usr/local/bin/bash -h 0;fi'
CMD echo "ROOT-PASSWORD" | pw usermod -n root -s /usr/local/bin/bash -h 0
CP home usr
CMD chmod 700 /usr/home/kr0m/.ssh
CMD chown -R kr0m:kr0m /usr/home/kr0m
CP root /
CMD chmod 700 /root/.scripts/sshKeys.py
CMD chmod 700 /root/.scripts/securityCheck.sh
CMD chmod 700 /root/.scripts/sshAccess.py
CP usr /
CMD chmod 555 /usr/local/etc/rc.d/sshAccess
CMD chown root:wheel /usr/local/etc/rc.d/sshAccess
CP var /
CMD chmod 600 /var/cron/tabs/root
SYSRC sshAccess_enable=YES
SERVICE sshAccess start
SYSRC sshd_enable=YES
SERVICE sshd start
NOTA: El comando CP solo añade contenido, por lo que se preservan los ficheros existentes añadiendo los nuevos.
Creamos una deploykey con role: Reporter en el repositorio de GitLab para que el servidor Bastille pueda clonar el repositorio.
Bastille incorpora un comando de bootstraping de templates pero parsea el nombre del repositorio de forma incorrecta:
_template=${bastille_templatesdir}/${_user}/${_repo}
En mi caso el repositorio tiene la URL:
https:///gitlab.alfaexploit.com/gitlab-instance-0a98b435/bastille-basicconfiguration.git
Por lo tanto parsea gitlab-instance-0a98b435 como nombre del repositorio y el template quedaría clonado del siguiente modo:
/usr/local/bastille/templates
/usr/local/bastille/templates/bastillebsd-templates
/usr/local/bastille/templates/bastillebsd-templates/nginx
/usr/local/bastille/templates/gitlab.alfaexploit.com
/usr/local/bastille/templates/gitlab.alfaexploit.com/gitlab-instance-0a98b435
Para evitar dicho problema lo haremos nosotros mismos a mano:
cd /usr/local/bastille/templates/gitlab.alfaexploit.com
git clone https:///MightyMax:DEPLOYTOKEN@gitlab.alfaexploit.com/gitlab-instance-0a98b435/bastille-basicconfiguration.git
/usr/local/bastille/templates
/usr/local/bastille/templates/bastillebsd-templates
/usr/local/bastille/templates/bastillebsd-templates/nginx
/usr/local/bastille/templates/gitlab.alfaexploit.com
/usr/local/bastille/templates/gitlab.alfaexploit.com/bastille-basicconfiguration
Creamos una jail de pruebas:
Aplicamos el template: