Sécurisation du bastion et retrait de paquets
Merci à KuroSaru (https://github.com/KuroSaru) pour son aide quant à la faille concernant le shellout des éditeurs de texte, ainsi que ses recommandations quant à l'utilisation de SUDO au sein du projet. BUGFIX de sécurité : Ajout d'un "éditeur" de texte en Bash permettant une modification des fichiers de configurations du bastion de façon sécurisée et maitrisée. Retrait du paquet SUDO ainsi que de son utilisation au sein du bastion, ce dernier n'étant plus nécessaire suite à l'ajout du menu des administrateurs. Passage en version 2.3.7 Alpha.
This commit is contained in:
parent
077a402beb
commit
0f0e1f845f
@ -4,7 +4,7 @@ FROM alpine:3.20.0 AS monosphere-builder
|
|||||||
|
|
||||||
|
|
||||||
#Setting default settings, please change them at run
|
#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
|
#Defining build settings
|
||||||
@ -51,7 +51,7 @@ USER root
|
|||||||
|
|
||||||
#Preparations
|
#Preparations
|
||||||
#Updating and installing required dependencies
|
#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
|
apk --no-cache add shadow=4.15.1-r0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,40 @@
|
|||||||
#!/bin/bash
|
#!/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() {
|
function sessions_viewer() {
|
||||||
echo -e "Ci dessous les utilisateurs disponibles sur le bastion.\nVeillez sélectionner celui dont vous souhaitez visionner les accès :"
|
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)
|
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.'
|
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
|
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."
|
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
|
secure_file_editor "/opt/public/servers/${File_Name}"
|
||||||
sudo nano /opt/public/servers/"${File_Name}"
|
|
||||||
if [[ $(cat "/opt/public/servers/${File_Name}") == "" ]]; then
|
if [[ $(cat "/opt/public/servers/${File_Name}") == "" ]]; then
|
||||||
echo "Le fichier modifié \"${File_Name}\" est vide. Ce dernier sera supprimé."
|
echo "Le fichier modifié \"${File_Name}\" est vide. Ce dernier sera supprimé."
|
||||||
rm -rf /opt/public/servers/"${File_Name}"
|
rm -rf /opt/public/servers/"${File_Name}"
|
||||||
@ -85,8 +119,7 @@ function servers_access_control() {
|
|||||||
|
|
||||||
"2")
|
"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."
|
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
|
secure_file_editor "/opt/public/servers/authorized_servers.txt"
|
||||||
sudo nano /opt/public/servers/authorized_servers.txt
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"3" | "quit")
|
"3" | "quit")
|
||||||
@ -105,8 +138,7 @@ function servers_access_control() {
|
|||||||
|
|
||||||
function admin_rights_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."
|
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
|
secure_file_editor "/opt/public/rights/admin_rights.txt"
|
||||||
sudo nano /opt/public/rights/admin_rights.txt
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function main_menu() {
|
function main_menu() {
|
||||||
|
|||||||
@ -27,11 +27,6 @@ chmod 700 /opt/custom/scripts/*.sh
|
|||||||
bash /opt/custom/scripts/*.sh
|
bash /opt/custom/scripts/*.sh
|
||||||
echo "Execution des scripts personalisés terminée."
|
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
|
#User accounts creation step
|
||||||
|
|
||||||
echo "Création des groupes d'utilisateurs."
|
echo "Création des groupes d'utilisateurs."
|
||||||
@ -62,12 +57,6 @@ for userinfo in ${userfile}; do
|
|||||||
usermod -aG bastionuser "${user}"
|
usermod -aG bastionuser "${user}"
|
||||||
elif [[ ${is_bastion} -eq "0" ]]; then
|
elif [[ ${is_bastion} -eq "0" ]]; then
|
||||||
usermod -aG bastionadmin "${user}"
|
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}"
|
mkdir /home/"${user}"
|
||||||
ln -s /opt/public/scripts/server_menu.sh /home/"${user}"/server_menu.sh
|
ln -s /opt/public/scripts/server_menu.sh /home/"${user}"/server_menu.sh
|
||||||
fi
|
fi
|
||||||
@ -88,6 +77,11 @@ for userinfo in ${userfile}; do
|
|||||||
done
|
done
|
||||||
echo "Création des utilisateurs terminée."
|
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."
|
echo "Démarrage du service SSHD de Monosphere."
|
||||||
rc-status
|
rc-status
|
||||||
rc-service sshd restart
|
rc-service sshd restart
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user