monosphere-bastion/entrypoint.sh
Siphonight 042932c2f9 Sécurisation utilisateurs + codes d'erreur
Modification du processus de création des utilisateurs et
administrateurs du bastion.

Désormais, le fichier "bastion_users.txt" ne pourra plus contenir de
mots de passes en clair mais seulement des hash au format SHA-256.

Cela améliore grandement la sécurité lors de la génération du bastion
ainsi que dans le cas ou ce dernier serait compromis, car les mots de
passes des utilisateurs et administrateurs seraient tout à fait
illisibles dans les configurations.

Ajout également de codes d'erreurs ainsi que de leur signification dans
la documentation du bastion.

Cela rendra les erreur plus lisibles, avec une solution et des
suggestions de résolution au sein de la documentation.

Passage en version 3.3.8 Alpha car ce changement est cassant.

A CHANGER :
Modifiez tout vos mots de passes entrés dans les configurations
utilisateur afin que ces derniers soient des version hash.
Dans le cas contraire le bastion entrera en erreur.
2025-02-15 21:43:31 +01:00

122 lines
4.3 KiB
Bash

#!/bin/bash
error_msg() {
# shellcheck disable=SC2154
echo -n "$(date '+%d-%m-%Y||%H:%M:%S') [ NOOK ] "
echo -e "$@"
}
good_msg() {
echo -n "$(date '+%d-%m-%Y||%H:%M:%S') [ GOOD ] "
echo -e "$@"
}
info_msg() {
echo -n "$(date '+%d-%m-%Y||%H:%M:%S') [ INFO ] "
echo -e "$@"
}
if ! grep -qo "^Port ${PORT}$" /etc/ssh/sshd_config; then
info_msg "Génération de la configuration de SSH pour le bastion Monosphere..."
info_msg "Port selectionne pour la connexion SSH : ${PORT}"
echo "Port ${PORT}" >>/etc/ssh/sshd_config
echo "#Last authentication configurations" >>/etc/ssh/sshd_config
if [[ ${PASSWORD_AUTH} -eq "1" ]]; then
info_msg "Authentification par mot de passe autorisee."
echo "PasswordAuthentication yes" >>/etc/ssh/sshd_config
else
info_msg "Authentification par mot de passe interdite."
echo "PasswordAuthentication no" >>/etc/ssh/sshd_config
fi
if [[ ${KEY_AUTH} -eq "1" ]]; then
info_msg "Authentification par clés privées autorisee."
echo "PubkeyAuthentication yes" >>/etc/ssh/sshd_config
else
info_msg "Authentification par clés privées interdite."
echo "PubkeyAuthentication no" >>/etc/ssh/sshd_config
fi
fi
info_msg "Monosphere active et execute les scripts personalisés"
chown -R root:root /opt/custom
chmod 700 /opt/custom/scripts/*.sh
bash /opt/custom/scripts/*.sh || error_msg "Code 02 : Problème lors de la tentative d'execution de scripts personnalisés.\nConsultez la documentation pour plus d'informations."
good_msg "Execution des scripts personalisés terminée."
#User accounts creation step
info_msg "Création des groupes d'utilisateurs."
if ! grep -q "bastionuser" /etc/group; then
addgroup bastionuser
fi
if ! grep -q "bastionadmin" /etc/group; then
addgroup bastionadmin
fi
good_msg "Fin de la création des groupes d'utilisateurs."
info_msg "Création des utilisateurs en cours..."
userfile=$(cat /root/scripts/users/bastion_users.txt)
if [[ -z ${userfile} ]]; then
error_msg "Code 03 : Configuration utilisateur introuvable, veuillez vérifier votre configuration.\nConsultez la documentation pour plus d'informations."
exit 1
fi
for userinfo in ${userfile}; do
user=$(echo "${userinfo}" | cut -d ';' -f 1)
is_bastion=$(echo "${userinfo}" | cut -d ';' -f 2)
encrypted_password=$(echo "${userinfo}" | cut -d ';' -f 3)
setkeys=$(echo "${userinfo}" | cut -d ';' -f 4)
if [[ $(echo "${encrypted_password}" | cut -c1-3) != "$6$" ]] || [[ $(echo "${encrypted_password}" | cut -c1-1) -ne "0" ]]; then
error_msg "Code 01 : Problème avec le mot de passe entré pour l'utilisateur \"${user}\".\nConsultez la documentation pour plus d'informations."
exit 1
fi
adduser --disabled-password --gecos "" "${user}" --shell /bin/bash
if [[ ${is_bastion} -eq "1" ]]; then
usermod -aG bastionuser "${user}"
elif [[ ${is_bastion} -eq "0" ]]; then
usermod -aG bastionadmin "${user}"
mkdir /home/"${user}"
ln -s /opt/public/scripts/server_menu.sh /home/"${user}"/server_menu.sh
fi
if [[ ${encrypted_password} != "0" ]]; then
info_msg "Hash de mot de passe trouvé, configuration de ce dernier pour l'utilisateur \"${user}\"."
sed -i "s|^${user}:\!|${user}:${encrypted_password}|g" /etc/shadow || error_msg "Code 04 : Problème avec la mise en place du mot de passe utilisateur.\nConsultez la documentation pour plus d'informations."
else
info_msg "Mot de passe non configuré, ce dernier sera égal au nom de l'utilisateur, comme indiqué dans la documentation."
echo "${user}:${user}" | chpasswd
fi
if [[ ${setkeys} -eq "1" ]]; then
mkdir -p /home/"${user}"/.ssh
chmod 700 /home/"${user}"/.ssh
cp -r /root/scripts/users/"${user}"/* /home/"${user}"/.ssh/
chown -R "${user}":"${user}" /home/"${user}"/.ssh
chmod 600 /home/"${user}"/.ssh/*
fi
done
good_msg "Création des utilisateurs terminée."
info_msg "Monosphere configure le répertoire public."
chown -R root:bastionadmin /opt/public
chmod -R 775 /opt/public
good_msg "Répertoire public configuré."
info_msg "Démarrage du service SSHD de Monosphere."
rc-status
rc-service sshd restart
if sshd -t; then
info_msg "Configuration du service SSHD de Monosphere vérifiée et valide."
info_msg "Monosphere a bien été configuré et démarré avec succès."
else
info_msg "Configuration du service SSHD de Monosphere invalide\n Veuillez vérifier la configuration et relancer le deploiement."
exit 1
fi
# Keep the container running
tail -f /dev/null