Ajout du support de clés SSH et des utilisateurs distants, refonte de la doc.
This commit is contained in:
parent
977927fbe2
commit
8de7e718d1
161
README.md
161
README.md
@ -3,14 +3,15 @@ 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:
|
||||||
- [X] 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.
|
||||||
- [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é.
|
- [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.
|
||||||
- [X] 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.
|
||||||
|
- [ ] Ajouter le support pour différents utilisateurs distants.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
Pour installer Monosphere Bastion, clonez ce dépôt et construisez l'image Docker en utilisant le fichier Dockerfile fourni.
|
Pour installer Monosphere Bastion, clonez ce dépôt et construisez l'image Docker en utilisant le fichier Dockerfile fourni.
|
||||||
@ -23,7 +24,7 @@ docker build -t monosphere-bastion .
|
|||||||
|
|
||||||
Vous pouvez également télécharger directement l'image depuis docker hub :
|
Vous pouvez également télécharger directement l'image depuis docker hub :
|
||||||
```bash
|
```bash
|
||||||
docker pull siphonight/monosphere-bastion
|
docker pull siphonight/monosphere-bastion:<version_choisie>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Utilisation
|
## Utilisation
|
||||||
@ -92,6 +93,7 @@ A noter que mettre la valeur à "1" pour **PASSWORD_AUTH** ne générera pas de
|
|||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
@ -142,23 +144,13 @@ Warning: Permanently added '172.17.0.6' (ECDSA) to the list of known hosts.
|
|||||||
test@172.17.0.6's password:
|
test@172.17.0.6's password:
|
||||||
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-58-generic x86_64)
|
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-58-generic x86_64)
|
||||||
|
|
||||||
* Documentation: https://help.ubuntu.com
|
|
||||||
* Management: https://landscape.canonical.com
|
|
||||||
* Support: https://ubuntu.com/advantage
|
|
||||||
|
|
||||||
This system has been minimized by removing packages and content that are
|
|
||||||
not required on a system that users do not log into.
|
|
||||||
|
|
||||||
To restore this content, you can run the 'unminimize' command.
|
|
||||||
Last login: Sun Apr 9 20:18:03 2023 from 172.17.0.4
|
|
||||||
test@test-ubuntu-2:~$
|
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 :
|
||||||
```text
|
```text
|
||||||
root@ubuntu-test /# ssh test@172.17.0.4
|
root@Alicee:~/.ssh# ssh -p 2336 -i id_rsa siphonight@kaitokid.cloudyfy.fr
|
||||||
|
@@@@@@@@@@[Welcome to the Monosphere bastion@@@@@@@@@@
|
||||||
@@@@@@@@@@[Welcome to the Monosphere bastion]@@@@@@@@@@
|
|
||||||
Authorized personnel only is allowed to come here.
|
Authorized personnel only is allowed to come here.
|
||||||
If you're not authorized personnel, please disconnect
|
If you're not authorized personnel, please disconnect
|
||||||
from this interface this instant.
|
from this interface this instant.
|
||||||
@ -168,50 +160,45 @@ Monosphere is logging the current connection.
|
|||||||
|
|
||||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||||
|
|
||||||
Monosphere version is 0.4.1 Alpha
|
Monosphere version is 0.5.0 Alpha
|
||||||
test@172.17.0.4's password:
|
|
||||||
Veuillez sélectionner un serveur auquel vous connecter :
|
Veuillez sélectionner un serveur auquel vous connecter :
|
||||||
1) test-ubuntu-2 - 172.17.0.6
|
1) test-container1 - siphonight 172.19.0.12:22
|
||||||
Votre choix (1-1): 1
|
Votre choix (1-1): 1
|
||||||
Connexion à 172.17.0.6...
|
Connexion à 172.19.0.12 22 siphonight test...
|
||||||
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-58-generic x86_64)
|
Welcome to Ubuntu 24.04 LTS (GNU/Linux 5.15.0-105-generic x86_64)
|
||||||
|
|
||||||
* Documentation: https://help.ubuntu.com
|
|
||||||
* Management: https://landscape.canonical.com
|
|
||||||
* Support: https://ubuntu.com/advantage
|
|
||||||
|
|
||||||
This system has been minimized by removing packages and content that are
|
|
||||||
not required on a system that users do not log into.
|
|
||||||
|
|
||||||
To restore this content, you can run the 'unminimize' command.
|
|
||||||
Last login: Sun Apr 9 22:26:15 2023 from 172.17.0.4
|
|
||||||
test@test-ubuntu-2:~$
|
test@test-ubuntu-2:~$
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Utilisation avec l'option JumpHost
|
### Utilisation avec l'option JumpHost
|
||||||
Enfin, si vous souhaitez par exemple effectuer un transfert de fichiers au travers de la commande **scp**, il est toujours possible de passer par le bastion avec l'option **-J** de la commande **ssh** :
|
Enfin, si vous souhaitez par exemple effectuer un transfert de fichiers au travers de la commande **scp**, il est toujours possible de passer par le bastion avec l'option **-J** de la commande **ssh** :
|
||||||
```bash
|
```bash
|
||||||
ssh -J utilisateur@ip_bastion utilisateur@ip_distante
|
ssh -J utilisateur@ip_bastion utilisateur@ip_distante
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Personnalisation
|
## Personnalisation
|
||||||
|
|
||||||
|
|
||||||
### Utilisateurs autorisés et serveurs
|
### Utilisateurs autorisés et serveurs
|
||||||
Pour définir les utilisateurs autorisés et les serveurs auxquels ils peuvent se connecter, modifiez le fichier **authorized_servers.txt** dans le répertoire **/opt/public/servers/**. Chaque ligne doit contenir l'adresse IP du serveur, le nom personnalisé et le nom d'utilisateur, séparés par des espaces :
|
Pour définir les utilisateurs autorisés et les serveurs auxquels ils peuvent se connecter, modifiez le fichier **authorized_servers.txt** dans le répertoire **/opt/public/servers/**. Chaque ligne doit contenir l'adresse IP du serveur, le port, le nom personnalisé du server, le nom d'utilisateur de connexion et le nom d'utilisateur, séparés par des espaces :
|
||||||
|
|
||||||
```txt
|
```txt
|
||||||
192.168.1.10 22 server1 server_user1 user1,user2
|
192.168.1.10 22 server1 server_user1 user1,user2 privkey1
|
||||||
192.168.1.11 2222 server2 server_user2 user2
|
192.168.1.11 2222 server2 server_user2 user2
|
||||||
```
|
```
|
||||||
Construction des lignes du fichier:
|
L'indication de la clé privée pour la connexion au hôtes distants n'est pas obligatoire mais fortement recommandée. Si vous n'en avez pas besoin vous pouvez ne pas indiquer le nom de la clé privée.
|
||||||
|
|
||||||
|
Explication de la construction des lignes du fichier:
|
||||||
```txt
|
```txt
|
||||||
[Adresse_IP] [Port] [Nom_du_serveur/Hostname] [Nom_de_utilisateur_de_connexion] [Usilisateurs_autorisés]
|
[Adresse_IP] [Port] [Nom_du_serveur/Hostname] [Nom_de_utilisateur_de_connexion] [Usilisateurs_autorisés] [Nom_de_clé_privée_a_utiliser]
|
||||||
```
|
```
|
||||||
|
|
||||||
Comme montré au dessus, il est possible de mettre plusieurs noms d'utilisateurs sur un seul et même serveur, dans le cas ou plusieurs utilisateurs sont autorisés sur la machine distante.
|
Comme montré ci dessus, il est possible de mettre plusieurs noms d'utilisateurs sur un seul et même serveur, dans le cas ou plusieurs utilisateurs sont autorisés à se connecter sur la machine distante et sur le même utilisateur distant.
|
||||||
Ces noms d'utilisateurs doivent bien être séparés par des virgules, comme dans l'exemple.
|
Ces noms d'utilisateurs du bastion doivent bien être séparés par des virgules, comme dans l'exemple.
|
||||||
|
|
||||||
Prenez en compte le fait que le nom d'utilisateur entré lors de la connexion sur les machines distantes est le même que celui utilisé pour la connexion au bastion.
|
Si vous souhaitez vous connecter sur la même machine distante mais avec un utilisateur distant différent, créez dans ce cas une nouvelle ligne le référençant. L'ajout de plusieurs noms d'utilisateurs distants sur une seule et même ligne de configuration n'est pas supporté.
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
@ -224,14 +211,15 @@ Les utilisateurs clients du bastion sont ceux faisant partie du groupe "**bastio
|
|||||||
|
|
||||||
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).
|
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 :***
|
***Toute modification des configurations utilisateur du bastion nécessite un redéploiement du conteneur, sauf dans le cas ou ces dernières sont effectuées dans le conteneur lui même.***
|
||||||
|
|
||||||
|
***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 2 principales :***
|
||||||
|
|
||||||
- Avec le répertoire de configuration des utilisateurs "**/root/scripts/users**" et le fichier "**bastion_users.txt**".
|
##### 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.
|
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".
|
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 :
|
Ce fichier devra avoir la syntaxe suivante pour chacune de ses lignes :
|
||||||
```text
|
```text
|
||||||
<Nom utilisateur>;<type utilisateur>;<mot de passe>;<clé SSH>
|
<Nom utilisateur>;<type utilisateur>;<mot de passe>;<clé SSH>
|
||||||
```
|
```
|
||||||
@ -239,7 +227,7 @@ 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.
|
- **<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**").
|
- **<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.
|
- **<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.
|
- **<clé SSH>** : Définit si l'utilisateur aura une ou des clés SSH configurées 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 :
|
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 :
|
||||||
@ -247,20 +235,7 @@ Ci dessous un exemple de configuration possible, avec un utilisateur "**bastion*
|
|||||||
bastion;0;bastion;1
|
bastion;0;bastion;1
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Les clés SSH
|
##### Par l'ajout des utilisateurs avec la commande adduser et usermod.
|
||||||
|
|
||||||
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
|
||||||
@ -282,51 +257,73 @@ 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.
|
||||||
|
|
||||||
|
Puis, si vous souhaitez que ce dernier soit limité à l'accès au serveur distant et non au bastion lui même ajoutez cet utilisateur au groupe "bastionuser" avec la commande usermod.
|
||||||
|
|
||||||
|
Exemple :
|
||||||
|
```
|
||||||
|
root@monosphere-bastion:/# usermod -aG bastionuser test
|
||||||
|
```
|
||||||
|
|
||||||
|
Cet utilisateur pourra désormais ce connecter au bastion.
|
||||||
|
A noter qu'un utilisateur créé avec cette méthode ne sera pas sauvegardé dans les configurations du bastion et ne persistera de ce fait pas entre les redéploiements.
|
||||||
|
|
||||||
|
##### Les clés SSH
|
||||||
|
|
||||||
|
Les utilisateurs peuvent avoir des clés SSH de connexion configurées.
|
||||||
|
|
||||||
|
Par le terme "clés SSH" il est sous entendu qu'ils peuvent avoir un fichier "authorized_keys" contenant les clés publiques des futurs clients cherchant à se connecter au bastion sur le dit utilisateur.
|
||||||
|
|
||||||
|
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 les fichiers 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 des clients au bastion.
|
||||||
|
|
||||||
#### 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.
|
||||||
|
|
||||||
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 la commande ci dessous (en l'adaptant à votre situation) :
|
||||||
```text
|
```text
|
||||||
test@monosphere-bastion:~/.ssh$ ssh-keygen -t rsa -b 4096
|
test@monosphere-bastion:~/.ssh$ ssh-keygen -t ed25519
|
||||||
Generating public/private rsa key pair.
|
Generating public/private ed25519 key pair.
|
||||||
Enter file in which to save the key (/home/test/.ssh/id_rsa):
|
Enter file in which to save the key (/root/.ssh/id_ed25519):
|
||||||
Enter passphrase (empty for no passphrase):
|
Enter passphrase (empty for no passphrase):
|
||||||
Enter same passphrase again:
|
Enter same passphrase again:
|
||||||
Your identification has been saved in /home/test/.ssh/id_rsa
|
Your identification has been saved in /root/.ssh/id_ed25519
|
||||||
Your public key has been saved in /home/test/.ssh/id_rsa.pub
|
Your public key has been saved in /root/.ssh/id_ed25519.pub
|
||||||
The key fingerprint is:
|
The key fingerprint is:
|
||||||
SHA256:n4I6LUA7lGa+xIvKYU1lxWZbgnMuA6lbVPQLm9q3gPQ test@monosphere-bastion
|
SHA256:mdZmun0RWKMr66RSfNEC9MKpRfV02GxN1MFUOZhgWsg root@test-container1
|
||||||
The key's randomart image is:
|
The key's randomart image is:
|
||||||
+---[RSA 4096]----+
|
+--[ED25519 256]--+
|
||||||
| +oo. |
|
| .o.o oBo+B+=|
|
||||||
| + oo* . |
|
| o.o E=.*o.+.|
|
||||||
| o..+*.+ |
|
| =..o.= . .|
|
||||||
| .*.oo+o. |
|
| o .o++ . |
|
||||||
| Bo+ oo.S |
|
| .. So+. . |
|
||||||
| .@ = . . . |
|
| o.o+. . |
|
||||||
| = O E... o |
|
| . .oo . |
|
||||||
|+ + o.+ .. |
|
| . o.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.
|
Le type de clé recommandé est le "ed25519", mais pour la connexion aux serveurs distants le bastion en lui même n'a pas de restrictions particulières.
|
||||||
|
|
||||||
|
Il vous suffira ensuite d'executer la commande **ssh-copy-id test@ip_serveur_distant** pour transférer la clé publique vers le serveur distant, puis placer le fichier de la clé privée dans le répertoire **/opt/public/servers/** et adapter le ficheir de configuration des connexion distantes "**authorized_servers.txt**" en y ajoutant à la suite des utilisateurs autorisés le nom de la clé privée de connexion ainsi créé.
|
||||||
|
|
||||||
|
***Contrairement aux modifications sur les utilisateurs, il n'est pas nécessaire de redéployer le conteneur du bastion pour les modifications concernant les serveurs.***
|
||||||
|
|
||||||
@//[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. Placez vos scripts dans le répertoire **/opt/custom/scripts/** et assurez-vous qu'ils ont les permissions d'exécution appropriées.
|
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
|
### 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.
|
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
|
### Fichiers
|
||||||
- **Dockerfile** : Le fichier Dockerfile pour construire l'image Monosphere Bastion.
|
- **Dockerfile** : Le fichier Dockerfile pour construire l'image Monosphere Bastion.
|
||||||
- **sshd_config** : Le fichier de configuration du serveur SSH.
|
- **sshd_config** : Le fichier de configuration du serveur SSH.
|
||||||
@ -339,6 +336,8 @@ La configuration du serveur SSH est définie dans le fichier **sshd_config**. Vo
|
|||||||
- **auditd.conf** : Configuration du daemon auditd servant à logger les interractions avec le bastion.
|
- **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.
|
- **entrypoint.sh** : Le script d'entrée qui configure et démarre les services nécessaires.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Sécurisation
|
## 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.
|
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.
|
||||||
|
|
||||||
@ -355,5 +354,7 @@ PermitOpen *:22
|
|||||||
```
|
```
|
||||||
- Protéger l'accès au bastion par un VPN (WireGuard, OpenVPN...).
|
- Protéger l'accès au bastion par un VPN (WireGuard, OpenVPN...).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
Ce projet est publié sous la licence GNU.
|
Ce projet est publié sous la licence GNU.
|
||||||
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
AUTHORIZED_SERVERS_FILE="/opt/public/servers/authorized_servers.txt"
|
AUTHORIZED_SERVERS_PATH="opt/public/servers"
|
||||||
|
AUTHORIZED_SERVERS_FILE="/$AUTHORIZED_SERVERS_PATH/authorized_servers.txt"
|
||||||
USER_SERVERS=$(grep -w "$(whoami)" $AUTHORIZED_SERVERS_FILE)
|
USER_SERVERS=$(grep -w "$(whoami)" $AUTHORIZED_SERVERS_FILE)
|
||||||
|
|
||||||
if [ -z "$USER_SERVERS" ]; then
|
if [ -z "$USER_SERVERS" ]; then
|
||||||
@ -17,7 +18,8 @@ while read -r line; do
|
|||||||
port=$(echo "$line" | cut -d ' ' -f 2)
|
port=$(echo "$line" | cut -d ' ' -f 2)
|
||||||
custom_name=$(echo "$line" | cut -d ' ' -f 3)
|
custom_name=$(echo "$line" | cut -d ' ' -f 3)
|
||||||
server_user=$(echo "$line" | cut -d ' ' -f 4)
|
server_user=$(echo "$line" | cut -d ' ' -f 4)
|
||||||
server_map[$counter]="$ip $port $server_user"
|
server_authkey=$(echo "$line" | cut -d ' ' -f 6)
|
||||||
|
server_map[$counter]="$ip $port $server_user $server_authkey"
|
||||||
echo "$counter) $custom_name - $server_user $ip:$port"
|
echo "$counter) $custom_name - $server_user $ip:$port"
|
||||||
counter=$((counter + 1))
|
counter=$((counter + 1))
|
||||||
done <<< "$USER_SERVERS"
|
done <<< "$USER_SERVERS"
|
||||||
@ -31,4 +33,11 @@ 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 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)"
|
if [ -z "$server_authkey" ]; then
|
||||||
|
ssh -p "$(echo "$selected_server" | cut -d ' ' -f 2)" "$(echo "$selected_server" | cut -d ' ' -f 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)"
|
||||||
|
else
|
||||||
|
cp -a /"$AUTHORIZED_SERVERS_PATH"/"$(echo "$selected_server" | cut -d ' ' -f 4)" /home/"$(whoami)"/.
|
||||||
|
chown "$(whoami)":"$(whoami)" /home/"$(whoami)"/"$(echo "$selected_server" | cut -d ' ' -f 4)"
|
||||||
|
chmod 600 /home/"$(whoami)"/"$(echo "$selected_server" | cut -d ' ' -f 4)"
|
||||||
|
ssh -p "$(echo "$selected_server" | cut -d ' ' -f 2)" -i /home/"$(whoami)"/"$(echo "$selected_server" | cut -d ' ' -f 4)" "$(echo "$selected_server" | cut -d ' ' -f 3)"@"$(echo "$selected_server" | cut -d ' ' -f 1)"
|
||||||
|
fi
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user