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.
122 lines
4.3 KiB
Bash
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
|