Compare commits

...

2 Commits

Author SHA1 Message Date
0f0e1f845f 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.
2025-01-21 23:27:46 +01:00
077a402beb Correction documentation docker compose. 2025-01-21 23:27:27 +01:00
4 changed files with 59 additions and 33 deletions

View File

@ -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

View File

@ -134,24 +134,23 @@ Il est également possible d'utiliser docker-compose afin de déployer ce conten
Ci-dessous un exemple de déploiement possible :
```yaml
version: "3.3"
services:
monosphere-bastion:
image: siphonight/monosphere-bastion:latest
container_name: monosphere-bastion
environment:
- PORT=22
- PASSWORD_AUTH=1
- KEY_AUTH=1
- HOSTNAME=monosphere-bastion
volumes:
- /datasets/monosphere-bastion/servers:/opt/public/servers
- /datasets/monosphere-bastion/custom-scripts:/opt/custom/scripts
- /datasets/monosphere-bastion/users:/root/scripts/users
- /datasets/monosphere-bastion/admin_rights:/opt/public/rights
ports:
- 22:22
restart: unless-stopped
- PORT=22
- PASSWORD_AUTH=1
- KEY_AUTH=1
- HOSTNAME=monosphere-bastion
volumes:
- /datasets/monosphere-bastion/servers:/opt/public/servers
- /datasets/monosphere-bastion/custom-scripts:/opt/custom/scripts
- /datasets/monosphere-bastion/users:/root/scripts/users
- /datasets/monosphere-bastion/admin_rights:/opt/public/rights
ports:
- 22:22
restart: unless-stopped
```
Dans les exemples de la commande **docker run** et du fichier docker compose, nous avons défini des variables et des répertoires.
@ -563,3 +562,4 @@ Ce projet est publié sous la licence "Faites ce que vous souhaitez".
- KIT!
- neutaaaaan
- Amadeus
- KuroSaru

View File

@ -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() {

View File

@ -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