diff --git a/Dockerfile b/Dockerfile index b19880f..b51b4cb 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.2.6 Alpha" +ARG MONOSPHERE_VERSION="2.3.7 Alpha" #Defining build settings @@ -51,7 +51,7 @@ USER root #Preparations #Updating and installing required dependencies -RUN apk add openssh-server=9.7_p1-r4 openssh-client=9.7_p1-r4 sudo=1.9.15_p5-r0 openrc=0.54-r1 bash=5.2.26-r0 sshpass=1.10-r0 gawk=5.3.0-r1 nano=8.0-r0 && \ +RUN apk add openssh-server=9.7_p1-r4 openssh-client=9.7_p1-r4 openrc=0.54-r1 bash=5.2.26-r0 sshpass=1.10-r0 gawk=5.3.0-r1 && \ apk --no-cache add shadow=4.15.1-r0 diff --git a/admin_menu.sh b/admin_menu.sh index c30fd08..c7f65dd 100644 --- a/admin_menu.sh +++ b/admin_menu.sh @@ -1,5 +1,40 @@ #!/bin/bash +function secure_file_editor() { + File_Path="${*}" + echo -e "\n=====SECURE=FILE=EDITOR=====" + if [[ -e ${File_Path} ]]; then + echo "Le fichier selectionne existe et a pour contenu :" + cat "${File_Path}" + read -r -p 'Souhaitez vous modifier le contenu du fichier ? (y/n) : ' choice + else + echo "Creation d un nouveau fichier \"${File_Path}\"." + touch "${File_Path}" + choice="y" + fi + case ${choice} in + + "y" | "Y") + printf '%s\n' " Consignes d'utilisation de cet editeur : - Lorsque l'edition du fichier est achevee, entrez ctrl-d sur une ligne vide pour sortir. - ATTENTION : Copiez les lignes que vous souhaitez garder intactes, le contenu du fichier complet sera ecrase par ce qui suit. - Tout fichier vide sera supprime. :" + New_Content+=$(xargs -0) + echo "${New_Content}" >"${File_Path}" + ;; + + "n" | "N") + echo "Edition du fichier abandonnee." + ;; + + *) + echo "Selection invalide." + ;; + esac + + unset New_Content + unset File_Path + echo "Modifications appliquées." + echo -e "=====SECURE=FILE=EDITOR=====\n" +} + function sessions_viewer() { echo -e "Ci dessous les utilisateurs disponibles sur le bastion.\nVeillez sélectionner celui dont vous souhaitez visionner les accès :" Available_Users=$(find /home/. -maxdepth 1 -type d | grep -v "\.$" | cut -d "/" -f 4) @@ -74,8 +109,7 @@ function servers_access_control() { echo 'Le nom du fichier ne doit pas contenir les caractères "/" ou "*", être vide ou ce nommer "authorized_servers.txt". Veuillez modifier ce dernier.' else echo "Assurez vous que le fichier créé ou modifié comporte bien uniquement la clé privée ou le mot de passe nécessaire à la connexion." - sleep 5s - sudo nano /opt/public/servers/"${File_Name}" + secure_file_editor "/opt/public/servers/${File_Name}" if [[ $(cat "/opt/public/servers/${File_Name}") == "" ]]; then echo "Le fichier modifié \"${File_Name}\" est vide. Ce dernier sera supprimé." rm -rf /opt/public/servers/"${File_Name}" @@ -85,8 +119,7 @@ function servers_access_control() { "2") echo -e "Veuillez bien vérifier la syntaxe de votre configuration avant de valider cette dernière.\nPour plus d'informations, consultez la documentation de Monosphere." - sleep 5s - sudo nano /opt/public/servers/authorized_servers.txt + secure_file_editor "/opt/public/servers/authorized_servers.txt" ;; "3" | "quit") @@ -105,8 +138,7 @@ function servers_access_control() { function admin_rights_control() { echo -e "Veuillez bien vérifier la syntaxe de votre configuration avant de valider cette dernière.\nPour plus d'informations, consultez la documentation de Monosphere." - sleep 5s - sudo nano /opt/public/rights/admin_rights.txt + secure_file_editor "/opt/public/rights/admin_rights.txt" } function main_menu() { diff --git a/entrypoint.sh b/entrypoint.sh index a9390a1..00b7de9 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -27,11 +27,6 @@ chmod 700 /opt/custom/scripts/*.sh bash /opt/custom/scripts/*.sh echo "Execution des scripts personalisés terminée." -echo "Monosphere configure le répertoire public." -chown -R root:root /opt/public -chmod -R 755 /opt/public -echo "Répertoire public configuré." - #User accounts creation step echo "Création des groupes d'utilisateurs." @@ -62,12 +57,6 @@ for userinfo in ${userfile}; do usermod -aG bastionuser "${user}" elif [[ ${is_bastion} -eq "0" ]]; then usermod -aG bastionadmin "${user}" - if ! grep -qo "^${user} ALL=(ALL) NOPASSWD:" /etc/sudoers; then - echo "${user} ALL=(ALL) NOPASSWD: /usr/local/bin/ttyplay*" | sudo EDITOR='tee -a' visudo - echo "${user} ALL=(ALL) NOPASSWD: /bin/ls*" | sudo EDITOR='tee -a' visudo - echo "${user} ALL=(ALL) NOPASSWD: /usr/bin/nano /opt/public/servers/*" | sudo EDITOR='tee -a' visudo - echo "${user} ALL=(ALL) NOPASSWD: /usr/bin/nano /opt/public/rights/admin_rights.txt" | sudo EDITOR='tee -a' visudo - fi mkdir /home/"${user}" ln -s /opt/public/scripts/server_menu.sh /home/"${user}"/server_menu.sh fi @@ -88,6 +77,11 @@ for userinfo in ${userfile}; do done echo "Création des utilisateurs terminée." +echo "Monosphere configure le répertoire public." +chown -R root:bastionadmin /opt/public +chmod -R 775 /opt/public +echo "Répertoire public configuré." + echo "Démarrage du service SSHD de Monosphere." rc-status rc-service sshd restart