Administration Linux

L’écosystème Linux

  • Système d’exploitation
  • Interagir avec le système en ligne de commande
  • Un système de fichiers
  • Des utilisateurs, des permissions
  • Des Processus

Objectifs

  • installer et gérer une distribution
  • acquérir des bases de réseau et de sécurité
  • administrer un serveur à distance
  • configurer et gérer des services
  • déployer un serveur web

Plan

  1. Le gestionnaire de paquet (et les archives)
  2. Notions de réseau
  3. Notions de cryptographie
  4. Se connecter et gérer un serveur avec SSH
  5. Services et sécurité basique d’un serveur
  6. Déployer un site “basique” avec nginx
  7. Automatiser avec at et les cron jobs

2. Le gestionnaire de paquet

(et les archives)

2. Le gestionnaire de paquet

Motivation

Historiquement, c’est très compliqué d’installer un programme :

  • le télécharger et le compiler
  • la compilation (ou le programme lui-même) requiert des dependances
  • il faut télécharger et compiler les dépendances
  • qui requiert elles-mêmes des dépendances …

2. Le gestionnaire de paquet

Le travail d’une distribution (entre autre)

  • créer et maintenir un ensemble de paquet cohérents
  • … et le gestionnaire de paquet qui va avec
  • les (pre)compiler pour fournir des binaires

2. Le gestionnaire de paquet

Paquet ~ programmes ou librairies

Le gestionnaire de paquet c’est :

  • La “clef de voute” d’une distribution ?
  • un système unifié pour installer des paquets … ;
  • et les mettre à jour ! ;
  • le tout en gérant les dépendances et les conflits ;
  • et via une commaunauté qui s’assure que les logiciels ne font pas n’importe quoi.

2. Le gestionnaire de paquet

Comparaison avec Windows

Sous Windows

  • téléchargement d’un .exe par l’utilisateur …
  • … depuis une source obscure ! (critical security risk !)
  • procédure d’installation spécifique
  • … qui tente de vous refiler des toolbar bloated, et/ou des CGU obscures
  • système de mise à jour spécifique
  • nécessité d’installer manuellement des dépendances

2. Le gestionnaire de paquet

One package to rule them all

One package to find them

One package to download them all

and on the system bind them

In the land of GNU/Debian where the penguin lie

2. Le gestionnaire de paquet

Sous Debian

Format .deb

apt : couche “haut niveau”

  • dépot,
  • authentification,

dpkg : couche “bas niveau”

  • gestion des dépendances,
  • installation du paquet,

2. Le gestionnaire de paquet

Parenthèse sur apt-get

  • Historiquement, apt-get (et apt-cache, apt-mark, ..) étaientt utilisés
  • Syntaxe inutilement complexe ?
  • apt fourni une meilleur interface (UI et UX)

2. Le gestionnaire de paquet

Utilisation de apt

  • apt install <package> : télécharge et installe le paquet et tout son arbre de dépendances
  • apt remove <package> : désinstaller le paquet (et les paquet dont il dépends !)
  • apt autoremove : supprime les paquets qui ne sont plus nécessaires

2. Le gestionnaire de paquet

Mettre à jour les paquets

  • apt update : récupère la liste des paquets depuis les dépots
  • apt dist-upgrade : calcule et lance la mise à jour de tous les paquets
  • (apt upgrade : mise à jour “safe”, sans installer/supprimer de nouveaux paquets)

2. Le gestionnaire de paquet

Les dépots

Les dépots de paquets sont configurés via /etc/apt/sources.list et les fichiers du dossier /etc/apt/sources.list.d/.

Exemple :

deb http://ftp.debian.fr/debian/ stretch main contrib
  • stretch est le nom de la distribution
  • main et contrib sont des composantes à utiliser

2. Le gestionnaire de paquet

Les versions de Debian

Debian vise un système libre et très stable

  • stable : paquets éprouvés et très stable (bien que souvent un peu vieux)
  • testing : paquets en cours de test, comportant encore quelques bugs
  • unstable (sid) : pour les gens qui aiment vivre dangereusement

Les versions tournent tous les ~2 ans environ

  • l’ancienne testing devient la nouvelle stable
  • le passage de version peut être un peu douloureux …

2. Le gestionnaire de paquet

Gérer des archives

tar (tape archive) permet de créer des archives (non compressées) qui rassemblent des fichiers.

# Créer une archive monarchive.tar
tar -cvf monarchive.tar file1 file2 folder2/ folder2/

# Désassembler une archive
tar -xvf monarchive.tar

2. Le gestionnaire de paquet

Gérer des archives

gzip (gunzip) permet de compresser des fichiers (similaire aux .zip, .rar, …)

# Compresser zblorf.scd
gzip zblorf.scd

# [...] le fichier a été compressé et renommé zblorf.scd.gz

# Decompresser le fichier :
gzip -d zblorf.scd.gz

2. Le gestionnaire de paquet

Gérer des archives

tar peut en fait être invoqué avec -z pour générer une archive compressée

# Créer une archive compressée
tar -cvzf monarchive.tar.gz file1 file2 folder2/ folder2/

# Désassembler une archive
tar -xvzf monarchive.tar.gz

2. Le gestionnaire de paquet

Gérer des archives

3. Notions de réseau

3. Notions de réseau

“Réseau”

Tout ce qui permet la communication entre les machines (et les programmes)

3. Notions de réseau

Objectifs

  • Comprendre et savoir se représenter les différentes couches
  • Savoir faire quelques des tests “de base”
  • … et les commandes associées

3. Notions de réseau

  • DNS : domaine, résolution, …
  • Protocoles, HTTP, modèle client/serveur
  • TCP : ports, NAT
  • IP : adresses, routage, DHCP
  • Physique : interfaces réseau

3. Notions de réseau

Couche physique (1/2)

  • Ethernet, wifi, 4G, …
  • Votre ordinateur dispose d'interface réseau
  • Elles permettent de communiquer sur un support (cable, onde)
  • Chaque interface réseau possède une adresse MAC
  • Il existe typiquement une interface lo (loopback, la boucle locale - 127.0.0.1)

3. Notions de réseau

Couche physique (2/2)

  • ip a permet d’obtenir des informations sur les interfaces
  • Historiquement, les noms étaient “simple” : eth0, wlan0, …
  • Aujourd’hui les noms sont un peu plus complexes / arbitraires
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP>
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP>
    link/ether 33:0e:d8:3f:65:7e
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP>
    link/ether 68:a6:2d:9f:ad:07

3. Notions de réseau

IP : Internet Protocol (1/2)

  • IP fait parler des machines !
  • Protocole de routage des paquets
  • “Best-effort”, non fiable !
  • Les routeurs discutent entre eux pour optimiser l’acheminement
  • Les adresses sont comme des numéros de telephone, ou des positions GPS
    • IPv4, par exemple 92.93.127.10 (4.3 milliards d’adresse)
    • IPv6, par exemple 2a04:7260:9088:6c00::1 (10^38 addresses)

3. Notions de réseau

IP : Internet Protocol (2/2)

$ ip a
enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP>
 link/ether 40:8d:5c:f3:3e:35
 inet 91.225.41.29/32 scope global enp3s0
 inet6 2a04:7202:8008:60c0::1/56 scope global

Voir aussi : ifconfig (deprecated) et ipconfig (sous windows!)

3. Notions de réseau

IP : ping teste la connexion entre deux machines

$ ping 91.198.174.192
PING 91.198.174.192 (91.198.174.192) 56(84) bytes of data.
64 bytes from 91.198.174.192: icmp_seq=1 ttl=58 time=51.5 ms
64 bytes from 91.198.174.192: icmp_seq=2 ttl=58 time=65.3 ms
^C
--- 91.198.174.192 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 51.475/58.394/65.313/6.919 ms

3. Notions de réseau

IP : whois pour obtenir des infos sur le(s) proprio(s) d’une ip

$ whois 91.198.174.192
[...]
organisation:   ORG-WFI2-RIPE
org-name:       Wikimedia Foundation, Inc
[...]
mnt-by:         RIPE-NCC-HM-MNT
mnt-by:         WIKIMEDIA-MNT

3. Notions de réseau

IP : traceroute permet d’étudier la route prise par les paquets

$ traceroute 91.198.174.192
 1  _gateway (192.168.0.1)  4.212 ms  6.449 ms  6.482 ms
 2  * 10.13.25.1 (10.13.25.1)  248.615 ms *
 3  211-282-253-24.rev.numericable.fr (211.282.253.24)  251.263 ms  251.332 ms  251.408 ms
 4  172.19.132.146 (172.19.132.146)  251.493 ms ip-65.net-80-236-3.static.numericable.fr (80.236.3.65)  251.569 ms  251.619 ms
 5  prs-b7-link.telia.net (62.115.55.45)  251.692 ms  251.769 ms  251.979 ms
 6  prs-bb4-link.telia.net (62.115.120.30)  252.026 ms prs-bb3-link.telia.net (62.115.121.96)  17.989 ms prs-bb4-link.telia.net (213.155.134.228)  1069.536 ms
 7  adm-bb4-link.telia.net (213.155.136.167)  1070.116 ms  1242.772 ms adm-bb3-link.telia.net (213.155.136.20)  1242.839 ms
 8  adm-b3-link.telia.net (62.115.122.179)  1243.006 ms adm-b3-link.telia.net (62.115.122.191)  1242.879 ms  1243.082 ms
[...]

3. Notions de réseau

TCP : Transmission Control Protocol (1/2)

  • TCP fait communiquer des programmes
  • Découpage des messages en petits paquets pour IP
  • Fiabilité avec des accusés de réception / renvois

3. Notions de réseau

TCP : Transmission Control Protocol (2/2)

  • TCP fourni un “tuyau de communication” entre deux programmes
  • Notion de ‘port’
  • Analogie avec les différents “departement” à l’intérieur d’une entreprise
  • Par exemple : votre navigateur web (port 56723) qui discute qui discute avec le serveur web (port 80)
    • côté A : 183.92.18.6:56723 (un navigateur web)
    • côté B : 91.198.174.192:80 (un serveur web)

3. Notions de réseau

TCP : lsof -i pour lister les connexions active

$ lsof -i
ssh        3231 alex IPv4 shadow.local:34658->142.114.82.73.rev.sfr.net:ssh (ESTABLISHED)
thunderbi  3475 alex IPv4 shadow.local:59424->tic.mailoo.org:imap (ESTABLISHED)
thunderbi  3475 alex IPv4 shadow.local:57312->tic.mailoo.org:imap (ESTABLISHED)
waterfox  12193 alex IPv4 shadow.local:54606->cybre.space:https (ESTABLISHED)
waterfox  12193 alex IPv4 shadow.local:32580->cybre.space:https (ESTABLISHED)

3. Notions de réseau

TCP : nc -zv pour tester si un port est ouvert

ACHTUNG : ne pas abuser de cela..

$ nc -zv 44.112.42.13 22
Connection to 44.112.42.13 22 port [tcp/ssh] succeeded!

nc -zv ynh-forge.netlib.re 53

3. Notions de réseau

TCP : tcpdump pour regarder l’activité sur le réseau

3. Notions de réseau

TCP : et aussi : wireshark

3. Notions de réseau

Modèle client/serveur

Un serveur (au sens logiciel) est un programme. Comme un serveur dans un bar (!) :

  • il écoute et attends qu’on lui demande un service
  • par exemple : fournir la page d’acceuil d’un site
  • le serveur écoute sur un port : par exemple : 80

Le client est celui qui demande le service

  • il toque à la porte
  • transmet sa demande
  • le serveur lui réponds (on espère)

3. Notions de réseau

Modèle client/serveur : netstat

netstat -tulpn permet de lister les programmes qui écoutent et attendent

 > netstat -tulpn | grep LISTEN | grep "80\|25"
tcp     0.0.0.0:80  LISTEN      28634/nginx: master
tcp     0.0.0.0:25  LISTEN      1331/master
tcp6    :::80       LISTEN      28634/nginx: master
tcp6    :::25       LISTEN      1331/master

3. Notions de réseau

Protocoles (1/2)

  • Un protocole = une façon de discuter entre programmes
  • Conçus pour une finalité particulière
  • Ont généralement un port “par défaut” / conventionnel
    • 80/http : le web (des “vitrines” pour montrer et naviguer dans du contenu)
    • 443/https : le web (mais en chiffré)
    • 25/smtp : le mail (pour relayer les courriers électroniques)
    • 993/imap : le mail (synchroniser des boites de receptions)
    • 587/smtps : le mail (soumettre un courrier à envoyer)
    • 22/ssh : lancer des commandes à distance
    • 53/dns : transformer des noms en ip
    • 5222/xmpp : messagerie instantannée
    • 6667/irc : salons de chat

3. Notions de réseau

Protocoles (2/2)

Par exemple, HTTP :

  • On envoie GET / et on reçoit 200 + la page d’acceuil
  • On envoie GET /chaton.jpg et on reçoit 200 + une image (si elle existe)
  • On envoie GET /meaningoflife.txt et on reçoit 404 (si la page n’existe pas)
  • On peut ajouter des Headers aux requetes (c.f. debugger firefox)
  • Il existe d’autres requetes : POST, PUT, DELETE, …

3. Notions de réseau

DNS : Domain name server (1/5)

  • Retenir cinquante numéros de telephone (ou coordonées GPS) par coeur, c’est pas facile
  • On invente l’annuaire et les adresses postales
  • wikipedia.org -> 91.198.174.192
  • On peut acheter des noms chez des registrars (OVH, Gandi, …)
  • Composant critique d’Internet (en terme fonctionnel)

3. Notions de réseau

DNS : Domain name server (2/5)

  • Il existe des résolveurs DNS à qui on peut demander de résoudre un nom via le protocole DNS (port 53)

  • Par exemple :

    • 8.8.8.8, le resolveur de Google
    • 9.9.9.9, un nouveau service qui “respecte la vie privée”
    • 89.234.141.66, le resolveur de ARN
    • 208.67.222.222, OpenDNS
  • Choix critique pour la vie privée !!

  • Generalement, vous utilisez (malgré vous) le resolveur de votre FAI, ou bien celui de Google

3. Notions de réseau

DNS : Domain name server (3/5)

  • Sous Linux, le resolveur DNS se configure via un fichier /etc/resolv.conf
$ cat /etc/resolv.conf
nameserver 89.234.141.66

3. Notions de réseau

DNS : Domain name server (4/5)

ping fonctionne aussi avec noms de domaine

host permet sinon de connaître l’ip associée

$ host wikipedia.org
wikipedia.org has address 91.198.174.192
wikipedia.org has IPv6 address 2620:0:862:ed1a::1
wikipedia.org mail is handled by 50 mx2001.wikimedia.org.
wikipedia.org mail is handled by 10 mx1001.wikimedia.org.

3. Notions de réseau

DNS : Domain name server (5/5)

  • On peut outrepasser / forcer la résolution DNS de certains domaine avec le fichier /etc/hosts
 > cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	shadow
::1	localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

127.0.0.1 google.com
127.0.0.1 google.fr
127.0.0.1 www.google.com
127.0.0.1 www.google.fr
127.0.0.1 facebook.com
127.0.0.1 facebook.fr

3. Notions de réseau

Réseau local et NAT (1/6)

  • En pratique, on est peu souvent “directement” connecté à internet
    • MachinBox
    • Routeur de l’entreprise
  • Pas assez d’IPv4 pour tout le monde
    • nécessité de sous-réseaux “domestique” / des réseau “local”
    • basé sur les NAT
    • typiquement avec des IP en 192.168.x.y ou 10.0.x.y

3. Notions de réseau

Réseau local et NAT (4/6)

  • C’est le routeur qui m’attribue une IP via le DHCP
  • Le routeur agit comme “gateway” (la “passerelle” vers les internets)
    • (c.f. ip route, et la route par défaut)
  • Depuis l’extérieur du réseau local, il n’est pas possible de parler “simplement” à une machine
  • Example : Je ne peux apriori pas parler à la machine 192.168.0.12 de mon réseau local chez moi depuis le centre de formation…
  • Egalement : Difficulté de connaître sa vraie IP “globale” ! Il faut forcément demander à une autre machine … c.f whatsmyip.com

3. Notions de réseau

Réseau local et NAT (5/6)

La situation se complexifie avec Virtualbox :

  • Typiquement Virtualbox créé un NAT à l’intérieur de votre machine
  • Les différentes VM ont alors des adresses en 10.0.x.y

5. Se connecter et gérer un serveur avec SSH

5. SSH et les serveurs

À propos des serveurs

Serveur (au sens matériel)

  • machine destinée à fournir des services (e.g. un site web)
  • allumée et connectée 24/7
  • typiquement sans interface graphique
  • … et donc administrée à distance

5. SSH et les serveurs

À propos des serveurs

Serveur (au sens logiciel)

  • aussi appelé “daemon”, ou service
  • programme qui écoute en permanence et attends qu’un autre programme le contacte
    • par ex. : un serveur web attends des clients
  • écoute typiquement sur un ou plusieurs port
    • par ex. : 80 pour HTTP

5. SSH et les serveurs

Serveurs : quel support matériel ?

5. SSH et les serveurs

Serveurs : quel support matériel ?

5. SSH et les serveurs

… Plot twist !

5. SSH et les serveurs

“Virtual” Private Server (VPS)

VPS = une VM dans un datacenter

5. SSH et les serveurs

“Virtual” Private Server (VPS)

… qui tourne quelque part sur une vraie machine

5. SSH et les serveurs

5. SSH et les serveurs

5. SSH et les serveurs

SSH : Secure Shell

  • Un protocole client-serveur, par défaut sur le port 22
  • Prendre le contrôle d’une machine à distance via un shell
  • Sécurisé grâce à du chiffrement asymétrique
    • le serveur a un jeu de clef publique/privé
    • le client peut aussi en avoir un (sinon : mot de passe)
  • Outil “de base” pour administrer des serveurs

5. SSH et les serveurs

Syntaxe : ssh utilisateur@machine

$ ssh admin@ynh-forge.netlib.re
The authenticity of host 'ynh-forge.netlib.re (46.101.221.117)' can't be established.
RSA key fingerprint is SHA256:CuPd7AtmqS0UE6DwDDG68hQ+qIT2tQqZqm8pfo2oBE8.
Are you sure you want to continue connecting (yes/no)? █

5. SSH et les serveurs

Syntaxe : ssh utilisateur@machine

$ ssh admin@ynh-forge.netlib.re
The authenticity of host 'ynh-forge.netlib.re (46.101.221.117)' can't be established.
RSA key fingerprint is SHA256:CuPd7AtmqS0UE6DwDDG68hQ+qIT2tQqZqm8pfo2oBE8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ynh-forge.netlib.re' (RSA) to the list of known hosts.
Debian GNU/Linux 9
admin@ynh-forge.netlib.re's password: █

5. SSH et les serveurs

Syntaxe : ssh utilisateur@machine

$ ssh admin@ynh-forge.netlib.re
The authenticity of host 'ynh-forge.netlib.re (46.101.221.117)' can't be established.
RSA key fingerprint is SHA256:CuPd7AtmqS0UE6DwDDG68hQ+qIT2tQqZqm8pfo2oBE8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ynh-forge.netlib.re' (RSA) to the list of known hosts.
Debian GNU/Linux 9
admin@ynh-forge.netlib.re's password:

Last login: Thu Oct  4 08:52:07 2018 from 90.63.229.46
admin@ynh-forge:~$ █

5. SSH et les serveurs

SSH : se logguer

  • ACHTUNG : Soyez attentif à dans quel terminal vous tapez !!!
  • En se connectant la première fois, on vérifie la clef publique du serveur
  • On a besoin du mot de passe pour se connecter
  • … mais la bonne pratique est d’utiliser nous-aussi une clef

5. SSH et les serveurs

SSH : avec une clef

… mais pourquoi ?

  • Pas de mot de passe qui se balade sur le réseau
  • Pas nécessaire de retaper le mot de passe à chaque fois
  • Possibilité d’automatiser des tâches (clef sans mot de passe)
  • (Plusieurs personnes peuvent avoir accès à un meme utilisateur sans devoir se mettre d’accord sur un mot de passe commun)

5. SSH et les serveurs

SSH : avec une clef

1 - Générer avec ssh-keygen -t rsa -b 4096 -C "commentaire ou description"

$ ssh-keygen -t rsa -b 4096 -C "Clef pour la formation"

5. SSH et les serveurs

SSH : avec une clef

1 - Générer avec ssh-keygen -t rsa -b 4096 -C "commentaire ou description"

$ ssh-keygen -t rsa -b 4096 -C "Clef pour la formation"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/alex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):   # Mot de passe
Enter same passphrase again:                  # (again)
Your identification has been saved in /home/alex/.ssh/id_rsa.
Your public key has been saved in /home/alex/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ZcAKHVtTXUPz3ipqia4i+soRHZQ4tYsDGfc5ieEGWcY "Clef pour la formation"

5. SSH et les serveurs

SSH : avec une clef

2 - Configurer la clef sur le serveur

  • soit depuis le client avec
ssh-copy-id -i chemin/vers/la/clef user@machine
  • soit depuis le serveur en rajoutant la clef dans ~/.ssh/authorized_keys
    • (generalement, l’admin vous demande votre clef)

5. SSH et les serveurs

SSH : avec une clef

3 - Utiliser la clef pour se connecter

$ ssh -i ~/.ssh/ma_clef alex@jaimelecafe.com
Enter passphrase for key '/home/alex/.ssh/ma_clef': █

5. SSH et les serveurs

SSH : avec une clef

3 - Utiliser la clef pour se connecter

$ ssh -i ~/.ssh/ma_clef alex@jaimelecafe.com
Enter passphrase for key '/home/alex/.ssh/ma_clef':

Last login: Mon Oct  8 19:46:32 2018 from 11.22.33.44
user@jaimelecafe.com:~$ █
  • Le système peut potentiellement se souvenir du mot de passe pour les prochaines minutes, comme avec sudo
  • Il peut ne pas y avoir de mot de passe (utilisation dans des scripts)

5. SSH et les serveurs

SSH : configuration côté client

  • Le fichier ~/.ssh/config peut être édité pour définir des machines et les options associées
Host jaimelecafe
    User alex
    Hostname jaimelecafe.com
    IdentityFile ~/.ssh/ma_clef
  • On peut ensuite écrire simplement : ssh jaimelecafe

5. SSH et les serveurs

SCP : copier des fichiers

scp <source> <destination> permet de copier des fichiers entre le client et le serveur

  • Le chemin d’un fichier distant s’écrit machine:/chemin/vers/fichier
  • ou (avec un user) : utilisateur@une.machine.com:/chemin/vers/ficier

Exemples :

$ scp slides.html bob@dismorphia.info:/home/alex/
$ scp bob@dismorphia.info:/home/alex/.bashrc ./

5. SSH et les serveurs

Divers

  • Client SSH sous Windows : MobaXterm
  • sshfs pour monter des dossiers distants
  • ssh -D pour créer des tunnels chiffrés (similaires à des VPNs)