diff --git a/Dockerfile b/Dockerfile index c7793ea..537e67f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ FROM alpine:3.20.0 AS monosphere-builder #Setting default settings, please change them at run -ARG MONOSPHERE_VERSION="2.3.8 Alpha" +ARG MONOSPHERE_VERSION="3.3.8 Alpha" #Defining build settings diff --git a/README.md b/README.md index f7c4f4a..dafe882 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Il offre une interface de menu permettant aux utilisateurs autorisés de se conn - [Audit des sessions](#audit-des-sessions) - [Modification des accès aux hotes distants](#modification-des-accès-aux-hotes-distants) - [Modification des privilèges d'administration](#modification-des-privilèges-dadministration) + - [Codes d'erreurs lors du lancement du bastion](#codes-derreurs-lors-du-lancement-du-bastion) - [License](#license) - [Remerciements](#remerciements) @@ -202,16 +203,29 @@ Le bastion Monosphère supporte les utilisateurs ayant des droits d'administrati Afin de créer un utilisateur avec des droits d'administration, commencez par ajouter la ligne de configuration souhaitée pour votree administrateur dans le fichier "**bastion_users.txt**" en suivant les indications ci dessous : ```text -;0;; +;0;; ``` Explication des valeurs possibles : - **Nom de l'administrateur** : Définit le nom de l'administrateur. Ce dernier doit être entièrement en minuscules et peut contenir des carachtères alphanumériques. - **0** : Permet de donner le statut d'administrateur au compte qu isera généré. Notez que ce n'est pas suffisant pour que l'administrateur ait des privilèges sur le bastion et ses ressources. -- **mot de passe** : Champ pour entrer le mot de passe de l'administrateur si il en a un. Il est possible de ne pas donner de mot de passe à l'administrateur en mettant "0" à cet endroit. Dans ce cas le mot de passe ce cet administrateur sera le nom de lui même. +- **hash du mot de passe** : Champ pour entrer le mot de passe de l'administrateur au format hashé si il en a un. Il est possible de ne pas donner de mot de passe à l'administrateur en mettant "0" à cet endroit. Dans ce cas le mot de passe de cet administrateur sera son nom d'utilisateur. Pour obtenir le hash du mot de passe que vous souhaitez utiliser pour cet utilisateur, lancez la commande ci dessous dans un terminal sous Linux et utilisez son résultat EXACT comme valeur pour ce champ : + + ```bash + echo | openssl passwd -6 -stdin + ``` + + Cette commande est importante, le seul format étant accepté pour les hash étant "sha-256" par mesure de sécurité. + - **clé SSH** : Définit si l'administrateur aura une ou des clés SSH configurées. Mettez la valeur à "1" si vous souhaitez que ce soit le cas, 0 si vous ne le voulez pas. Référez vous à la partie [Configuration de la connexion par clés SSH pour les utilisateurs et administrateurs](#configuration-de-la-connexion-par-clés-ssh-pour-les-utilisateurs-et-administrateurs) pour plus d'informations sur la configuration de cette méthode de connexion au bastion. +Ci-dessous un exemple de configuration possible d'une ligne du fichier "**bastion_users.txt**", avec un administrateur "**bastion**" ayant pour mot de passe "**bastion**" (ici sous format hashé) et ayant des clés SSH configurées : + +```text +bastion;1;$6$Yrq.UgmNczR9x9zA$1FnHkw0dPDckm35jr44bdKgHlNIk8DghA.DCOz4dWQQRyzpQCd802WaRXsmH3VGWLJudEEmzBPXKnH32B8dPI0;1 +``` + ***Il est fortement recommandé de définir un mot de passe fort pour tout les administrateurs du bastion, en particulier lorsque l'authentification par mots de passes est activée. Dans le cas contraire la sécurité de votre bastion pourrait être compromise.*** Ensuite, attribuez des droits d'administration à l'administrateur nouvellement créé correspondants à votre besoin. @@ -244,22 +258,29 @@ Pour cela, il faut modifier le fichier "**bastion_users.txt**" dans le répertoi Ce fichier devra avoir la syntaxe suivante pour chacune de ses lignes : ```text -;1;; +;1;; ``` Explication des valeurs possibles : - **Nom de l'utilisateur** : Définit le nom de l'utilisateur. Ce dernier doit être entièrement en minuscules et peut contenir des carachtères alphanumériques. - **1** : Permet de définir le compte comme étant celui d'un tuilisateur. -- **mot de passe** : Champ pour entrer le mot de passe de l'utilisateur si il en a un. Il est possible de ne pas donner de mot de passe à l'utilisateur en mettant "0" à cet endroit. Dans ce cas le mot de passe ce cet utilisateur sera le nom de lui même (par exemple, l'utilisateur sans mot de passe "user1" aura de ce fait pour mot de passe "user1"). +- **hash du mot de passe** : Champ pour entrer le mot de passe de l'utilisateur au format hashé si il en a un. Il est possible de ne pas donner de mot de passe à l'utilisateur en mettant "0" à cet endroit. Dans ce cas le mot de passe ce cet utilisateur sera le nom de lui même (par exemple, l'utilisateur sans mot de passe "user1" aura de ce fait pour mot de passe "user1"). Pour obtenir le hash du mot de passe que vous souhaitez utiliser pour cet utilisateur, lancez la commande ci dessous dans un terminal sous Linux et utilisez son résultat EXACT comme valeur pour ce champ : + + ```bash + echo | openssl passwd -6 -stdin + ``` + + Cette commande est importante, le seul format étant accepté pour les hash étant "sha-256" par mesure de sécurité. + - **clé SSH** : Définit si l'utilisateur aura une ou des clés SSH configurées. Mettez la valeur à "1" si vous souhaitez que ce soit le cas, 0 si vous ne le voulez pas. Référez vous à la partie [Configuration de la connexion par clés SSH pour les utilisateurs et administrateurs](#configuration-de-la-connexion-par-clés-ssh-pour-les-utilisateurs-et-administrateurs) pour plus d'informations sur la configuration de cette méthode de connexion au bastion. ***Il est fortement recommandé de définir un mot de passe fort pour tout les utilisateurs du bastion, en particulier lorsque l'authentification par mots de passes est activée. Dans le cas contraire la sécurité de votre bastion pourrait être compromise.*** -Ci-dessous un exemple de configuration possible d'une ligne du fichier "**bastion_users.txt**", avec un utilisateur "**user1**" ayant pour mot de passe "**user1**", étant un utilisateur interne du bastion, et ayant des clés SSH configurées : +Ci-dessous un exemple de configuration possible d'une ligne du fichier "**bastion_users.txt**", avec un utilisateur "**user1**" ayant pour mot de passe "**user1**" (ici sous format hashé), étant un utilisateur interne du bastion, et ayant des clés SSH configurées : ```text -user1;1;user1;1 +user1;1;$6$4XJH/NLhxwLk9YqD$2FmPFK7.rs7taM9VBLwoj6XQ32UJbN/R66Qi3PDLwgQ.3Aa5HZ8MNLU0TuiKLkeVMaZ.j1WpJ/DVlcBuNBzf3.;1 ``` #### Configuration de la connexion par clés SSH pour les utilisateurs et administrateurs @@ -552,6 +573,17 @@ Veuillez à ce que ce fichier ne comporte pas d'erreurs, ce dernier étant appli Référez vous à la partie [Ajout d'administrateurs](#ajout-dadministrateurs) pour plus d'informations. +### Codes d'erreurs lors du lancement du bastion + +Si lors du déploiement du bastion vous obtenez des messages indiquant "[ NOOK ] Code XX", veuillez consulter cette section, elle détaille la signification de chacun d'entre eux. + +| **Code d'erreur** | *Description* | +|---|---| +| Code 01 | Erreur concernant le hash du mot de passe entré dans le fichier de configuration des utilisateurs **"bastion_users.txt"** pour l'utilisateur mentionné. Ce dernier DOIT OBLIGATOIREMENT être un hash du mot de passe au format sha-256, et non le mot de passe en clair, pour des raisons de sécurité. Une autre valeur possible est 0, dans le cas ou vous ne souhaitez pas configurer de mot de passe fort, dans quel cas ce dernier sera défini comme similaire au nom d'utilisateur. Consultez la section [Configuration des utilisateurs, administrateurs et serveurs](#configuration-des-utilisateurs-administrateurs-et-serveurs) pour p lus d'informations. | +| Code 02 | Ce code d'erreur indique que les scripts personnalisés ont rencontré une erreur lors de leur exécution. Cette erreur est normale dans le cas ou vous n'avez aucun script personnalisé, et elle peut de ce fait être ignorée. Dans le cas contraire, assurez vous que vos scripts soient corrects et à jour par rapport à la version actuellement utilisée du bastion, ainsi que de leurs bon fonctionnement dans le contexte du lancement de ce dernier. | +| Code 03 | Le fichier de configuration sensé se trouver dans le répertoire **"/root/scripts/users/bastion_users.txt"** du conteneur du bastion est abscent. Cela signifie généralement qu'un point de montage dans ce répertoire est mal configuré, car dans le cas ou rien n'est configuré pour ce répertoire, la configuration par défaut prendrait sa place et l'erreur n'apparaitrait pas. Vérifiez vos points de montages impactant le répertoire **"/root/scripts/users"** du bastion, ainsi que la présente du fichier **"bastion_users.txt"** dans ces derniers. | +| Code 04 | Lors de l'injection du hash de mot de passe dans la configuration /etc/shadow du bastion. Lors de la génération du bastion, les hash des mots de passes sont tous injectés tels quels dans le fichier /etc/shadow du bastion. Si cette opération échoue, vérifiez les messages venant du système dans les journeaux du conteneur. | + ## License Ce projet est publié sous la licence "Faites ce que vous souhaitez". diff --git a/bastion_users.txt b/bastion_users.txt index 27bb568..1f22556 100644 --- a/bastion_users.txt +++ b/bastion_users.txt @@ -1 +1 @@ -bastion;0;bastion;0 \ No newline at end of file +bastion;0;$6$lwJT2jE8uXZhk9.X$1NY4bP7DaBZRb5TL8RC/R0RdV3/pKL2t0JvIEWDxfxMNKi4Ts6zvr5JC7qa15dIbLI.wMDir0FKcjEoxOhNEK1;0 \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh index 00b7de9..76ebc18 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,35 +1,51 @@ #!/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 - echo "Génération de la configuration de SSH pour le bastion Monosphere..." - echo "Port selectionne pour la connexion SSH : ${PORT}" + 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 - echo "Authentification par mot de passe autorisee." + info_msg "Authentification par mot de passe autorisee." echo "PasswordAuthentication yes" >>/etc/ssh/sshd_config else - echo "Authentification par mot de passe interdite." + info_msg "Authentification par mot de passe interdite." echo "PasswordAuthentication no" >>/etc/ssh/sshd_config fi if [[ ${KEY_AUTH} -eq "1" ]]; then - echo "Authentification par clés privées autorisee." + info_msg "Authentification par clés privées autorisee." echo "PubkeyAuthentication yes" >>/etc/ssh/sshd_config else - echo "Authentification par clés privées interdite." + info_msg "Authentification par clés privées interdite." echo "PubkeyAuthentication no" >>/etc/ssh/sshd_config fi fi -echo "Monosphere active et execute les scripts personalisés" +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 -echo "Execution des scripts personalisés terminée." +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 -echo "Création des groupes d'utilisateurs." +info_msg "Création des groupes d'utilisateurs." if ! grep -q "bastionuser" /etc/group; then addgroup bastionuser fi @@ -37,20 +53,25 @@ fi if ! grep -q "bastionadmin" /etc/group; then addgroup bastionadmin fi -echo "Fin de la création des groupes d'utilisateurs." +good_msg "Fin de la création des groupes d'utilisateurs." -echo "Création des utilisateurs en cours..." +info_msg "Création des utilisateurs en cours..." userfile=$(cat /root/scripts/users/bastion_users.txt) if [[ -z ${userfile} ]]; then - echo "Configuration utilisateur introuvable, veuillez vérifier votre configuration." + 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) - password=$(echo "${userinfo}" | cut -d ';' -f 3) + 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 @@ -61,9 +82,11 @@ for userinfo in ${userfile}; do ln -s /opt/public/scripts/server_menu.sh /home/"${user}"/server_menu.sh fi - if [[ ${password} != "0" ]]; then - echo "${user}:${password}" | chpasswd + 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 @@ -75,22 +98,22 @@ for userinfo in ${userfile}; do chmod 600 /home/"${user}"/.ssh/* fi done -echo "Création des utilisateurs terminée." +good_msg "Création des utilisateurs terminée." -echo "Monosphere configure le répertoire public." +info_msg "Monosphere configure le répertoire public." chown -R root:bastionadmin /opt/public chmod -R 775 /opt/public -echo "Répertoire public configuré." +good_msg "Répertoire public configuré." -echo "Démarrage du service SSHD de Monosphere." +info_msg "Démarrage du service SSHD de Monosphere." rc-status rc-service sshd restart if sshd -t; then - echo "Configuration du service SSHD de Monosphere vérifiée et valide." - echo "Monosphere a bien été configuré et démarré avec succès." + 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 - echo -e "Configuration du service SSHD de Monosphere invalide\n Veuillez vérifier la configuration et relancer le deploiement." + info_msg "Configuration du service SSHD de Monosphere invalide\n Veuillez vérifier la configuration et relancer le deploiement." exit 1 fi