Ajout du chapitre 0.0

master
Pierre Coimbra 2020-10-12 20:51:54 +02:00
parent 04e9d83dcf
commit 780e41cda3
No known key found for this signature in database
GPG Key ID: F9C449C78F6FAEE6
1 changed files with 144 additions and 0 deletions

144
chapitre00.md Normal file
View File

@ -0,0 +1,144 @@
## Chapitre 0.0 : Introduction à l'adminsys
### Git
- Initialisation d'un dépôt : `git init`
- Pour voir l'état du dépôt : `git status`
- Pour faire suivre un fichier par git : `git add fichier`
- Pour faire un commit de l'état modifié : `git commit`, on ajoute un message correspondant aux modifications faites
- Pour voir l'historique du dépôt : `git log`
- Pour configurer un dépôt distant : commande donnée lors de la création d'un dépot sur le site
- Voir l'URL suivi : `git remote get-url --all origin`
- Pour envoyer les modifications au serveur git : `git push` , pour le premier push : `git push -u origin master`
- Pour récupérer des commits depuis un serveur distant : `git pull`
.gitignore : permet d'ignorer certains dossiers ou fichiers, ce qui revient à les exclure du suivi Git
Pour bien débuter avec git : https://learngitbranching.js.org
### SSH
Permet d'accéder au shell d'une machine à distance, très utile dans le cas d'une connexion à un serveur. Utilisé partout car permet d'avoir le contrôle total d'une machine à distance. Équivalent de TeamViewer version shell et linux.
L'utilisateur est le client, le serveur est l'hôte distante.
- Exemple par mot de passe : `ssh user@adresse`
#### Exemple par clé :
- Génération de la clé : `ssh-keygen` (Génération de base, renseignez-vous sur ed25519)
- Copie de la clé : `ssh-copy-id -i <chemin_clé> user@adresse`
Permet d'enregistrer notre clé PUBLIQUE sur le serveur ssh. Il est maintenant possible de se connecter au serveur sans mot de passe à l'aide de votre clé PRIVÉE.
- Pour spécifier le port de connexion : `ssh -p port user@adresse`
Transfert de fichier via une connexion SSH : `scp -r -p chemin/vers/dossier/source user@adresse:chemin/vers/dossier/destination`
Transmission de réseau via un canal SSH : Se renseigner sur le SSH port forwarding
Le fichier de configuration (très pratique)
```
Host bastion
Hostname IP publique || nom de domaine
User krhacken
#Surtout pas de ProxyJump ici
Host devore
Hostname IP
User user
IdentityFile ~/.ssh/votrecle
Port <port>
ProxyJump bastion
```
**Concept de bastion SSH :**
On utilise l'option ProxyJump dans le fichier de configuration SSH.
Cette option permet de "rebondir" sur un conteneur accessible depuis l'extérieur et ayant accès aux conteneurs non accessible depuis l'extérieur. Cela permet de faire le lien entre l'utilisateur qui est à l'extérieur et les conteneurs qui ne sont pas accessible depuis internet. Pour que tout fonctionne il faut que la clé ssh publique soit ajoutée au bastion et aux conteneurs et que le bastion est accès aux conteneurs.
Un beau schéma et un article : https://blog.octo.com/le-bastion-ssh/
### LXD
Installation (Sous Ubuntu)
```
apt-get update
apt-get upgrade -y
apt-get install lxd
```
Initialisation :
```
lxd init
Would you like to use LXD clustering : No
Do you want to configure a new storage pool : Yes
Name of the new storage pool : Default
Name of the storage backend to use : dir (Vous pouvez vous renseigner sur LVM & BTRFS, CEPH c'est compliqué à tester)
Would you like to connect to a MAAS server? (yes/no) [default=no]: no
Would you like to create a new local network bridge? (yes/no) [default=yes]: yes
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like LXD to NAT IPv4 traffic on your bridge? [default=yes]: yes
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: yes
```
On verra plus tard comment cela fonctionne en détails au niveau du réseau, dans le cas présent l'accès à internet ainsi que le pare-feu est géré par LXD.
On crée un conteneur : `lxc launch images:debian/buster test`
Liste des images : `lxc image list`
Liste des conteneurs : `lxc list` Permet d'obtenir la liste des conteneurs ainsi que les IP locales attribuées par DHCP aux conteneurs.
Pour les motivés voilà un usage un peu plus complet de LXD : https://git.krhacken.org/krhacken/docu-vps
#### Pour l'exemple de bastion SSH :
On crée deux conteneur (en 30 secs)
```
lxc launch images:debian/buster test
lxc launch images:debian/buster test1
```
On se connecte aux conteneurs et on installe un serveur SSH (pour permettre à un client d'établir une connexion SSH avec le conteneur)
```
lxc exec nomDuConteneur /bin/bash
apt-get update
apt-get upgrade -y
apt-get install openssh-server
```
Ajout manuel de la clé publique d'un utilisateur sur un conteneur
```
Sur le conteneur :
nano .ssh/authorized_keys
On ajoute la clé publique de l'utilisateur
Depuis la machine de l'utilisateur :
ssh root@ipConteneur doit ouvrir une connexion
```
On va utilisé test comme un bastion pour se connecteur à test1
Sur la machine de l'utilisateur on ajoute un fichier de configuration ssh
**~/.ssh/config**
```
Hostname bastion
Hostname ipConteneurBastion
User root
Hostname test1
Hostname ipConteneurTest1 # Correspond à l'ip à laquelle test1 est accessible depuis test (le bastion)
User root
ProxyJump bastion
```
Ainsi si l'utilisateur n'a pas un accès direct à test1 il peut si connecter en passant par le bastion.
Un bastion permet de se connecter à des dizaines de conteneur en utilisant la même adresse IPv4 publique et le même port (22). Depuis l'extérieur on a uniquement accès au bastion. De son côté le bastion à accès au réseau interne du serveur et peut dont nous rediriger vers un conteneur non accessible depuis l'extérieur.
**En résumé : c'est le point d'entrée SSH de notre serveur.**