# Gérer son serveur

Commandes utiles &amp; Mise à jours

# Création/Suppression d'un utilisateur

<p class="callout info">Si la commande `sudo` ne fonctionne pas c'est que vous devez l'installer sur votre serveur. Voir le livre [Installation de sudo](https://wiki.mira-ceti.ovh/books/installation-de-sudo/page/installation-de-sudo "Installation de sudo")</p>

### Création

Pour ajouter un utilisateur sur le serveur :

```bash
sudo adduser $USER
```

Pour mettre un utilisateur avec les droits `root` :

```bash
sudo usermod -aG sudo $USER
```

Pour se connecter sur l'utilisateur créé :

```bash
su $USER
```

### Suppression

Pour supprimer le compte d'un utilisateur il suffit de saisir `userdel` suivie du nom de l'utilisateur.

> *Pour supprimer le compte et le répertoire personnel (/home/$USER) de l'utilisateur, ajouter l'option `-r`*.

Syntaxe:

```bash
sudo userdel -r $USER
```

Pour forcer la suppression de l'utilisateur, utiliser l'option `-f`. *(marche même quand l'utilisateur est encore connecté)*

Syntaxe:

```shell
# -f = force la suppression et -r supprime le dossier "home" de l'utilisateur
sudo userdel -fr $USER
```

# Les commandes utile

## Date

#### Afficher la date 

```Powershell
date
```

#### Modifier la date

```Powershell
date --set 16:03:20
# ou
date --set 2021-08-05
```

## Afficher l'historique des commandes

```bash
history
```

## Afficher l'historique des connexions

```bash
# Tous les logs de connexion au serveur
last

# Les derniers logs pour chaque utilisateur
lastlog

# les logs des tentatives de connexion qui ont échoué
lastb
```

## Afficher les ports utilisés

Pour répertorier tous les ports TCP ou UDP écoutés, y compris les services utilisant les ports et l'état du socket, utilisez la commande suivante :

```bash
sudo ss -tunlp
```

Pour modifier les ports voir le livre [Configuration du Firewall](https://wiki.mira-ceti.ovh/books/3-configuration-du-firewall "Configuration du Firewall") pour plus de détails.

## Afficher la version OS Linux

```Powershell
cat /etc/debian_version
```

## Afficher l'IP de son serveur

```shell
ip addr show
```

Pour un affichage plus claire :

```shell
ip -stats -color -human addr
```

## Connexion a un serveur distant

Connexion à un serveur distant sans l'utilisation de clé SSH.

```shell
ssh username@ip.address
```

## Afficher les services utilisés

```shell
sudo service --status-all
```

## Afficher les process en cours

```shell
sudo ps aux
```

Statistique sur les services en cours :

```shell
htop
```

## Afficher les programmes installé

```shell
sudo dpkg --list
```

## Afficher les interfaces

```shell
ip a
```

## Statistiques réseaux

Afficher les stats sur les interfaces :

```bash
sudo apt install bmon

sudo bmon 
# press q to quit
```

ou

```bash
sudo apt install cbm

sudo cbm 
# press q to quit
```

Afficher les stats sur une interface en particulier

```bash
sudo tcptrack -i <interface>
# Exemple : 
sudo tcptrack -i eth0
```

## Afficher la taille d'un dossier

```bash
sudo du -sh <folder>

# Exemple taille total du dossier
sudo du -sh /backup
> 6,2G	backup

# Exemple taille total des sous-dossiers
sudo du -sh /backup/*
> 21M	backup/database
> 6,2G	backup/docker
> 1,7M	backup/etc
> 4,0K	backup/output.log.gz
> 16K	backup/script
> 616K	backup/ssh

# Exemple taille total trié par taille
sudo du -sh /backup/* | sort -h
> 6,2G	backup/docker
> 21M	backup/database
> 1,7M	backup/etc
> 616K	backup/ssh
> 16K	backup/script
> 4,0K	backup/output.log.gz
```

## Supprimer un service 

Supprime les données, la configuration et toutes les dépendances.

```bash
sudo apt-get -y autoremove --purge <service>
```

# Mettre à jour le Serveur

##### Mettez à jour la **liste des paquets** :

```shell
sudo apt update
```

##### **Affichez les paquets** pour lesquels une mise à jour est disponible :

```bash
apt list --upgradable
```

<div class="toolbar" id="bkmrk-mettez-%C3%A0-jour-les-pa"><div class="toolbar-item">**Mettez à jour les paquets**<span style="font-size: 1.4em; font-weight: 400;"> installés sur le système avec au choix :</span></div></div>```bash
sudo apt upgrade
```

**upgade** : les paquets seront remplacés par des versions plus récentes, mais sans qu’aucun autre paquet ne soit ajouté ou supprimé. Par exemple, une nouvelle version de Firefox sera installée avec apt upgrade.

<div class="code-toolbar" id="bkmrk-upgade-%3A-les-paquets"><div class="toolbar"><div class="toolbar-item">  
</div></div></div>```bash
sudo apt full-upgrade
```

<div class="code-toolbar" id="bkmrk-full-upgrade%C2%A0%3A-m%C3%AAme-"><div class="toolbar"><div class="toolbar-item">**full-upgrade** : même chose que apt upgrade, mais supprime des paquets si cela est nécessaire pour installer les nouvelles versions des paquets.</div></div></div>##### **Supprimez tous les paquets** devenus obsolètes et qui ne sont plus nécessaires :

```bash
sudo apt autoremove
```

<div class="code-toolbar" id="bkmrk-copy"><div class="toolbar"><div class="toolbar-item">**Supprimez le cache**<span style="color: #bbbbbb; font-size: 1.4em; font-weight: 400;"> des paquets qui ne peuvent plus être téléchargés :</span>  
</div></div></div>```bash
sudo apt autoclean
```

# Le propriétaire & groupe (fichier/dossier)

#### Arborescence de démonstration

Pour l'arborescence suivante :

```shell
user@server:~$  ls -al /mnt/demo/
total 5753224
drwxr-xr-x 4 guest guest           4096 14 août  17:14  .
drwxr-xr-x 4 root  root            4096  3 janv.  2022  ..
-rw-r--r-- 1 guest guest             56 14 août  16:16  file-demo.txt
drwxr-xr-x 2 guest guest           4096 28 sept. 11:10  film
drwxr-xr-x 2 guest guest           4096 30 déc.   2021  serie

```

Explication des différents droits sur un fichier/dossier.

```shell
drwxr-xr-x 2 guest guest           4096 28 sept. 11:10  film
```

- \[drwxr-xr-x\] Les 8 premiers caractères représentent les droits sur le fichier (Lecture / Écriture / Exécution)
- \[2\] Le chiffre suivant les 8 premier caractère représente l'équivalent des droits en chiffres
- \[guest\] Le premier **guest** représente le propriétaire du fichier/dossier
- \[guest\] Le deuxième **guest** représente le groupe propriétaire du fichier/dossier

#### La commande `chown`

```shell
chown [OPTION]... [PROPRIO][:GROUPE] FICHIER.
		    --help     		   afficher l''aide et quitter
	    -v, --verbose          afficher un diagnostic pour chaque fichier traité
    	-R, --recursive        opérer récursivement sur les fichiers et répertoires
            --from=PROPRIO_ACTUEL:GROUPE_ACTUEL
                         	   modifier le propriétaire ou le groupe de chaque fichier dont le propriétaire ou le groupe actuel correspondent à ceux indiqués
```

####   


#### Changer le propriétaire d'un fichier/dossier

L'utilisateur **guest** possède les dossiers et fichiers dans le dossier `demo`. Nous voulons changer le propriétaire du fichier `file-demo.txt` pour mettre l'utilisateur **user**. Pour ce faire il suffit de faire la commande suivante en tant que super utilisateur.

```shell
# Pour un fichier 
sudo chown user file-demo.txt

# Pour un dossier même commande mais sur le dossier
sudo chown film
# Pour appliquer le chamgement de propriétaire sur les sous-dossiers
# Rajouter le paramêtre -R ==> (-R, --recursive        operate on files and directories recursively)
sudo chown -R film
```

Par conséquent le propriétaire devient :

```shell
user@server:~$  ls -l f*
-rw-r--r-- 1 user guest             56 14 août  16:16  file-demo.txt
drwxr-xr-x 2 user guest           4096 28 sept. 11:10  film
```

####   


#### Changer le groupe d'un fichier/dossier

Pour changer uniquement le groupe du fichier ou dossier c'est la même commande sauf qu'il faut rajouter `:` devant le nom du groupe. Exemple :

On veut que le fichier appartiennent au groupe **friends**, pour se faire nous allons exécuter la commande suivante.

```shell
chown :friends file-demo.txt
```

Ce qui donne les droits suivants :

```shell
user@server:~$  ls -l *.txt
-rw-r--r-- 1 user friends           56 14 août  16:16  file-demo.txt
drwxr-xr-x 2 user guest           4096 28 sept. 11:10  film
```

#### Changer les deux en même temps

Pour changer le groupe et le propriétaire du fichier / dossier en même temps. Il faut combiner les deux commandes précédentes en une.

Par exemple pour mettre **user** en propriétaire du dossier `serie` et mettre le groupe **friends** pour ce même dossier nous allons faire la commande suivante :

```shell
chown user:friends serie
```

Ce qui donne les droits suivants :

```shell
user@server:~$  ls -l serie
drwxr-xr-x 2 user friends         4096 30 déc. 2021  serie
```

# Les permissions

> Sur les systèmes d'exploitation de type Unix, un ensemble d'indicateurs associés à chaque fichier détermine qui peut accéder à ce fichier et comment il peut y accéder. Ces indicateurs sont appelés permissions ou modes de fichiers, comme dans "mode d'accès". Le nom de la commande **chmod** signifie "mode de modification". Elle restreint la manière dont on peut accéder à un fichier.

#### Visualisation des permissions dans la liste des fichiers

```shell
user@server:~$  ls -al /mnt/demo/
total 5753224
drwxr-xr-x 4 guest guest           4096 14 août  17:14  .
drwxr-xr-x 4 root  root            4096  3 janv.  2022  ..
-rwxrw-r-- 1 guest friends           56 14 août  16:16  file-demo.txt
drwxr-xr-x 2 guest guest           4096 28 sept. 11:10  film
drwxr-xr-x 2 guest guest           4096 30 déc.   2021  serie
```

```shell
-rwxrw-r-- 1 guest friends  	56 14 août  16:16  file-demo.txt
```

Voici ce que signifie chaque partie de cette information :

<table class="mtable4 tab" id="bkmrk---the-first-characte-0" style="width: 100%; height: 377.118px;"><tbody><tr class="tcw" style="height: 46.6667px;"><td style="width: 13.4768%; height: 46.6667px;">**-**</td><td style="width: 86.5391%; height: 46.6667px;">Le premier caractère représente le type de fichier : "-" pour un fichier ordinaire, "d" pour un répertoire, "l" pour un lien symbolique.</td></tr><tr class="tcw" style="height: 46.6667px;"><td style="width: 13.4768%; height: 46.6667px;">**rwx**</td><td style="width: 86.5391%; height: 46.6667px;">Les trois caractères suivants représentent les permissions du propriétaire du fichier : le propriétaire peut lire, écrire ou exécuter le fichier.</td></tr><tr class="tcw" style="height: 63.4549px;"><td style="width: 13.4768%; height: 63.4549px;">**rw-**</td><td style="width: 86.5391%; height: 63.4549px;">Les trois caractères suivants représentent les autorisations pour les membres du groupe de fichiers. Tout membre du groupe propriétaire du fichier peut lire ou écrire dans le fichier. Le dernier tiret est un caractère de remplacement ; les membres du groupe n'ont pas le droit d'exécuter ce fichier.</td></tr><tr class="tcw" style="height: 29.8785px;"><td style="width: 13.4768%; height: 29.8785px;">**r--**</td><td style="width: 86.5391%; height: 29.8785px;">Les permissions pour "autres" (tout le monde). Les autres peuvent seulement lire ce fichier.</td></tr><tr class="tcw" style="height: 35.4688px;"><td style="width: 13.4768%; height: 35.4688px;">**1**</td><td style="width: 86.5391%; height: 35.4688px;">Le nombre de liens matériels vers ce fichier.</td></tr><tr class="tcw" style="height: 29.8785px;"><td style="width: 13.4768%; height: 29.8785px;">**guest**</td><td style="width: 86.5391%; height: 29.8785px;">Le propriétaire du fichier</td></tr><tr class="tcw" style="height: 29.8785px;"><td style="width: 13.4768%; height: 29.8785px;">**friends**</td><td style="width: 86.5391%; height: 29.8785px;">Le groupe auquel appartient le dossier.</td></tr><tr class="tcw" style="height: 35.4688px;"><td style="width: 13.4768%; height: 35.4688px;">**56**</td><td style="width: 86.5391%; height: 35.4688px;">La taille du fichier en blocs.</td></tr><tr class="tcw" style="height: 29.8785px;"><td style="width: 13.4768%; height: 29.8785px;">**14 août 16:16**</td><td style="width: 86.5391%; height: 29.8785px;">Le mtime du fichier (date et heure de la dernière modification du fichier).</td></tr><tr class="tcw" style="height: 29.8785px;"><td style="width: 13.4768%; height: 29.8785px;">**file-demo.txt**</td><td style="width: 86.5391%; height: 29.8785px;">Le nom du fichier</td></tr></tbody></table>

####   


#### La commande `chmod`

```shell
chmod [OPTION]... MODE[,MODE]... FICHIER
			-v, --verbose          afficher un diagnostic pour chaque fichier traité
            -R, --recursive        modifier récursivement les fichiers et répertoires
                --help     		   afficher l''aide et quitter
```

Les lettres **u**, **g** et **o** signifient **"utilisateur"**, **"groupe"** et **"autre"**.

Le signe égal ("=") signifie "définir les autorisations exactement comme ceci".

Les lettres **"r"**, **"w"** et **"x"** signifient **"lire"**, **"écrire"** et **"exécuter"**, respectivement. Les virgules séparent les différentes classes de permissions et ne sont pas séparées par des espaces.

Exemple :

```shell
chmod u=rwx,g=rx,o=r myfile
```

Cette commande donne les droits suivants sur le fichier :

- Le propriétaire du fichier peux **lire**, **écrire** et **exécuter** le fichier
- Le groupe peux **lire** et **exécuter** le fichier
- Les autre peuvent seulement le **lire**

Il existe une commande équivalente en numérique :

```shell
chmod 754 myfile
```

Ici, les chiffres **7**, **5** et **4** représentent chacun individuellement les autorisations pour **l'utilisateur**, **le groupe** et **les autres**, dans cet ordre.

Pour comprendre la valeur de ces trois chiffres, il faut connaitre la valeur des autorisations :

- 4 signifie "lire"
- 2 signifie "écrire"
- 1 signifie "exécuter"
- 0 signifie "aucune permission"

Donc pour l'utilisateur on combine **lire, écrire** et **exécuter** soit **4 + 2 +1 = 7**

Pour le groupe **lire** et **exécuter** soit **4 + 1 = 5**

Et pour les autres seulement **lire** soit **4 = 4**

**Pour conclure la combinaison des droits a donner au fichier est `754`.**

# Utiliser le rename

> #####   
> 
> 
> ##### L'utilisation de la commande `rename` peut être dangereuse il faut être très vigilent.

##### Dans chaque commande `rename` on peut utiliser le paramètre `-v` ce qui permet de simuler la commande et d'afficher le résultat sans affecter réellement les noms des fichiers.

#### Supprimer un morceau dans le nom des fichiers 

Pour l'arborescence suivante :

```shell
root@server:~/temp$ ls -al
total 11489640
drwxr-xr-x  2 root root       4096  6 oct.  16:46  .
drwxr-xr-x 10 root root       4096  6 oct.  16:39  ..
-rw-r--r--  1 root root 1030864205  6 oct.  16:40 '[Mixouille] Bleach Kai - 16 - L\'ambition d\'un roi - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root  864747494  6 oct.  16:40 '[Mixouille] Bleach Kai - 17 - La mémoire retrouvée - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1032079000  6 oct.  16:41 '[Mixouille] Bleach Kai - 18 - Diversion - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root  865759623  6 oct.  16:41 '[Mixouille] Bleach Kai - 19 - Turn Back the Pendulum - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1383706007  6 oct.  16:41 '[Mixouille] Bleach Kai - 20 - La Bataille de Karakura - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1225670797  6 oct.  16:41 '[Mixouille] Bleach Kai - 21 - La fureur du Hollow - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1058394810  6 oct.  16:41 '[Mixouille] Bleach Kai - 22 - Le roi déchu - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1022939676  6 oct.  16:41 '[Mixouille] Bleach Kai - 23 - Le maître entre en scène - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1106374778  6 oct.  16:41 '[Mixouille] Bleach Kai - 24 - Insurpassable - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root  980618821  6 oct.  16:41 '[Mixouille] Bleach Kai - 25 - Ultime attaque - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1194156473  6 oct.  16:41 '[Mixouille] Bleach Kai - 28 - Shinigami Suppléant - 720p.MULTI.x264.mkv'
```

On souhaite retirer tous les **<span style="background-color: #e03e2d;">\[Mixouille\] </span>**dans les noms des fichiers.

```shell
rename 's/\[Mixouille\] //' *.mkv
```

Note : `\` permet d'ignorer les caractères spéciaux tels que **.\\/\]\[-** et autres.

Ce qui donne le résultat suivant :

```shell
root@server:~/temp$ ls -al
total 11489640
drwxr-xr-x  2 root root       4096  6 oct.  16:46  .
drwxr-xr-x 10 root root       4096  6 oct.  16:39  ..
-rw-r--r--  1 root root 1030864205  6 oct.  16:40 'Bleach Kai - 16 - L\'ambition d\'un roi - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root  864747494  6 oct.  16:40 'Bleach Kai - 17 - La mémoire retrouvée - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1032079000  6 oct.  16:41 'Bleach Kai - 18 - Diversion - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root  865759623  6 oct.  16:41 'Bleach Kai - 19 - Turn Back the Pendulum - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1383706007  6 oct.  16:41 'Bleach Kai - 20 - La Bataille de Karakura - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1225670797  6 oct.  16:41 'Bleach Kai - 21 - La fureur du Hollow - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1058394810  6 oct.  16:41 'Bleach Kai - 22 - Le roi déchu - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1022939676  6 oct.  16:41 'Bleach Kai - 23 - Le maître entre en scène - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1106374778  6 oct.  16:41 'Bleach Kai - 24 - Insurpassable - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root  980618821  6 oct.  16:41 'Bleach Kai - 25 - Ultime attaque - 720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1194156473  6 oct.  16:41 'Bleach Kai - 28 - Shinigami Suppléant - 720p.MULTI.x264.mkv'

```

#### Remplacer un morceau dans le nom des fichiers

On va réutiliser l'arborescence du résultat de la commande précédente.

On souhaite remplacer **'<span style="background-color: #e03e2d;"> - </span>'** par un point pour ce faire nous allons effectuer la commande suivante :

```shell
rename 's/ \- /./' *.mkv
```

Ce qui donne le résultat suivant :

```shell
root@server:~/temp$ ls -al
total 11489640
drwxr-xr-x  2 root root       4096  6 oct.  16:46  .
drwxr-xr-x 10 root root       4096  6 oct.  16:39  ..
-rw-r--r--  1 root root 1030864205  6 oct.  16:40 'Bleach Kai.16.L\'ambition d\'un roi.720p.MULTI.x264.mkv'
-rw-r--r--  1 root root  864747494  6 oct.  16:40 'Bleach Kai.17.La mémoire retrouvée.720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1032079000  6 oct.  16:41 'Bleach Kai.18.Diversion.720p.MULTI.x264.mkv'
-rw-r--r--  1 root root  865759623  6 oct.  16:41 'Bleach Kai.19.Turn Back the Pendulum.720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1383706007  6 oct.  16:41 'Bleach Kai.20.La Bataille de Karakura.720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1225670797  6 oct.  16:41 'Bleach Kai.21.La fureur du Hollow.720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1058394810  6 oct.  16:41 'Bleach Kai.22.Le roi déchu.720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1022939676  6 oct.  16:41 'Bleach Kai.23.Le maître entre en scène.720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1106374778  6 oct.  16:41 'Bleach Kai.24.Insurpassable.720p.MULTI.x264.mkv'
-rw-r--r--  1 root root  980618821  6 oct.  16:41 'Bleach Kai.25.Ultime attaque.720p.MULTI.x264.mkv'
-rw-r--r--  1 root root 1194156473  6 oct.  16:41 'Bleach Kai.28.Shinigami Suppléant.720p.MULTI.x264.mkv'

```

# Les packages

#### Lister les packages installé

```shell
# List tous les packages installé
apt list --installed 

# List tous les packages installé qui commence par 'ap'
apt list --installed ap*
```

#### List les packages upgradable 

```shell
apt list --upgradeable
```

# Désactiver le login SSH pour root

> Afin de sécuriser le serveur, une des bonnes pratiques est de désactiver la connexion à l'utilisateur `root` via SSH.

##### Editer le fichier de config SSH

le fichier se trouve à l'emplacement suivant : `/etc/ssh/sshd_config` Ouvrir le fichier avec votre éditeur de texte préféré.

##### Modifier la permission 

Une fois le fichier ouvert, trouver la ligne `#PermitRootLogin value` Dé-commenter la ligne pour remplacer la valeur par `no` .  
Ce qui donne le résultat suivant :

```bash
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
```

Enregistrer et quitter le fichier.

##### Redémarrer le service

Pour que la modification soit prise en compte il est nécessaire de redémarrer le service SSH.

Vous pouvez redémarrer le service avec une des commandes suivantes :

- ```bash
    systemctl restart sshd
    ```
- ```bash
    service sshd restart
    ```

<p class="callout success">La configuration est terminé et appliqué. Il n'est maintenant plus possible de se connecter avec le super utilisateur en SSH.</p>