Compare commits

...

3 commits

10 changed files with 413 additions and 36 deletions

View file

@ -49,7 +49,7 @@ Nota: En determinadas versiones, las actualizaciones a partir de los repositorio
#### Inicialización de configuración GPG #### Inicialización de configuración GPG
Como un requisito de nuestra plataforma, todos los desarrolladores deberán contar, por lo menos, con una clave GPG, que se utilizará para firmar o decifrar archivos, correos u otros. Esto se hará con el uso del comando gpgp que ya debió ser instalado con la ejecución de bin/boostrap.sh. Como un requisito de nuestra plataforma, todos los desarrolladores deberán contar, por lo menos, con una clave GPG, que se utilizará para firmar o decifrar archivos, correos u otros. Esto se hará con el uso del comando gpg (previamente instalado con la ejecución de bin/boostrap.sh).
En este paso estableceremos la configuración por defecto de GPG: En este paso estableceremos la configuración por defecto de GPG:

View file

@ -56,6 +56,9 @@ install() {
local DIALOG_PACKAGE=dialog local DIALOG_PACKAGE=dialog
local SOPS_PACKAGE=sops local SOPS_PACKAGE=sops
local GNUPG_PACKAGE=gnupg local GNUPG_PACKAGE=gnupg
local ZIP_PACKAGE=zip
local SQLITE_COMMAND=sqlite3
local SQLITE_PACKAGE="$SQLITE_COMMAND libsqlite3-dev"
# Load base bash library # Load base bash library
source $BIN_PATH/$LIBRARY/base.lib source $BIN_PATH/$LIBRARY/base.lib
@ -98,7 +101,14 @@ install() {
command_installed $DIALOG_PACKAGE command_installed $DIALOG_PACKAGE
if [ $? -ne 0 ] if [ $? -ne 0 ]
then then
os_pkgs_install $DIALOG_PACKAGE os_pkgs_install $ZIP_PACKAGE
fi
# Install sqlite3 from OS Packages
command_installed $SQLITE_COMMAND
if [ $? -ne 0 ]
then
os_pkgs_install $SQLITE_PACKAGE
fi fi
# Install python from OS Packages # Install python from OS Packages

1
bin/config/devspath.dat Normal file
View file

@ -0,0 +1 @@
devs

1
bin/config/gpg.backup Normal file
View file

@ -0,0 +1 @@
secure/backups

17
bin/config/packages.dat Normal file
View file

@ -0,0 +1,17 @@
gh
gnupg2
iftop
imagemagick
iperf
jq
lsof
mutt
net-tools
nmap
paperkey
pipx
python3-pip
python3-gitlab
remmina
terminator
wireshark

135
bin/gpg_backup.sh Executable file
View file

@ -0,0 +1,135 @@
#!/bin/bash
#
# gpg_backup.sh
# Modified: 2024/12/09 10:27:00
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
#
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
# bajo los términos de la Licencia Pública Affero General de GNU tal como
# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia,
# o (a su elección) cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea útil,
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
# Licencia Pública Affero General de GNU para obtener más detalles.
#
# Debería haber recibido una copia de la Licencia Pública Affero General
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
#baselib_test
# LOAD CONSOLE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/console.lib
#consolelib_test
# LOAD SQLITE3 BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/sqlite.lib
#sqlitelib_test
# LOAD GPG BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/gpg.lib
#gpglib_test
# Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
# Load gpg messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "gpg"
########### MAIN PROGRAM ###########
# Set program title
title="$head_000 $head_002"
apps_title="${gpmsg_001}"
# Check if dialog is not installed, exited!
command_installed "dialog"
if [ $? -ne 0 ]
then
display_devstools_header "${gpmsg_001}"
echo "${head_001}"
exit 200
fi
# Check if os is valid!
get_osname
if [ "${os_name}" == "${head_unknow}" ]
then
dialog_error_box "${head_error}" "${head_os_error}"
exit 3
fi
command_installed "zip"
if [ $? -ne 0 ]; then
dialog_error_box "${head_error}" "${head_zip}"
exit 9
fi
# Backup de claves GPG
dialog_yesno "${gpmsg_105}"
case ${result} in
0)
gpg_backup "$DB_GPG_PATH/$DB_GPG_FILE" "$BIN_HOME/$GPG_CONFIG_PATH" "$DATEBAK"
rc=$?
case $rc in
0)
dialog_error_box "${head_info}" "${gpmsg_106}"
clear
exit 0
;;
10)
dialog_error_box "${head_error}" "${gpmsg_107}"
clear
exit $rc
;;
11)
dialog_error_box "${head_error}" "${gpmsg_108}"
clear
exit $rc
;;
13)
dialog_error_box "${head_error}" "${gpmsg_109}"
clear
exit $rc
;;
14)
dialog_error_box "${head_error}" "${gpmsg_111}"
clear
exit $rc
;;
15)
dialog_error_box "${head_error}" "${gpmsg_112}"
clear
exit $rc
;;
18)
dialog_error_box "${head_error}" "${gpmsg_110}"
clear
exit $rc
;;
*)
dialog_error_box "${head_error}" "${head_op_error} (${rc})"
exi $rc
;;
esac
;;
*)
dialog_error_box "${head_error}" "${head_op_error}"
;;
esac
# End Main Program
clear

View file

@ -17,15 +17,21 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # Debería haber recibido una copia de la Licencia Pública Affero General
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
GPG_DEFAULT_PATH=~/.gnupg GPG_DEFAULT_PATH=$HOME/.gnupg
GPG_CFG_PATH=bin/config GPG_CONFIG_PATH=bin/config
GPG_TEMPLATE=gpg.config GPG_TEMPLATE=gpg.config
GPG_CONFIG=gpg.conf GPG_CONFIG=gpg.conf
GPG_BACKUP_CFG=gpg.backup
GPGP_BACKUP_SECRET=gpg.secret
GPG_SUBKEY_ID="" GPG_SUBKEY_ID=""
GPG_REVOKE_FILES="*.rev"
DB_GPG_PATH=$HOME/.gnupg
DB_GPG_FILE=$USER.db
DB_GPG_SUBKEYS_KEY="subkey_id" DB_GPG_SUBKEYS_KEY="subkey_id"
DB_GPG_SUBKEYS="GPG_SUBKEYS" DB_GPG_SUBKEYS="GPG_SUBKEYS"
DF_GPG_SUBKEYS="${DB_GPG_SUBKEYS}.sql" SQL_GPG_SUBKEYS="${DB_GPG_SUBKEYS}.sql"
REVOKE_FILES="*.rev"
# Test library # Test library
function gpglib_test() { function gpglib_test() {
@ -62,7 +68,7 @@ function gpg_setting() {
if [ -f "${GPG_PATH}/${GPG_CONFIG}" ] if [ -f "${GPG_PATH}/${GPG_CONFIG}" ]
then then
# Destination file backup # Destination file backup
local BACKUP_FILE="${LOCAL_BACKUP}/gpg${TIMESTAMP}.bak" local BACKUP_FILE="${LOCAL_BACKUP}/gpg_${TIMESTAMP}.bak"
cp -f "${GPG_PATH}/${GPG_CONFIG}" "${BACKUP_FILE}" cp -f "${GPG_PATH}/${GPG_CONFIG}" "${BACKUP_FILE}"
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
return 3 return 3
@ -75,3 +81,105 @@ function gpg_setting() {
return $? return $?
} }
# Generate token for backup file
function gpg_backup_token() {
local SECRET_FILE=$1
if [[ ! -e $archivo_token ]]
then
local BACKUP_TOKEN=$(uuidgen)
echo "$BACKUP_TOKEN" > "$SECRET_FILE"
chmod 600 "$SECRET_FILE"
fi
return 0
}
# Local backup of gpp keys
function gpg_backup() {
local DB_BACKUP=$1
local BIN_CONFIG=$2
local TIMESTAMP=$3
local rc=0
# Check if backup configuration file exists
if [ ! -f $BIN_CONFIG/$GPG_BACKUP_CFG ]
then
return 10
fi
local LOCAL_BACKUP=$HOME/$(cat < $BIN_CONFIG/$GPG_BACKUP_CFG)
# Check if backup path exist
if [ -z "$LOCAL_BACKUP" ]; then
return 11
fi
if [ ! -d "${LOCAL_BACKUP}" ]
then
mkdir -p "${LOCAL_BACKUP}"
rc=$?
if [ $rc -ne 0 ]; then
return $rc
fi
fi
gpg_backup_token "${LOCAL_BACKUP}/$GPGP_BACKUP_SECRET"
# Get secret backup
ZPASSWORD=$(cat < "${LOCAL_BACKUP}/$GPGP_BACKUP_SECRET")
if [ -z "${ZPASSWORD}" ]; then
return 13
fi
# Exportar el anillo de claves GPG a un archivo de respaldo temporal
local TMP_PATH=$(mktemp -d)
local TMP_FILE="gpg.bak"
gpg --export-options backup -o "${TMP_PATH}/${TMP_FILE}" --export
rc=$?
if [ $rc -ne 0 ]; then
rm -rf "${tmp_path}"
return $rc
fi
# Dump GPG_SUBKEYS table to SQL
local TMP_DB_DUMP="${SQL_GPG_SUBKEYS}"
local DB_DUMP="${TMP_PATH}/${TMP_DB_DUMP}"
sqlite_dump "${DB_BACKUP}" "${DB_DUMP}" "${DB_GPG_SUBKEYS}"
rc=$?
if [ ${rc} -ne 0 ]
then
rm -rf "${TMP_PATH}"
return $rc
fi
# Copiar los archivos de revocación
local REVOKE_PATH="${GNUPGHOME:-$GPG_DEFAULT_PATH}/openpgp-revocs.d"
cp -rf "${REVOKE_PATH}"/${GPG_REVOKE_FILES} "${TMP_PATH}/"
rc=$?
if [ $rc -ne 0 ]
then
rm -rf "${TMP_PATH}"
return $rc
fi
# Cambiar el directorio de trabajo a la carpeta temporal para poder hacer el empaquetamiento zip
cd "${TMP_PATH}"
# Comprimir el archivo de respaldo en un archivo ZIP protegido con contraseña
BACKUP_FILE="${LOCAL_BACKUP}/gpg_${USER}_${TIMESTAMP}"
zip -r -P "${ZPASSWORD}" $BACKUP_FILE *
rc=$?
if [ $rc -ne 0 ]
then
rm -rf "${TMP_PATH}"
return $rc
fi
rm -rf "${TMP_PATH}"
return 0
}

95
bin/lib/sqlite.lib Normal file
View file

@ -0,0 +1,95 @@
#!/bin/bash
#
# Library: sqlite.lib
# Modified: 2024/12/09 08:20:00
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
#
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
# bajo los términos de la Licencia Pública Affero General de GNU tal como
# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia,
# o (a su elección) cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea útil,
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
# Licencia Pública Affero General de GNU para obtener más detalles.
#
# Debería haber recibido una copia de la Licencia Pública Affero General
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DB_LOADED=1
DB_PATH=dbfiles
DB_USER=${USER}.db
# Test library
function sqlitelib_test() {
echo "Sqlite Library loaded!"
exit 1
}
# Export selected sqlite tables
# Arguments:
# $1: Database file
# $2: Dump tables file
# $3...: Tables list to dump
# Example Use:
# sqlite_export "my_database.db" "output.sql" "table1" "table2"
# To export all tables, use:
# sqlite_export "my_database.db" "output.sql"
function sqlite_dump() {
local DATABASE=$1
local DUMP_FILE=$2
shift 2
local TABLES_LIST=("$@")
local rc=0
# Check if database exists
if [ -z "$DATABASE" ]; then
return 18
fi
if [ ! -f "$DATABASE" ]; then
return 14
fi
# Check not blank dump file name
if [ -z "$DUMP_FILE" ]; then
return 15
fi
if [ ${#TABLES_LIST[@]} -eq 0 ]
then
# If no tables are provided, dump all tables
sqlite3 "$DATABASE" .dump > $DUMP_FILE
rc=$?
if [ $rc -gt 1 ]; then
return $rc
else
return 0
fi
fi
# Reset dump file
> $DUMP_FILE
for TABLE in "${TABLES_LIST[@]}"
do
# Check if table exists
EXIST=$(sqlite3 $DATABASE "SELECT name FROM sqlite_master WHERE type='table' AND name='$TABLE';")
if [ "$EXIST" == "$TABLE" ]; then
sqlite3 "$DATABASE" .dump "$TABLE" >> "$DUMP_FILE"
rc=$?
if [ $rc -gt 1 ]; then
return $rc
fi
fi
done
return 0
}

View file

@ -13,8 +13,17 @@
gpmsg_000="INICIALIZAR GPG" gpmsg_000="INICIALIZAR GPG"
gpmsg_001="BACKUP GPG"
gpmsg_101="Desea inicializar la configuración de GPG?" gpmsg_101="Desea inicializar la configuración de GPG?"
gpmsg_102="Inicialización de configuración GPG completada!" gpmsg_102="Inicialización de configuración GPG completada!"
gpmsg_103="Plantilla de configuración GPG no existe!" gpmsg_103="Plantilla de configuración GPG no existe!"
gpmsg_104="Desea realizar una copia de seguridad de GPG?"
gpmsg_105="Desea realizar copia de seguridad de las claves GPG?"
gpmsg_106="Copia de seguridad de claves GPG completada!"
gpmsg_107="Archivo de configuración GPG no fue encontrado!"
gpmsg_108="Carpeta de copia de seguridad local no existe"
gpmsg_109="Contraseña para encriptación del archivo ZIP no fue suministrada"
gpmsg_110="Base de Datos SQLITE3 no fue suministrada"
gpmsg_111="Archivo de Base de Datos SQLITE3 no existe!"
gpmsg_112="Carpeta temporal de Backup no fue suministrada"

View file

@ -36,6 +36,7 @@ head_nobuild="No existe carpeta build para creación de contenedores"
head_nodockerfile="No existe el archivo de configuración Dockerfile" head_nodockerfile="No existe el archivo de configuración Dockerfile"
head_nobuilded="No se pudo completar la construcción del contenedor" head_nobuilded="No se pudo completar la construcción del contenedor"
head_builded="Construcción del contenedor completada!" head_builded="Construcción del contenedor completada!"
head_zip="Utilitario zip no ha sido instalado!"
head_container="Generando contenedor" head_container="Generando contenedor"
label_email="Correo Electrónico:" label_email="Correo Electrónico:"