# 03-Exploitation

## <span style="text-decoration: underline; color: rgb(45, 194, 107);">**A - Commandes :**</span>

### <span style="color: rgb(53, 152, 219);">**1. Gestion du stockage :**</span>

#### <span style="color: rgb(35, 111, 161);">***Gestion du storage pool BTRFS***</span>

```bash
# Afficher le storage pool :
lxc storage list
lxc storage show lxc-storage01
lxc storage list info lxc-storage01

# Affiche l'espace disque du volume BTRFS :
sudo btrfs filesystem show

```

#### <span style="color: rgb(35, 111, 161);">***Gestion des fichiers des CT :***</span>

```bash
Accès au stockage des CT : 
# Emplacement : 
/var/snap/lxd/common/mntns/var/snap/lxd/common/lxd/storage-pools/lxc-storage01/containers/CT/rootfs

# Lien symbolique du CT : 
ln -s /var/snap/lxd/common/mntns/var/snap/lxd/common/lxd/storage-pools/lxc-storage01/containers/CT/rootfs/ /home/adminme/CT

```

### <span style="color: rgb(53, 152, 219);">**2. Commandes LXC :**</span>

#### <span style="color: rgb(35, 111, 161);">***Gestion LXC***</span>

```bash
# Gestion des profiles :
lxc profile list
lxc profile show default

# Gestion des réseaux :
lxc network list
lxc network show lxdbr0

# Afficher les informations d'un CT :
lxc info CT-NAME
lxc info --show-log CT-NAME
lxc show CT-NAME

# Se connecter dans un CT :
lxc exec CT-NAME bash

# Editer la configuration d'un CT :
lxc config edit CT-NAME

# Démarrage d'un serveur d'un CT :
lxc exec CT-NAME service -- ssh start

###################################
Source : https://www.cyberciti.biz/faq/create-snapshots-with-lxc-command-lxd/
### Gestion des snapshots d'un CT :
# Créer un snapshot :
lxc snapshot CT-NAME Snapname

# Vérifier les snapshots :
lxc info CT-NAME

# Restaurer un snapshot :
lxc restore CT-NAME Snapname

# Supprimer un snapshot :
lxc delete CT-NAME/Snapname
lxc delete CT-NAME/Snapname -i # Force la confirmation

lxc copy CT-NAME01/base030423 CT-NAME02
lxc delete CT-NAME/base090323

# Liste de l'image LXD intégrée pour diverses distributions Linux :
# Pour répertorier toutes les images LXD, exécutez :
lxc image list images: | grep -i ubuntu
```

#### <span style="color: rgb(35, 111, 161);">***Gestion des conteneurs***</span>

```bash
# Création d'un conteneur BASE qui servira de template :
# Syntaxe : lxc launch images:{distro}/{version}/{arch} {container-name-here}
lxc launch ubuntu:22.04 BASE

# Lister les conteneurs :
lxc list

# Répertorier les instances de conteneur Linux
# Nous pouvons répertorier les conteneurs existants en utilisant la syntaxe suivante et la commande grep / commande egrep en tant que pipe :
lxc list --fast
lxc list | grep RUNNING
lxc list | grep STOPPED
lxc list | grep -i opensuse
lxc list "*c1*"
lxc list "*c2*"
```

##### **Comment exécuter/exécuter la commande spécifiée dans un conteneur**

Nous exécutons ou exécutons des commandes dans des conteneurs à l'aide de la commande exec comme suit :

```bash
lxc exec containerName -- command
lxc exec containerName -- /path/to/script
lxc exec containerName --env EDITOR=/usr/bin/vim -- command
### run date, ip a, ip rm and other commands on various containers ###
lxc exec cenots-8-c2 -- date
lxc exec cenots-8-c2 -- ip a
lxc exec ubuntu-focal-c5 -- ip r
lxc exec fedora-31-c9 -- dnf -y update
lxc exec debian-10-www -- cat /etc/debian_version
```

##### **Comment obtenir l'accès au shell bash dans un conteneur**

Vous voulez obtenir un accès login/shell dans un conteneur nommé debian-10-www, entrez : Maintenant, vous pouvez exécuter des commandes ou installer des packages. Par exemple, utilisez la commande apt / la commande apt-get à l' intérieur du conteneur : tapez simplement exit pour revenir à l'hôte :

```bash
lxc exec {container-name} {shell-name}
lxc exec debian-10-www bash
lxc exec CT-NAME bash
lxc exec alpine-c1 sh
# cat /etc/*issue*
# apt update
# apt upgrade
# exit
```

##### **Autres commandes**

```bash
# Comment afficher des informations sur les serveurs et conteneurs LXD ?
lxc info
lxc info {container-name}
lxc info opensuse15-1-c10
lxc info -n CT-ID

# Vérifier la config :
lxc checkconfig 

# Extraire un fichier du conteneur
lxc file pull {continer-nane}/{path/to/file} {/path/to/local/dest}
lxc file pull ubuntu-xenial-c3/var/www/nginx/app/config.php .

# Copier et récupérer des fichiers d'un CT :
# Il est possible de transférer des fichiers vers un CT : PUSH
# Mais également de récupérer des fichiers depuis un CT : PULL 
# Pousser un fichier vers le conteneur
lxc file push {/path/to/file} {continer-nane}/path/to/dest/dir/
lxc file push config.php ubuntu-xenial-c3/var/www/nginx/app/
# PUSH d'un fichier vers un CT :
lxc file push /home/adminme/file.txt CT-NAME/tmp/
# PUSH d'un dossier vers un CT :
lxc file push -r /home/adminme/DOSSIER CT-NAME/tmp/
# PULL d'un fichier depuis un CT :
lxc file pull /home/adminme/file.txt CT-NAME/tmp/
# PULL d'un dossier depuis un CT :
lxc file pull -r CT-NAME/tmp/DOSSIER /home/adminme/ 


# Obtenir de l'aide sur les commandes lxc
lxc --help
lxc {command} --help
lxc list --help

# Gestion d'in Conteneur :
lxc start CT-ID
lxc restart CT-ID
lxc stop CT-ID
lxc delete CT-ID
lxc stop ubuntu-xenial-c3 && lxc delete ubuntu-xenial-c3

# Configurer l'autostart d'un CT :
lxc config set CT-ID boot.autostart true
```

## <span style="text-decoration: underline; color: rgb(45, 194, 107);">**B - Procédure de création d'un CT :**</span>

### <span style="color: rgb(53, 152, 219);">**1.** </span><span style="color: rgb(53, 152, 219);">**Création d'un CT :**</span>

```bash
# Déclarer la variable :
CTNAME=MONCT01
# Création du conteneur :
lxc launch ubuntu:22.04 $CTNAME

# Configurer l'autostart d'un CT :
lxc config set $CTNAME boot.autostart true
```

### <span style="color: rgb(53, 152, 219);">**2. Paramétrage :**</span>

<span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">Editer le fichier de configuration afin de paramétrer une adresse IP fixe et le forward de port.</span>

#### <span style="color: rgb(35, 111, 161);">***Configuration réseau et forward de port :***</span>

<span style="color: rgb(0, 0, 0);">Il est nécessaire de bien renseigner le fichier de zone DNZ "lxc.morbihan-energies.fr" afin d'attribuer une adresse IP sur le réseau LXC (non routé).</span>

```bash
# Editer le fichier de configuration :
lxc config edit $CTNAME
```

Ajouter les lignes suivantes :

```bash
  devices:
    eth0:
      ipv4.address: 192.168.25.XXX
      name: eth0
      network: lxdbr0
      type: nic
  port52201:
      connect: tcp:0.0.0.0:22
      listen: tcp:192.168.1.31:52201
      type: proxy
  port53080:
      connect: tcp:0.0.0.0:80
      listen: tcp:192.168.1.31:53080
      type: proxy
```

#### <span style="color: rgb(35, 111, 161);">***Création du compte d'admin :***</span>

```bash
# Se connecter dans le conteneur :
lxc exec $CTNAME bash

# Créer un utilisateur :
useradd adminme

# Ajouter un utilisateur au groupe sudo :
usermod -aG sudo adminme

# Modifier le mot de passe :
passwd adminme
passwd root

# Création de l'arborescence pour le déploiement des clés SSH :
mkdir /home/adminme/.ssh
vi /home/adminme/.ssh/auadminmethorized_keys
chown -R adminme:adminme /home/adminme/.ssh




# Autoriser un sudo sans demande de mot de passe :
sudo visudo

# Ajouter les lignes ci-dessous :
%sudo   ALL=(ALL:ALL) NOPASSWD:ALL
```

#### <span style="color: rgb(35, 111, 161);">***Configuration de la connexion SSH :***</span>

```bash
# Autoriser la connexion par mot de passe :
vi /etc/ssh/sshd_config

#Ajouter les lignes suivantes à la fin du fichier de conf :
----------------------------------------------------------
# Autoriser connexion par mot de passe :
PasswordAuthentication yes

# JKT-20220517 - Connexion Guacamole :
# Source : http://shaarli.guiguishow.info/?4DVyLA
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
----------------------------------------------------------

# Redémarrer le service SSH :
/etc/init.d/ssh restart
```

## <span style="text-decoration: underline; color: rgb(45, 194, 107);">**B - CT-BASE :**</span>

### <span style="color: rgb(53, 152, 219);">**1.** </span><span style="color: rgb(53, 152, 219);">**Description :**</span>

#### <span style="color: rgb(35, 111, 161);">***SSS-Titre 1***</span>

##### **Titre 1**

Ce Conteneur a pour objectif d'être un Template qui pourra être déployé en dupliquant un snapshot.

### <span style="color: rgb(53, 152, 219);">**1.** </span><span style="color: rgb(53, 152, 219);">**Installation :**</span>

<p class="callout warning"><span style="color: rgb(0, 0, 0);">Cette procédure n'est pas encore terminée</span></p>

```bash
# Prérequis :
apt update && apt upgrade -y
apt install software-properties-common bash-completion wget git  -y

# Installation de nginx :

# Installation de php-fpm :
$ sudo apt install php-fpm


vi parametres.php
vi /etc/nginx/sites-enabled/
vi /etc/nginx/sites-enabled/default
```

### <span style="color: rgb(53, 152, 219);">**1.** </span><span style="color: rgb(53, 152, 219);">**Exploitation :**</span>

<p class="callout warning"><span style="color: rgb(0, 0, 0);">Cette procédure n'est pas encore terminée</span></p>