Modifications du README et préparations pour la 0.5.0

This commit is contained in:
Ostantia 2023-04-15 10:44:02 +02:00
parent 163b10b8a3
commit 40ce669545
7 changed files with 225 additions and 86 deletions

View File

@ -7,19 +7,20 @@ FROM ubuntu:22.04
WORKDIR / WORKDIR /
USER root USER root
#Setting default settings, please change them at run #Setting default settings, please change them at run
ENV BASTIONUSER="bastion"
ENV BASTIONPASS="bastion"
ENV HOSTNAME="monosphere-bastion" ENV HOSTNAME="monosphere-bastion"
ENV PORT=22 ENV PORT=22
ARG MONOSPHERE_VERSION="0.4.7 Alpha" ENV PASSWORD_AUTH=1
ENV KEY_AUTH=1
ARG MONOSPHERE_VERSION="0.5.0 Alpha"
#Preparations #Preparations
#Updating #Updating and installing required dependencies ;
RUN apt update -y && apt upgrade -y #reation and configuration of the Monosphere scripts directory ;
#Installing required dependencies RUN apt update -y && apt upgrade -y && \
RUN apt install -y ssh gawk anacron auditd audispd-plugins rsyslog apt install -y ssh gawk anacron auditd audispd-plugins rsyslog && \
#Creation and configuration of the Monosphere scripts directory mkdir /root/scripts && \
RUN mkdir /root/scripts mkdir /root/scripts/users
#Starting bastion configurations #Starting bastion configurations
@ -35,29 +36,29 @@ ADD auditd.conf /etc/audit/auditd.conf
ADD ssh-monitor.rules /etc/audit/rules.d/ssh-monitor.rules ADD ssh-monitor.rules /etc/audit/rules.d/ssh-monitor.rules
#Adding the server menu script files #Adding the server menu script files
#Preparing the custom scripts directory #Preparing the custom scripts directory
RUN mkdir -p /opt/custom/scripts #RUN mkdir -p /opt/custom/scripts
ADD authorized_servers.txt /opt/public/servers/ ADD authorized_servers.txt /opt/public/servers/
ADD server_menu.sh /opt/public/scripts/ ADD server_menu.sh /opt/public/scripts/
#Adding the server custom ssh configuration file #Adding the server custom ssh configuration file
ADD sshd_config /root/scripts/ ADD sshd_config /root/scripts/
#Configuring anacrontab scheduler
RUN echo "#---Bastion configurations ! CHANGE AT YOUR OWN RISK !---" >> /etc/anacrontab
RUN echo "5 5 sshrelauncher bash /root/scripts/ssh-launcher.sh" >> /etc/anacrontab
#Configuring SSHD daemon bastion #Configuring anacrontab scheduler ;
#Changing SSHD moduli #Changing SSHD moduli ;
RUN awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.tmp && mv /etc/ssh/moduli.tmp /etc/ssh/moduli #Backuping the SSHD config file ;
#Backuping the SSHD config file #Adding the config file of SSHD ;
RUN cp -r /etc/ssh/sshd_config /etc/ssh/sshd_config.backup #Activating scripts ;
#Adding the config file of SSHD RUN echo "#---Bastion configurations ! CHANGE AT YOUR OWN RISK !---" >> /etc/anacrontab && \
RUN rm -rf /etc/ssh/sshd_config echo "5 5 sshrelauncher bash /root/scripts/ssh-launcher.sh" >> /etc/anacrontab && \
RUN cp -r /root/scripts/sshd_config /etc/ssh/ awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.tmp && \
RUN chmod 644 /etc/ssh/sshd_config mv /etc/ssh/moduli.tmp /etc/ssh/moduli && \
cp -r /etc/ssh/sshd_config /etc/ssh/sshd_config.backup && \
rm -rf /etc/ssh/sshd_config && \
cp -r /root/scripts/sshd_config /etc/ssh/ && \
chmod 644 /etc/ssh/sshd_config && \
chown -R root:root /root/scripts && \
chmod 700 /root/scripts/*.sh
#Activating scripts
RUN chown -R root:root /root/scripts
RUN chmod 700 /root/scripts/*.sh
#Port exposition #Port exposition
EXPOSE $PORT EXPOSE $PORT

157
README.md
View File

@ -3,12 +3,12 @@ Le projet Monosphere Bastion est un bastion SSH simple et sécurisé basé sur U
## Objectifs des mises à jour ## Objectifs des mises à jour
Ci dessous une liste non exaustive des objectifs des prochaines mises à jour du projet: Ci dessous une liste non exaustive des objectifs des prochaines mises à jour du projet:
- [ ] Ajouter le support pour une clé SSH par serveur - [X] Ajouter le support pour une clé SSH par serveur
- [ ] Ajouter le support pour un serveur LDAP - [ ] Ajouter le support pour un serveur LDAP
- [ ] Ajouter un système de création d'utilisateurs automatique et sécurisé lors du déploiement à partir d'une liste donnée user:mot_de_passe_chiffré. - [X] Ajouter un système de création d'utilisateurs automatique et sécurisé lors du déploiement à partir d'une liste donnée user:mot_de_passe_chiffré.
- [ ] Ajouter un système de mise à jour automatique dans le conteneur, évitant ainsi les redéploiements. - [ ] Ajouter un système de mise à jour automatique dans le conteneur, évitant ainsi les redéploiements.
- [x] Ajouter un support pour des ports autres que 22 sur les machines distantes. - [x] Ajouter un support pour des ports autres que 22 sur les machines distantes.
- [ ] Réduire le nombre de layers dans le Dockerfile - [X] Réduire le nombre de layers dans le Dockerfile
- [x] Changer l'image de base pour Ubuntu 22.04 - [x] Changer l'image de base pour Ubuntu 22.04
- [ ] Adapter le système de logging - [ ] Adapter le système de logging
@ -38,11 +38,15 @@ docker run -d -p 22:22 --name monosphere-bastion monosphere-bastion:latest
Vous pouvez également personnaliser les variables d'environnement lors de l'exécution du conteneur : Vous pouvez également personnaliser les variables d'environnement lors de l'exécution du conteneur :
```bash ```bash
docker run -d -p 22:2222 \ docker run -d -p 22:22 \
-e PORT=2222 \ -e PORT=22 \
-e BASTIONUSER=myuser \ -e PASSWORD_AUTH=1 \
-e BASTIONPASS=mypassword \ -e KEY_AUTH=1 \
-e HOSTNAME=my-bastion \ -e HOSTNAME=monosphere-bastion \
-v /datasets/monosphere-bastion/servers:/opt/public/servers \
-v /datasets/monosphere-bastion/custom-scripts:/opt/custom/scripts \
-v /datasets/monosphere-bastion/users:/root/scripts/users \
-p "22:22" \
--name monosphere-bastion monosphere-bastion:latest --name monosphere-bastion monosphere-bastion:latest
``` ```
@ -54,31 +58,45 @@ docker run -d -p 22:2222 \
version: "3.0" version: "3.0"
services: services:
monosphere-bastion: monosphere-bastion:
image: siphonight/monosphere-bastion:latest image: siphonight/monosphere-bastion:0.5.0
deploy:
resources:
limits:
cpus: '1'
memory: 1G
container_name: monosphere-bastion container_name: monosphere-bastion
environment: environment:
- PORT=2222 - PORT=22
- BASTIONUSER=bastion - PASSWORD_AUTH=1
- BASTIONPASS=bastion - KEY_AUTH=1
- HOSTNAME=monosphere-bastion - HOSTNAME=monosphere-bastion
volumes: volumes:
- /datasets/monosphere-bastion/servers:/opt/public/servers/ - /datasets/monosphere-bastion/servers:/opt/public/servers
- /datasets/monosphere-bastion/custom-scripts:/opt/custom/scripts - /datasets/monosphere-bastion/custom-scripts:/opt/custom/scripts
- /datasets/monosphere-bastion/users:/root/scripts/users
ports: ports:
- 22:2222 - 22:22
restart: unless-stopped restart: unless-stopped
``` ```
Dans les exemples de la commande **docker run** et du ficheir docker compose, nous avons défini des variables et des répertoires.
Ci dessous l'explication pour chacun d'entre eux:
| **Variables d'environnements** | Valeurs par défaut | *Description* |
|---|---|---|
| **PORT** | 22 | *Désigne le port d'écoute du service SSH du bastion.* |
| **PASSWORD_AUTH** | 1 | *Activer ou non l'utilisation des mots de passes comme moyen d'authentification sur le bastion (0(non) ou 1(oui)).* |
| **KEY_AUTH** | 1 | *Activer ou non l'utilisation des clés publiques comme moyen d'authentification sur le bastion (0(non) ou 1(oui)).* |
| **HOSTNAME** | monosphere-bastion | *Nom d'hôte qui sera utilisé dans le conteneur du bastion.* |
A noter que mettre la valeur à "1" pour **PASSWORD_AUTH** ne générera pas de mots de passes pour les utilisateurs, de même que mettre un "1" à **KEY_AUTH** ne générera pas de clés d'authentification. Cela pourrait être l'objet d'une future mise à jour si cette fonctionnalité est demandée.
| **Volumes** | fichiers attendus | *Description* |
|---|---|---|
| **/opt/public/servers** | Le répertoire doit contenir un fichier nommé "**authorized_servers.txt**", contenant les autorisations de connexion et la liste des informations de machines distantes. La syntaxe est décrite plus bas dans la partie "**Utilisateurs autorisés et serveurs**" | *Ce fichier est ce qui vas gérer les droits accordés aux comptes sur les différents serveurs distants en temps réel. Une modification du fichier entrainera donc directement une modification au niveau des droits de connexion des utilisateurs, et des serveurs* |
| **/opt/custom/scripts** | Ce répertoire doit contenir les scripts personnalisés de l'utilisateur, tous avec l'extension ".sh". Ces derniers seront exécutés avec le compte root au lancement du conteneur. | *Ces scripts peuvent servir à personnaliser plus amplement le conteneur du bastion, en modifiant par exemple la bannière en temps réel ou bien en changeant les paramètres du bastion qui ne sont pas disponibles avec une modification par variables d'environnement ou volumes.* |
| **/root/scripts/users** | Un fichier nommé "**bastion_users.txt**" et contenant la liste des utilisateurs et de leurs paramètres de configuration. La syntaxe exacte de ce fichier est précisée plus bas dans la section "**Ajout d'utilisateurs**". Si vous activez l'option pour l'authentification par clé, vous devez également placer ici les dossiers aux noms des utilisateurs ajoutés ayant le contenu de leur répertoire "**.ssh**" avec les fichiers des clés publiques de connexion à l'utilisateur, mais également les fichiers des clés privées pour la connexion aux serveurs distants, dont l'utilisation est précisée plus bas dans la section "**Ajout d'utilisateurs**" | *Grace à ces paramètres, il est possible d'utiliser ce conteneur bastion de manière 100% stateless, car le redéployer en utilisant la même configuration et les mêmes fichiers permettrait de répliquer les mêmes comportements.* |
A noter que les droits mis sur les fichiers et dossiers configurés dans ces volumes ne sont pas importants, car ces derniers seront adaptés lors du déploiement du conteneur bastion.
### Utilisation de l'interface de connexion ### Utilisation de l'interface de connexion
Lors de l'utilisation de l'interface terminal, il y a 3 cas dans lesquels l'utilisateur peut se trouver lorsqu'il réussit une connexion au bastion. Lors de l'utilisation de l'interface terminal, il y a 3 cas dans lesquels l'utilisateur peut se trouver lorsqu'il réussit une connexion au bastion.
En premier, le cas ou un utilisateur a bien un compte enregistré sur le bastion, mais n'a aucun serveur autorisé dans le fichier "**authorized_servers.txt**" à son nom : En premier, le cas ou un utilisateur a bien un compte enregistré sur le bastion, mais n'a aucun serveur autorisé dans le fichier "**authorized_servers.txt**" à son nom :
```bash ```text
root@ubuntu-test / [255]# ssh test@172.17.0.4 root@ubuntu-test / [255]# ssh test@172.17.0.4
@@@@@@@@@@[Welcome to the Monosphere bastion]@@@@@@@@@@ @@@@@@@@@@[Welcome to the Monosphere bastion]@@@@@@@@@@
@ -98,7 +116,7 @@ Connection to 172.17.0.4 closed.
``` ```
Le second cas, l'utilisateur a bien un serveur sur lequel son nom est autorisé, mais une connexion par clé SSH n'a pas été configurée : Le second cas, l'utilisateur a bien un serveur sur lequel son nom est autorisé, mais une connexion par clé SSH n'a pas été configurée :
```bash ```text
root@ubuntu-test /# ssh test@172.17.0.4 root@ubuntu-test /# ssh test@172.17.0.4
@@@@@@@@@@[Welcome to the Monosphere bastion]@@@@@@@@@@ @@@@@@@@@@[Welcome to the Monosphere bastion]@@@@@@@@@@
@ -137,7 +155,7 @@ test@test-ubuntu-2:~$
``` ```
Enfin, le cas ou un utilisateur a bien un serveur autorisé et a bien une clé SSH déployée depuis son compte sur le bastion et sur le serveur de destination : Enfin, le cas ou un utilisateur a bien un serveur autorisé et a bien une clé SSH déployée depuis son compte sur le bastion et sur le serveur de destination :
```bash ```text
root@ubuntu-test /# ssh test@172.17.0.4 root@ubuntu-test /# ssh test@172.17.0.4
@@@@@@@@@@[Welcome to the Monosphere bastion]@@@@@@@@@@ @@@@@@@@@@[Welcome to the Monosphere bastion]@@@@@@@@@@
@ -198,7 +216,51 @@ Prenez en compte le fait que le nom d'utilisateur entré lors de la connexion su
A savoir qu'il est également possible d'utiliser des noms de domaine DNS, mais prenez en compte le fait que la résolution de nom se fera au niveau du bastion et non du client. A savoir qu'il est également possible d'utiliser des noms de domaine DNS, mais prenez en compte le fait que la résolution de nom se fera au niveau du bastion et non du client.
#### Ajout d'utilisateurs #### Ajout d'utilisateurs
Ajouter les utilisateurs au fichier **authorized_servers.txt** ne suffit pas à les inscrire sur le bastion. Pour cela, il suffit de leur créer un compte avec la commande adduser classique, en définissant un mot de passe fort (pas forcément le même que celui présent sur les serveurs). Les utilisateurs configurés sur le bastion peuvent être séparés en 2 types :
- Les utilisateurs clients du bastion
- Les utilisateurs internes du bastion
Les utilisateurs clients du bastion sont ceux faisant partie du groupe "**bastionuser**", et auront le menu du bastion affiché lors de chaque connexion au bastion. Ces derniers ne peuvent pas se connecter au bastion directement et n'ont donc accès qu'à l'interface de sélection des serveurs.
Les utilisateurs internes du bastion quant à eux sont capables de se connecter au serveur directement. Ils ne font pas partie du groupe "**bastionuser**" et ne sont donc pas automatiquement redirigés vers le menu de sélection lors de la connexion (Ils peuvent cependant y accéder en lançant le script du menu).
***Ajouter les utilisateurs au fichier **authorized_servers.txt** ne suffit pas à les inscrire sur le bastion. Pour cela, il faut leur créer un compte, ce qui peut être fait de plusieurs manières, dont voici les 3 principales :***
- Avec le répertoire de configuration des utilisateurs "**/root/scripts/users**" et le fichier "**bastion_users.txt**".
Afin de rendre ce conteneur bastion "stateless", il est possible d'utiliser la fonctionnalité de création automatique des utilisateurs par fichier et dossier de configuration.
Pour cela, il faut placer un fichier nommé "**bastion_users.txt**" dans le répertoire "/root/scripts/users".
Ce fichier devra avoir la syntaxe suivante :
```text
<Nom utilisateur>;<type utilisateur>;<mot de passe>;<clé SSH>
```
Explication des valeurs possibles :
- **<Nom utilisateur>** : Définit le nom de l'utilisateur. Ce dernier doit être entièrement en minuscules et peut contenir des carachtères alphanumériques.
- **<type utilisateur>** : Définit le type de l'utilisateur (si c'est un utilisateur interne ou client du bastion). La valeur 0 signifie que ce derneir sera interne au bastion tandis que la valeur 1 le placera dans le groupe des utilisateurs clients du bastion ("**bastionuser**").
- **<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.
- **<clé SSH>** : Définit si l'utilisateur aura une clé SSH configurée ou non. Mettez la valeur à "1" si vous souhaitez que ce soit le cas, 0 si vous ne le voulez pas.
Ci dessous un exemple de configuration possible, avec un utilisateur "**bastion**" ayant pour mot de passe "**bastion**", étant un utilisateur interne du bastion, et ayant des clés SSH configurées :
```text
bastion;0;bastion;1
```
##### Les clés SSH
Les utilisateurs peuvent avoir des clés SSH configurées.
Par le terme "clés SSH" il est sous entendu qu'ils peuvent avoir un fichier "authorized_keys" et des fichiers de clés privées configurées lors de leur génération automatique.
Pour configurer cela, il suffit de placer dans le répertoire "**/root/scripts/users**" un dossier ayant un nom correspondant avec l'utilisateur auquel il est rattaché et contenant le contenu du répertoire "**.ssh**" de cet utilisateur.
Lors du process de déploiement, le contenu de ce répertoire sera copié dans le répertoire "home" de l'utilisateur du bastion, et sera utilisé par la suite pour les connexions au bastion ou depuis le bastion et vers les machines distantes.
Concernant les clés SSH permettant les connexions vers les serveurs distants, il faut que le nom des clés corresponde au nom donné aux serveurs distants auxquels elles sont rattachés. (Par les termes "nom donné aux serveurs distants", il est sous entendu que les noms définis dans le fichier "**authorized_servers.txt**" sont ceux qui définissent le nom donné aux serveurs. Les hostname de ces derniers peuvent être différents de ce qui est défini dans la configuration du bastion.)
- Il est également possible d'ajouter des utilisateurs avec la commande adduser et usermod classique, en définissant un mot de passe fort (pas forcément le même que celui présent sur les serveurs).
Exemple : Exemple :
```bash ```bash
@ -220,16 +282,10 @@ Enter the new value, or press ENTER for the default
Other []: Other []:
Is the information correct? [Y/n] Y Is the information correct? [Y/n] Y
``` ```
@//[A FINIR : La partie usermod et clés SSH.]
La commande ci dessus a bien ajouté un utilisateur "test" avec le mot de passe qui lui a été défini lors des questions de cette commande. La commande ci dessus a bien ajouté un utilisateur "test" avec le mot de passe qui lui a été défini lors des questions de cette commande.
Pour automatiser ce processus, il est également possible de le scripter.
**ATTENTION**, cette méthode laisse les mots de passes en clair dans le script !
Cette méthode est utilisable dans un contexte temporaire, mais il est préférable de changer rapidement le mot de passe.
```bash
adduser --disabled-password --gecos "" test --shell /bin/bash
echo "$test:test" | chpasswd
```
#### Ajout de serveurs #### Ajout de serveurs
Contrairement aux utilisateurs, il n'est pas nécessaire d'ajouter plus de configurations pour les serveurs de destination. Contrairement aux utilisateurs, il n'est pas nécessaire d'ajouter plus de configurations pour les serveurs de destination.
@ -237,7 +293,7 @@ Contrairement aux utilisateurs, il n'est pas nécessaire d'ajouter plus de confi
Cependant, il est tout de même plus intéressant de mettre en place des clés ssh, car ces dernières permettent une connexion automatique lors de la séléction du serveur dans le menu du bastion. Sans cela, il vous sera demandé d'entrer le mot de passe du compte distant à chaque tentative de connexion. Cependant, il est tout de même plus intéressant de mettre en place des clés ssh, car ces dernières permettent une connexion automatique lors de la séléction du serveur dans le menu du bastion. Sans cela, il vous sera demandé d'entrer le mot de passe du compte distant à chaque tentative de connexion.
Pour générer une clé SSH utilisable pour ce cas, vous pouvez executer les commandes ci dessous (en les adaptant à votre situation) : Pour générer une clé SSH utilisable pour ce cas, vous pouvez executer les commandes ci dessous (en les adaptant à votre situation) :
```bash ```text
test@monosphere-bastion:~/.ssh$ ssh-keygen -t rsa -b 4096 test@monosphere-bastion:~/.ssh$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair. Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa): Enter file in which to save the key (/home/test/.ssh/id_rsa):
@ -260,7 +316,44 @@ The key's randomart image is:
|o. .o . | |o. .o . |
+----[SHA256]-----+ +----[SHA256]-----+
``` ```
Il vous suffira ensuite d'executer la commande **ssh-copy-id test@ip_distante** pour transférer la clé publique vers le serveur distant et pouvoir vous connecter de manière automatique. Il vous suffira ensuite d'executer la commande **ssh-copy-id test@ip_distante** pour transférer la clé publique vers le serveur distant et pouvoir vous connecter de manière automatique.
@//[A FINIR : Préciser la méthode privilégiée avec le répertoire ".ssh" de l'utilisateur par création automatique avce le script.]
### Scripts personnalisés ### Scripts personnalisés
Vous pouvez ajouter des scripts personnalisés qui seront exécutés au démarrage du conteneur. Vous pouvez ajouter des scripts personnalisés qui seront exécutés au démarrage du conteneur. Placez vos scripts dans le répertoire **/opt/custom/scripts/** et assurez-vous qu'ils ont les permissions d'exécution appropriées.
### Configuration SSH
La configuration du serveur SSH est définie dans le fichier **sshd_config**. Vous pouvez personnaliser cette configuration en modifiant ce fichier. N'oubliez pas que certaines options sont spécifiques au bastion et ne doivent pas être modifiées sans une bonne raison.
### Fichiers
- **Dockerfile** : Le fichier Dockerfile pour construire l'image Monosphere Bastion.
- **sshd_config** : Le fichier de configuration du serveur SSH.
- **server_menu.sh** : Le script qui génère le menu de sélection du serveur pour les utilisateurs autorisés.
- **authorized_servers.txt** : Liste des serveurs autorisés et des serveurs correspondants.
- **bastion_users.txt** : Liste servant à créér les utilisateurs du bastion et contenant leurs paramètres de création.
- **monosphere_banner.txt** : Bannière affichée par Monosphere lors de la connexion SSH.
- **ssh-launcher.sh** : Script exécuté toutes les 5 minutes servant à redémarrer le service ssh en cas de plantage.
- **ssh-monitor.rules** : Règles de logging spécifiques pour le daemon SSHD utilisés par Auditd.
- **auditd.conf** : Configuration du daemon auditd servant à logger les interractions avec le bastion.
- **entrypoint.sh** : Le script d'entrée qui configure et démarre les services nécessaires.
## Sécurisation
Bien que la configuration de base de Monosphere soit satisfaisante pour la plupart des cas d'utilisation, il est important de noter que des équipements critiques peuvent nécessiter plus d'attention.
Il est alors possible de renforcer la sécurité de la connexion au bastion et en dehors de plusieurs manières :
- Désactiver l'utilisation de l'authentification par mots de passes, et passer par un système de clés SSH uniquement. Exemple de modifications dans le fichier **sshd_config** :
```bash
PubkeyAuthentication yes
[...]
PasswordAuthentication no
```
- Limiter les ports de connexion vers les serveurs distants. Exemple avec une limitation sur le port 22 uniquement :
```bash
PermitOpen *:22
```
- Protéger l'accès au bastion par un VPN (WireGuard, OpenVPN...).
## License
Ce projet est publié sous la licence GNU.

View File

@ -1,2 +0,0 @@
172.17.0.1 22 test1 jpeg,george
172.17.0.2 2222 test2 george

2
bastion_users.txt Normal file
View File

@ -0,0 +1,2 @@
USERNAME;BASTION_LIMITED;PASSWORD/0;USEKEYS/0
bastion;1;bastion;0

View File

@ -1,10 +1,22 @@
hostname ${HOSTNAME} #!/bin/bash
hostname "${HOSTNAME}"
echo "Monosphere anacron scheduler is starting..." echo "Monosphere anacron scheduler is starting..."
service anacron start service anacron start
echo "Monosphere anacron scheduler is successfully started" echo "Monosphere anacron scheduler is successfully started"
echo "Monosphere sshd service daemon is verifying its configuration..." echo "Monosphere sshd service daemon is verifying its configuration..."
echo "Port ${PORT}" >> /etc/ssh/sshd_config echo "Port ${PORT}" >> /etc/ssh/sshd_config
echo "#Last authentication configurations" >> /etc/ssh/sshd_config
if [ "${PASSWORD_AUTH}" -eq "1" ]; then
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
else
echo "PasswordAuthentication no" >> /etc/ssh/sshd_config
fi
if [ "${KEY_AUTH}" -eq "1" ]; then
echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
else
echo "PubkeyAuthentication no" >> /etc/ssh/sshd_config
fi
sshd -t sshd -t
echo "Monosphere sshd service daemon configuration verified" echo "Monosphere sshd service daemon configuration verified"
@ -20,7 +32,7 @@ echo "Monosphere sshd service daemon is starting..."
service ssh start service ssh start
echo "Monosphere sshd service daemon is successfully started" echo "Monosphere sshd service daemon is successfully started"
echo "Monosphere is enabling custom scripts..." echo "Monosphere is enabling and executing custom scripts..."
chown -R root:root /opt/custom chown -R root:root /opt/custom
chmod 700 /opt/custom/scripts/*.sh chmod 700 /opt/custom/scripts/*.sh
bash /opt/custom/scripts/*.sh bash /opt/custom/scripts/*.sh
@ -31,14 +43,49 @@ chown -R root:root /opt/public
chmod -R 755 /opt/public chmod -R 755 /opt/public
echo "Monosphere public directory successfully configured" echo "Monosphere public directory successfully configured"
echo "Monosphere is creating the bastion user, I hope you changed the default user info..." #User accounts creation step
adduser --disabled-password --gecos "" ${BASTIONUSER} --shell /bin/bash #/usr/sbin/nologin
echo "${BASTIONUSER}:${BASTIONPASS}" | chpasswd if ! grep -q "bastionuser" /etc/group; then
mkdir /home/${BASTIONUSER}/.ssh groupadd bastionuser
chown ${BASTIONUSER}:${BASTIONUSER} /home/${BASTIONUSER}/.ssh fi
echo "Monosphere have created the bastion user"
if [ ! -f "/root/scripts/users/bastion_users.txt" ]; then
echo "No userfile detected, creating default user. Please change the default password for security purposes..."
adduser --disabled-password --gecos "" bastion --shell /bin/bash
usermod -aG bastionuser bastion
echo bastion:bastion | chpasswd
else
echo "Monosphere is creating the bastion users..."
userfile=$(cat /root/scripts/users/bastion_users.txt)
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)
setkeys=$(echo "$userinfo" | cut -d ';' -f 4)
adduser --disabled-password --gecos "" "$user" --shell /bin/bash
if [ "$is_bastion" -eq "1" ]; then
usermod -aG bastionuser "$user"
fi
if [ "$password" -ne "0" ]; then
echo "$user:$password" | 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
fi
echo "Monosphere user creation is finished"
echo "Monosphere bastion is successfully started" echo "Monosphere bastion is successfully started"
# Keep the container running # Keep the container running
tail -f /dev/null tail -f /dev/null
echo "Monosphere bastion is successfully started"

View File

@ -30,4 +30,4 @@ fi
selected_server="${server_map[$choice]}" selected_server="${server_map[$choice]}"
echo "Connexion à $selected_server..." echo "Connexion à $selected_server..."
ssh -p "$(echo $selected_server | cut -d ' ' -f 2)" "$(echo $selected_server | cut -d ' ' -f 1)" ssh -p "$(echo "$selected_server" | cut -d ' ' -f 2)" "$(echo "$selected_server" | cut -d ' ' -f 1)"

View File

@ -136,8 +136,6 @@ LogLevel VERBOSE
#Authentication settings #Authentication settings
PermitRootLogin no PermitRootLogin no
MaxAuthTries 6 MaxAuthTries 6
PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no PermitEmptyPasswords no
#Forwaring settings #Forwaring settings
@ -166,7 +164,7 @@ PubkeyAcceptedKeyTypes sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,sk-ssh-ed2551
#Per user basis settings #Per user basis settings
AllowStreamLocalForwarding no AllowStreamLocalForwarding no
Match User *,!ubuntu Match Group bastionuser
ForceCommand /opt/public/scripts/server_menu.sh ForceCommand /opt/public/scripts/server_menu.sh
X11Forwarding no X11Forwarding no
# End the 'Match' block # End the 'Match' block