---
title: "Admin Linux - Fiche"
...

\newpage{}

# Cours 1 : Intro à Linux

## UNIX

UNIX est un système :
- Multi utilisateurs
- Multi tâches

Il possède des interpréteurs de commandes (`shells`) avec beaucoup de commandes et utilitaires.

Très portable, il est possible de l'installer sur la quasi totalité des plateformes matérielles.

UNIX possède des standards de sécurité élevés notamment pour le réseau.

## Linux

Linux est un noyau de système d'exploitation dit "Type UNIX" (qui ressemble à un système UNIX).

Ce noyau sert de bases au distributions Linux, qui packagent un ensemble de logiciels avec le noyau pour avoir un système d'expliotation clé en main.

### Architecture du système de fichiers Linux

- `/bin` : fichiers exécutables essentiels au système
- `/boot` : noyaux et fichiers du gestionnaire de démarrage
- `/dev` : pour "device" contient les fichiers pour les périphériques
- `/etc` : fichiers de configuration du système
- `/home` : répertoires personnels des utilisateurs
- `/lib` : librairies systèmes et modules du noyau
- `/lost+found` : fichiers retrouvés par la commande `fsck`
- `/mnt` : repertoire proposé pour le montage de futur systèmes de fichier (diques durs, lecteurs réseau)
- `/media` : pour les périphériques de stockages (clé USB, carte SD)
- `/mount` : comme `/media` mais plus temporaire
- `/root` : répertoire de base du super utilisateur
- `/sbin` : fichiers exécutables du super utilisateur
- `/tmp` : fichiers temporaires créés par certain programmes
- `/usr` : programmes, librairies et fichiers accessible pour l'utilisateur
- `/var` : données variables liées à la machine

Chaque utilisateur va posséder un dossier à son nom dans `/home`.

## Commandes de bases

### Change Directory

La commande `cd` permet de changer de répertoire courant, en donnant le chemin, relatif ou absolu d'un répertoire.

```bash
cd ~ # répertoire utilisateur
cd .. # répertoire parent
cd - # répertoire précédent
```

### List

La commande `ls` permet de lister le contenu du répertoire courant. On peut aussi passer en paramètre le chemin relatif ou absolu d'un répertoire pour en lister le contenu.

```bash
ls -l # plus de détail
ls -a # afficher les répertoires cachés
ls -lt # trier par date de modification
```

### Print Working Directory

La commande `pwd` permet d'afficher le chemin absolu du répertoire courant.

### Which

La commande `which` permet d'afficher le chemin d'un exécutable appelé par une commande passée en paramètre.

```bash
which ls
```

### `cat`

La commande `cat` permet d'afficher tout le contenu d'un fichier.

```bash
cat myFile.txt
```

### `less`

La commande `less` permet d'afficher tout le contenu d'un fichier page par page.

```bash
less myFile.txt
```

### Make Directory

La commande `mkdir` permet de créer un répertoire ayant le nom/chmin passé en paramètre.

```bash
mkdir myDir
```

### Remove Directory

La commande `rmdir` permet de supprimer un répertoire vide.

```bash
rmdir myDir
```

### Touch

La commande `touch` permet de créer un fichier.

```bash
touch myFile.txt
```

### Remove

La commande `rm` permet de supprimer un fichier.

```bash
rm myFile.txt
```

## Droits d'accès

Les droits d'accès sont regroupés en catégories : 

- user : droits du propriétaire
- group : droits du groupe
- other

Chaque catégorie possède trois types de droits :
- r : read
- w : write
- x : execute

On utilise une notation binaire octale pour représenter ces droits : 

| Binaire | Octal | Droit |
|---------|-------|-------|
| 000     | 0     | ---   |
| 001     | 1     | --x   |
| 010     | 2     | -w-   |
| 011     | 3     | -wx   |
| 100     | 4     | r--   |
| 101     | 5     | r-x   |
| 110     | 6     | rw-   |
| 111     | 7     | rwx   |

### Changer les droits

La commande `chmod`. Peut être utilisée pour changer les droits d'un fichier. L'option `-R` peut être utilisée pour faire le changement récursivement.

```bash
chomd 764 myfile # user : 7 (rwx), group : 6 (rw-), other : 4 (r--)
```

### Changer le propriétaire / groupe

La commande `chown` permet de désigner un nouveau propriétaire et / ou un nouveau groupe à un fichier.

```bash
chown user1:group1 myFile # nouveau proriétaire : user, nouveau groupe : group1
```

## Gestion des utilisateurs

- Infos des utilisateurs : `/etc/passwd`
- Infos sur les groupes : `/etc/group`
- Mots de passes hachés : `/etc/shadow`

### Se connecter

Pour se connecter avec le compte d'un utilisateur : 

```bash
su <username>
```

### Créer un groupe

```bash
groupadd -g <guid> <group name>
```

### Créer un utilisateur 

```bash
useradd -u <uid> -c "<commentaire>" <nom utilsateur> 
```

Options : 
- `-G <groups>` : groupes auxquelle ajouter l'utilisateur
- `--create-home` : créer automatiquement un répertoire utilisateur
- `-p <hased password>` : le mot de pass de l'utilisateur (haché)
- ``-s <shell>` : le shell par défaut de l'utilisateur. Ex : `/bin/bash`

## Processus

### Arbre des processus

`pstree` permet d'afficher l'arboresence des processus en cours d'exécution.

### Liste des processus

`ps` permet d'afficher les processus en cours d'exécution.

Options : 
- `-u <username>` : afficher les processus d'un utilisateur
- `-a` : les processus attachés à un terminer
- `-x` : les processus non attachés à un terminal
  
### Terminer un processus

`kill` permet d'envoyer un signal de terminet à un processus grâce à son PID.

```bash
kill 2232 # termine le processus avec le PID 2332
```

L'options `-9` permet de forcer la terminaison du processus

## Commandes utilitaires réseau

- `ifconfig` : Permet de voir la configuration des interfaces réseau
- `ping <ip / domaine>` : test d'accèssibilité ICMP
- `traceroute <ip / domaine>` : affiche le chemin emprunté par les paquets IP pour joindre une destination
- `tcpdump` : Examen du traffic réseau sur une interface
- `telnet` / `ssh <utilisateur>@<ip / domaine>` : connexion sur une machine distante
- `wget <ip / domaine>` : récupérer du contenu via le web

## Commandes utilitaires système de fichier

- `mount` / `unmount` : montage démontage de systèmes de fichier
- `df` : Taux d'occupation des systèmes de fichier. l'options `-h` permet d'avoir des unités plus lisibles.
- `more <fichier>` : afficher un fichier page par page
- `grep "<terme>"` : filter un flux de sorties (commande ou fichier)
- `find <départ> -name <fichier>` : chercher un fichier dans une arborescence
- `mv <fichier> <destination>` : déplace un fichier

# Cours 2 : NFS, DHCP et DNS

## NFS (Network File System)

### Serveur

Permet d'exposer un fichier comme lecteur réseau.

Configuration du serveur via le fichier `/etc/exports` : 

```bash
<chemin du système de fichier> <hôte>(<options>)
```

Exemple : 

```
/home/nfs1  m1(rw,sync,no_subtree_check)
```

### Client

Montage éphémère d'un NFS : 

```bash
mount -t <type> -o <options> <hôte>:<nfs> <fs local>
```

Montage persistent : 
- `/etc/mtab` : liste des systèmes de fichier montés
- `/etc/fstab` : pour créer des montages persistants

## DHCP

**Dynamic Host Configuration Protol** : Permet de fournir dynamiquement aux machines connectées au réseau local une adresse IP, un masque de sous réseau ainsi qu'une passerelle par défaut.

- Implémenté à la couche 4 (Transport) du modèle OSI
- Port :
	- 67 pour les requêtes
    - 68 pour les réponses

Etapes : 

1. Le client broadcast un DHCP Discover
2. Le serveur envoie au client un DHCP Offer
3. Le client envoie un serveur un DHCP Request
4. Le serveur répond avec un DHCP ACK

Seulement ensuite le client peut utiliser l'adresse. Le temps d'utilisation est appelé le Lease Time.

Sur linux : 

- Client : `dhclient`
- Serveur : `isc-dhcp-server`
- Config : `/etc/dhcpd.conf`

### Configuration serveur

```bash
subnet 192.168.0.0 netmask 255.255.255.0 { # adresse du réseau
	range 192.168.0.20 192.168.0.50; # plage d'IP
    option routers 192.168.0.2; # passerelle par défaut
    option domain-name-servers 8.8.8.8,1.1.1.1; # DNS
    default-lease-time 86400; # temps du bail DHCP par défaut
    max-lease-time 604800; # temps max du bail DHCP
    option broadcast-address 192.168.0.255; # adresse de broadcast
}
```

Pour avoir un client avec une adresse fixe : 

```bash
host PC_ARSENE { # nom de la machine
	hardward ethernet 00:3013ba:b7:d1;
    fixed-address 192.168.0.100
}
```

Il faut également préciser l'interface pour la délivrance des beaux dans `/etc/default/iscèdhcp-server` : 

```bash
INTERFACES="eth0"
```

Enfin pour démarrer arrêter le serveur : 

```bash
/etc/init.d/isc-dhcp-server start
/etc/init.d/isc-dhcp-server stop
```

### Configuration Client

Dans `/etc/network/interfaces` :

```bash
allowhotplug eth0
auto eth0
iface eht0 inet dhcp
```

puis : 

```bash
sudo service networking restart
```

## DNS

Permet de résoudre des IP à partir de noms de domaine. La première correspondance locale est dans `/etc/hosts`. Pour le reste, on contacte un serveur DNS.

Configuration : 

- `/etc/hostname` : fichier de définition du nom d'hôte
- `/etc/hosts` : 1er fichier de correspondance DNS
- `/etc/nsswitch` : fichier de configuration du service de nom
- `/etc/resolv.conf` : fichier de configuration de la résolution DNS

### Configuration du serveur (avec Bind9)

#### `/etc/bind/named.conf`

Fichier de configuration primaire du DNS : 

```bash
inclue "/etc/bind/named.conf.options";
inclue "/etc/bind/named.conf.local";
inclue "/etc/bind/named.conf.default-zones";

zone "boss.fr" {
	type master;
    file "/etc/bind/db.stpotache.fr";
}
```

#### `/etc/bind/db.<nom domaine>`

```bash
$TTL	86400
@	IN	SOA dns.stpotache.fr. root.stpotache.fr.)
			2016021507
            3600
            3000
            2419200
            10
            )
            
; serveurs DNS

@	IN	NS dns.stpotache.fr.
dns	IN	A 172.16.181.15

; hotes

imprimante	IN A 172.16.181.154
web			IN A 172.16.181.155
```

#### Commandes

Démarrer arrêter : 

```bash
/etc/init.d/bind9 start
/etc/init.d/bind9 stop
```

### Configuration client

Dans `/etc/bind/resolv.conf`

```bash
search stpotache.fr
nameserver 172.16.181.15
```

# Cours 3 : VLANs et Firewalls

## VLAN

Abstraction des contraintes physiques / géographiques dans la mise en réseau implémentée sur les switchs (avec le protocole 802.1Q). 

Objectif : 

- Constituer autant de réseaux logiques que souhait
- Plusieurs types de ports (ACCESS et TRUNKING)
- Avoir les mêmes caractéristiques d'un réseau physique

### VLAN par port

#### Avantages 

- Aucun paquet ne quitte son VLAN
- Sécurité maximale entre VLANs

#### Inconvénients

- Obligation d'avoir un plan réseau à jouors


### VLAN par @ MAC

#### Avantages 

- Adapté pour les stations portables

#### Inconvénients

- Config fastidieuse : table de correspondance
- Possibilité d'usurpation de l'@ MAC

### Commandes VDE

- `vlan/create <N>` : crée le VLAN N
- `vlan/addport <vlan> <port>` : assigne le port au VLAN comme liaison d'aggrégation
- `vlan/setvlan <port> <vlan>` : assigne le port au VLAN
- `vlan/print` : affiche la config des vlans
- `port/pring` : affiche les ports du switch

### Sur Linux

Créer une interface virtuelle : 

```bash
vconfig add eth0 1
```

Pour afficher les interfaces : 

```bash
ifconfig -a
```

Pour configurer une interfaces virtuelle : 

```bash
ifconfig eth0.1 192.168.0.1/24 up
```

ou dans `/etc/network/interfaces` :

```bash
auto eth0.1
iface eth0.1 inet static
address 192.168.0.1
netmask 255.255.255.0
```

## Pare-feu Linux

Permet de protéger le réseau local en :

- Filtrant les paquets IP, segments TCP, datagrammes UDP
- NAT : translation d'IP / port, masquage d'IP
- Log des actions de filtrage

Le filtre à paquets du noyau Linux est `netfilter`. Nous allons utiliser `iptables` pour orchestrer le filtrage facilement via des chaînes : 

- INPUT : paquet entrant à destination de l'hôte
- OUTPUT : paquets sortants dont la source est l'hôte
- FORWARD : paquets en transit (entrants ou sortantà sur l'hôte

Tables de filtrage : 

- `filter`  : filtrer en acecptant ou rejetant des paquets
- `nat` : translation d'IP
- `mangle` : modifier les entêtes de paquets

Options `iptables` : 

- `-L` : afficher toutes les règles de la table
- `-F` : supprimer les règles de la table sauf la politique par défaut
- `-P` : modifie la politique par défaut
- `-A` : ajouter une règle à la fin de la table
- `-I` : insère la règle avant celle indiquée 
- `-D` : supprime une règle

Options de la commande 

Actions de filtrage : 

- `ACCEPT` : laisser passer le paquet
- `DROP` : rejeter le paquet
- `REJECT` : refus du paquet, envoie d'un message de refus à l'émetteur
- `LOG` : enregistrement d'un message dans `/var/log/messages`

Exemples : 

```bash
# Autoriser les requêtes ICMP (ping) sur la machine
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

# Autoriser les requêtes ICMP à transiter par la machine
iptables -A FORWARD -p icmp -j ACCEPT

# Autoriser les requêtes (port 53) pour assurer le service DNS
iptables -A FORWARD -p udp --dport 53 -j ACCEPT

# Autoriser les requêtes (port 67/68) pour assurer le service DHCP (l'INPUT et de l'OUTPUT si il y a le DHCP Relay sur la machine)
iptables -A FORWARD -p udp --dport 67 -j ACCEPT
iptables -A FORWARD -p udp --dport 68 -j ACCEPT
iptables -A INPUT -p udp --dport 67 -j ACCEPT
iptables -A INPUT -p udp --dport 68 -j ACCEPT
iptables -A OUTPUT -p udp --dport 67 -j ACCEPT
iptables -A OUTPUT -p udp --dport 68 -j ACCEPT

# Pour l'autorisation des connexion HTTP depuis le réseau 192.168.10.0/24 vers la machine 10.0.2.0/2 :
iptables -A FORWARD -s 192.168.10.0/24 -d 10.0.2.0/2 -p tcp --dport 80 -j ACCEPT

# Pour autoriser les réponse (connexion déjà établies)
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
```




