Compare commits
No commits in common. "d6c608b571b643d5fdca41f1350051bc50ab8ab7" and "13faa00f902d5ebb06db065384ddba014ae10cc9" have entirely different histories.
d6c608b571
...
13faa00f90
13 changed files with 15 additions and 2723 deletions
|
@ -1,4 +1,4 @@
|
||||||
Notes de cours et TD machine
|
Notes de cours et TD machines
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
Dépôt git pour la construction d'un site statique avec
|
Dépôt git pour la construction d'un site statique avec
|
||||||
|
|
|
@ -15,7 +15,7 @@ enableRobotsTXT = true
|
||||||
[Params]
|
[Params]
|
||||||
toc = true
|
toc = true
|
||||||
post_navigation = true
|
post_navigation = true
|
||||||
postSections = ["reseau", "progsys", "installations", "bdd", "securite"]
|
postSections = ["reseau", "progsys", "installations", "bdd"]
|
||||||
|
|
||||||
[Params.sidebar]
|
[Params.sidebar]
|
||||||
home = "right" # Configure layout for home page
|
home = "right" # Configure layout for home page
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
title: TDM1 OpenLDAP - notes d'installation
|
title: TDM1 OpenLDAP - notes d'installation
|
||||||
date: 2018-09-13
|
date: 2018-09-13
|
||||||
lastmod: 2018-09-27
|
lastmod: 2018-09-27
|
||||||
categories: ["Installations", "TD machine"]
|
categories: ["Installations", "TD machines"]
|
||||||
tags: ['OpenLDAP', 'Apache Directory Studio', 'PAM']
|
tags: ['OpenLDAP', 'Apache Directory Studio', 'PAM']
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,117 +0,0 @@
|
||||||
---
|
|
||||||
title: "Installation d'un serveur DHCP et DNS"
|
|
||||||
date: 2018-11-15
|
|
||||||
categories: ["Installations", "TD machine"]
|
|
||||||
---
|
|
||||||
|
|
||||||
Avant toutes choses, j'ai modifié mon réseau virtuel pour ne plus avoir de DHCP.
|
|
||||||
J'ai ensuite commencé l'installation d'une nouvelle machine virtuelle. Comme je
|
|
||||||
n'ai plus de DHCP sur le réseau, j'ai mis une adresse IPv4 manuelle :
|
|
||||||
|
|
||||||
```
|
|
||||||
ip : 192.168.122.254/24
|
|
||||||
passerelle : 192.168.122.1
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation d'un serveur DHCP
|
|
||||||
|
|
||||||
Le serveur DHCP le plus utilisé est `isc-dhcp-server` il suffit de l'installer
|
|
||||||
avec la commande :
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# apt install isc-dhcp-server
|
|
||||||
```
|
|
||||||
|
|
||||||
Il existe aussi une version avec le support de LDAP en tant que backend, mais
|
|
||||||
nous verrons celà plus tard.
|
|
||||||
|
|
||||||
### Configuration
|
|
||||||
|
|
||||||
La configuration du serveur se fait dans le fichier `/etc/dhcp/dhcpd.conf`. Elle
|
|
||||||
est succinte et rapide à mettre en place
|
|
||||||
|
|
||||||
```
|
|
||||||
# option definitions common to all supported networks...
|
|
||||||
option domain-name "u-bordeaux.com";
|
|
||||||
option domain-name-servers 192.168.122.1;
|
|
||||||
|
|
||||||
default-lease-time 3600;
|
|
||||||
max-lease-time 7200;
|
|
||||||
|
|
||||||
ddns-update-style none;
|
|
||||||
|
|
||||||
# Our subnet definition
|
|
||||||
subnet 192.168.122.0 netmask 255.255.255.0 {
|
|
||||||
range 192.168.122.100 192.168.122.120;
|
|
||||||
option routers 192.168.122.1;
|
|
||||||
}
|
|
||||||
|
|
||||||
# The only dhcp server in our network
|
|
||||||
authoritative;
|
|
||||||
```
|
|
||||||
|
|
||||||
## DNS
|
|
||||||
|
|
||||||
Le paquet à instller est `bind9` avec la commande
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# apt install bind9
|
|
||||||
```
|
|
||||||
|
|
||||||
Le fichier de configurion est situé dans le répertoire `/etc/bind/named.conf`
|
|
||||||
|
|
||||||
### Configuration
|
|
||||||
|
|
||||||
J'ai choisis de séparer les fihiers de zone et de les mettres dans une dossier
|
|
||||||
`zone` dans le dossier de configuration de bind.
|
|
||||||
|
|
||||||
Le fichier `named.conf`
|
|
||||||
|
|
||||||
```
|
|
||||||
// Include options
|
|
||||||
include "/etc/bind/named.conf.options";
|
|
||||||
include "/etc/bind/named.conf.default-zones";
|
|
||||||
zone "u-bordeaux.fr" {
|
|
||||||
type master;
|
|
||||||
file "/etc/bind/zones/db.u-bordeaux.fr.zone";
|
|
||||||
allow-update { key rndc-key; };
|
|
||||||
};
|
|
||||||
zone "122.168.192.in-addr.arpa" {
|
|
||||||
type master;
|
|
||||||
file "/etc/bind/zones/inv.db.u-bordeaux.fr.zone";
|
|
||||||
allow-update { key rndc.key; };
|
|
||||||
};
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Et les fichiers de zones, en premier la zone "normale puis la zone inverse
|
|
||||||
|
|
||||||
```
|
|
||||||
$TTL 3600
|
|
||||||
@ IN SOA u-bordeaux.fr. root.u-borderaux.fr. (
|
|
||||||
2007010401 ; Serial
|
|
||||||
3600 ; Refresh [1h]
|
|
||||||
600 ; Retry [10m]
|
|
||||||
86400 ; Expire [1d]
|
|
||||||
600 ) ; Negative Cache TTL [1h]
|
|
||||||
;
|
|
||||||
@ IN NS ns
|
|
||||||
ns IN A 192.168.122.254
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
$TTL 604800
|
|
||||||
@ IN SOA u-bordeaux.com admin.u-bordeaux.fr (
|
|
||||||
1 ; Serial
|
|
||||||
604800 ; Refresh
|
|
||||||
86400 ; Retry
|
|
||||||
2419200 ; Expire
|
|
||||||
604800 ) ; Negative Cache TTL
|
|
||||||
;
|
|
||||||
@ IN NS localhost. ; delete this line
|
|
||||||
254 IN PTR ns.u-bordeaux.fr
|
|
||||||
```
|
|
||||||
|
|
||||||
## Interfacer DHCP et DNS
|
|
||||||
|
|
||||||
Il s'agit maintenant de permettre la mise jour du serveur DNS avec
|
|
|
@ -23,13 +23,13 @@ l'exécution de programmes pour l'utilisateur final :
|
||||||
- accès mémoire
|
- accès mémoire
|
||||||
- accès réseau
|
- accès réseau
|
||||||
|
|
||||||
## POSIX et IEEE
|
## POSIX et IEE
|
||||||
|
|
||||||
La norme POSIX, standard IEEE, définie les interfaces utilisateurs et
|
La norme POSIX, standard IEEE, définie les interfaces utilisateurs et
|
||||||
logiciels, la ligne de commande standard et son interface de scripts, les
|
logiciels, la ligne de commande standard et son interface de scripts, les
|
||||||
entrées / sorties de base. les attributs de fichiers (permissions)
|
entrées / sorties de base. les attributs de fichiers (permissions)
|
||||||
|
|
||||||
La norme SUS *Single Unix Specification* est une norme plus récente et moins
|
La norme SUS *Single Unie Specification* est une norme plus récente et moins
|
||||||
contraignante. elle est basée sur les travaux de l'IEEE et de l'Open Group.
|
contraignante. elle est basée sur les travaux de l'IEEE et de l'Open Group.
|
||||||
|
|
||||||
[SUS][https://fr.wikipedia.org/wiki/Single_UNIX_Specification] et
|
[SUS][https://fr.wikipedia.org/wiki/Single_UNIX_Specification] et
|
||||||
|
@ -41,7 +41,7 @@ LSB ou *Linux Standard Base* définie l'agencement général du système GNU / L
|
||||||
: librairies standard, commandes POSIX étendues, hiérarchie du système de
|
: librairies standard, commandes POSIX étendues, hiérarchie du système de
|
||||||
fichiers, les runlevels etc.
|
fichiers, les runlevels etc.
|
||||||
|
|
||||||
[LSB](https://fr.wikipedia.org/wiki/Linux_Standard_Base) sur Wikipédia.
|
[LSB][https://fr.wikipedia.org/wiki/Linux_Standard_Base] sur Wikipedia.
|
||||||
|
|
||||||
## Architecture des systèmes "modernes"
|
## Architecture des systèmes "modernes"
|
||||||
|
|
||||||
|
@ -51,8 +51,8 @@ Ils sont organisés en couches un peu à la façon du modèle OSI :
|
||||||
2. l'assemblage (assembleur)
|
2. l'assemblage (assembleur)
|
||||||
3. système (applications système)
|
3. système (applications système)
|
||||||
4. Application
|
4. Application
|
||||||
5. (couche N) Les applications / machines virtuelles (capables de traverser les
|
N. Les applications / machines virtuelles (capables de traverser les couches
|
||||||
couches pour atteindre le matériel)
|
pour atteindre le matériel)
|
||||||
|
|
||||||
Plus la couche est basse, plus la programmation est efficace du point de vue
|
Plus la couche est basse, plus la programmation est efficace du point de vue
|
||||||
des performances mais plus difficile est la portabilité (un code assembleurs et
|
des performances mais plus difficile est la portabilité (un code assembleurs et
|
||||||
|
|
|
@ -55,7 +55,7 @@ O APPEND | Écriture à la fin du fichier
|
||||||
|
|
||||||
#### mode
|
#### mode
|
||||||
|
|
||||||
C'est aussi un masquage de bits définissant le mode du fichier en cas de
|
C'est aussi un masquage de bits définissant le node du fichier en vas de
|
||||||
création :
|
création :
|
||||||
|
|
||||||
| mode | octal | utilisation |
|
| mode | octal | utilisation |
|
||||||
|
@ -69,9 +69,9 @@ création :
|
||||||
| S IWGRP | 00020 | Le groupe a le droit d'écrire |
|
| S IWGRP | 00020 | Le groupe a le droit d'écrire |
|
||||||
| S IXGRP | 00010 | Le groupe a le droit d'exécuter |
|
| S IXGRP | 00010 | Le groupe a le droit d'exécuter |
|
||||||
| S_IRWXO | 00007 | Le propriétaire a le droit de lire, écrire, exécuter |
|
| S_IRWXO | 00007 | Le propriétaire a le droit de lire, écrire, exécuter |
|
||||||
| S_IROTH | 00004 | Les autres ont le droit de lire |
|
| S_IROTH | 00004 | L’utilisateur a le droit de lire |
|
||||||
| S IWOTH | 00002 | Les autres onr le droit d'écrire |
|
| S IWOTH | 00002 | L'utilisateur a le droit d'écrire |
|
||||||
| S IXOTH | 00001 | Les autres ont le droit d'exécuter |
|
| S IXOTH | 00001 | L'utilisateur a le droit d'exécuter |
|
||||||
|
|
||||||
#### Exemple en C
|
#### Exemple en C
|
||||||
|
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
Before Width: | Height: | Size: 130 KiB |
File diff suppressed because it is too large
Load diff
Before Width: | Height: | Size: 91 KiB |
|
@ -1,274 +0,0 @@
|
||||||
---
|
|
||||||
title: "Les attributs de fichiers"
|
|
||||||
date: 2018-10-16
|
|
||||||
categories: ["Programmation système", "cours"]
|
|
||||||
tags: ["fichier", "i-node"]
|
|
||||||
---
|
|
||||||
|
|
||||||
Les attributs de fichiers représentent toutes les informations dont dispose le
|
|
||||||
système sur les fichiers et répertoires : propriétaire, groupe permissions,
|
|
||||||
taille, horodatage etc.
|
|
||||||
|
|
||||||
## Système de fichiers
|
|
||||||
|
|
||||||
Un système de fichiers (ou système de gestion des fichiers) représente la façon
|
|
||||||
de stocker les fichiers, leurs informations et les organiser et sur un support
|
|
||||||
physique de stockage de masse. Parmi les plus courant on peut citer :
|
|
||||||
|
|
||||||
- Ext4, système de fichier par défaut sur la plupart des installation
|
|
||||||
GNU/Linux
|
|
||||||
- NTFS, système de fichiers par défaut de Microsoft Windows
|
|
||||||
- YAFFS pour Android
|
|
||||||
- APFS pour les machines Apple (MacOS, iOS, et Apple TV)
|
|
||||||
- ZFS pour les Unix
|
|
||||||
|
|
||||||
C'est bien entendu une liste non exhaustive, on pourrait citer des système plus
|
|
||||||
ancien comme FAT, UFS, HFS etc. Ou d'autres spécifique comme CEPH (système de
|
|
||||||
fichiers pour clusters).
|
|
||||||
|
|
||||||
## Anatomie d'un stockage de masse
|
|
||||||
|
|
||||||
Dans les premiers secteurs d'un disque dur, on trouve la table de partitions
|
|
||||||
cartographiant le disque. Il en existe deux type principaux : BPT et MBR Du type
|
|
||||||
de MBR découlera le nombres de partitions : 4 pour MD-DOS et pas de limites pour
|
|
||||||
le GPT par exemple.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Gestion des fichiers dans le cas de la FAT
|
|
||||||
|
|
||||||
Le système de fichier FAT de Microsoft utilise le chainage de blocs : la table
|
|
||||||
d'allocation de fichiers contient l'adresse du premier bloc du fichiers. À la
|
|
||||||
fin de ce bloc, on obtient l'adresse du suivant. Avec ce système, la lecture
|
|
||||||
séquentielle est lente.
|
|
||||||
|
|
||||||
### Le cas le L'UFS
|
|
||||||
|
|
||||||
L'UFS pour *Unix File System* utilise, comme la plupart des systèmes de fichiers
|
|
||||||
moderne sous les systèmes Unix, utilise les i-nodes. Un numéro unique d'inode
|
|
||||||
est attribué à chaque fichier. Chaque fichier a un seul inode mais il peut avoir
|
|
||||||
plusieurs nom
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Un inode peut aussi contenir d'autres informations comme le créateurs, les accès
|
|
||||||
etc.
|
|
||||||
|
|
||||||
## Appels Systèmes
|
|
||||||
|
|
||||||
La lecture des attributs de fichiers se fait par un appel système `stat()`.
|
|
||||||
|
|
||||||
```c
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
int stat(const char *pathname, struct stat *statbuf);
|
|
||||||
```
|
|
||||||
|
|
||||||
Récupère les informations du fichiers pointé par `*pathname` et rempli la
|
|
||||||
structure `*statbuf`. En cas de succès renvoie 0 sinon -1 et positionne `errno`.
|
|
||||||
|
|
||||||
Il est aussi possible d'utiliser `fstat()`, variante de `stat()` mais utilisant
|
|
||||||
un descripteur de fichier.
|
|
||||||
|
|
||||||
```c
|
|
||||||
int fstat(int fd, struct stat *statbuf);
|
|
||||||
```
|
|
||||||
|
|
||||||
`lstat()` est utiliser dans le cas de lien symbolique, cet appel est utiliser
|
|
||||||
afin de récupérer les informations sur le lien lui-même et non le fichier
|
|
||||||
pointé.
|
|
||||||
|
|
||||||
```c
|
|
||||||
int lstat(const char *pathname, struct stat *statbuf);
|
|
||||||
```
|
|
||||||
|
|
||||||
### La structure stat
|
|
||||||
|
|
||||||
Voici les informations contenues dans la structure de type `stat`.
|
|
||||||
|
|
||||||
```c
|
|
||||||
struct stat {
|
|
||||||
dev_t st_dev; /* Périphérique */
|
|
||||||
ino_t st_ino; /* numéro d'inode */
|
|
||||||
mode_t st_mode; /* protection */
|
|
||||||
nlink_t st_nlink; /* nombres de lien physiques */
|
|
||||||
uid_t st_uid ; /* UID du propriétaire */
|
|
||||||
gui_t st_gid; /* UID du groupe */
|
|
||||||
dev_t st_rdev; /* type de périphérique */
|
|
||||||
off_t st_size; /* taille totale en octets */
|
|
||||||
blksize_t st_blksize; /* taille de bloc pou E/S */
|
|
||||||
blkcnt_t st_blocks; /* nombres de blocks de 512o alloués */
|
|
||||||
struct timespec st_atim; /* heure du dernier accès */
|
|
||||||
struct timespec st_mtim; /* heure de la dernière modification */
|
|
||||||
struct timespec st_ctim; /* heure du dernier changemet d'état */
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
`st_rdev`, `st_blksize`, et `st_blocks` ne sont pas requises par POSIX.1 mais
|
|
||||||
définies comme extensions dans SUS.
|
|
||||||
|
|
||||||
- `st_mode` : Permissions d’accès au fichier ainsi que le type de ce dernier
|
|
||||||
(répertoire, socket, fichier normal, etc.)
|
|
||||||
- `st_ino` :Numéro de référence du fichier (SUSv4), identifiant unique
|
|
||||||
d’accès au contenu du fichier, plus communément sous UNIX : numéro
|
|
||||||
d’i-inœud
|
|
||||||
- `st_dev` : Numéro du périphérique qui contient le système de fichier auquel
|
|
||||||
se rapporte le numéro d’i-inœud
|
|
||||||
- `st_nlink` : Nombre de liens physiques sur i-inœud (un fichier peut avoir
|
|
||||||
plusieurs noms). L’appel système `unlink()` décrémente cette valeur
|
|
||||||
jusqu'à 0 alors le fichier sera réellement supprimé.
|
|
||||||
- `st_size` : Taille du fichier mesurée en octets (uniquement utile pour les
|
|
||||||
fichiers normaux)
|
|
||||||
|
|
||||||
### tests sur les types de fichiers
|
|
||||||
|
|
||||||
Ces extraits de codes permettent de tester les types de fichiers. `statbuf`
|
|
||||||
étant le retour de `stat()` ou de ses dérivées.
|
|
||||||
|
|
||||||
```c
|
|
||||||
if (S_ISREG(statbuf.st_mode)) {
|
|
||||||
printf "Regular file";
|
|
||||||
}
|
|
||||||
if (S_ISDIR(statbuf.st_mode)) {
|
|
||||||
printf "Directory file";
|
|
||||||
}
|
|
||||||
if (S_ISCHR(statbuf.st_mode)) {
|
|
||||||
printf "Character special file";
|
|
||||||
}
|
|
||||||
if (S_ISBLK(statbuf.st_mode)) {
|
|
||||||
printf "Block special file";
|
|
||||||
}
|
|
||||||
if (S_ISFIFO(statbuf.st_mode)) {
|
|
||||||
printf "Pipe or Fifo";
|
|
||||||
}
|
|
||||||
if (S_ISLNK(statbuf.st_mode)) {
|
|
||||||
printf "Symbolic link";
|
|
||||||
}
|
|
||||||
if (S_ISSOCK(statbuf.st_mode)) {
|
|
||||||
printf "Socket";
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Exemple de code
|
|
||||||
|
|
||||||
```c
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
int i;
|
|
||||||
struct stat statbuf;
|
|
||||||
for (i = 1; i < argc; i++) {
|
|
||||||
printf("%s: ", argv[i]);
|
|
||||||
if (lstat(argv[i], &statbuf) < 0) {
|
|
||||||
perror("Unable to get stats");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (S_ISREG(statbuf.st_mode)) {
|
|
||||||
printf("regular\n");
|
|
||||||
}
|
|
||||||
else if (S_ISDIR(statbuf.st_mode)) {
|
|
||||||
printf("directory\n");
|
|
||||||
}
|
|
||||||
else if (S_ISCHR(statbuf.st_mode)) {
|
|
||||||
printf("character special\n");
|
|
||||||
}
|
|
||||||
else if (S_ISBLK(statbuf.st_mode)) {
|
|
||||||
printf("block special\n");
|
|
||||||
}
|
|
||||||
else if (S_ISFIFO(statbuf.st_mode)) {
|
|
||||||
printf("fifo\n");
|
|
||||||
}
|
|
||||||
else if (S_ISLNK(statbuf.st_mode)) {
|
|
||||||
printf("symbolic link\n");
|
|
||||||
}
|
|
||||||
else if (S_ISSOCK(statbuf.st_mode)) {
|
|
||||||
printf("socket\n");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf("*unknown*\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exit(EXIT_SUCCESS);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Exécution
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ ./stat-file /etc /etc/passwd /dev/null /dev/sda
|
|
||||||
/etc: directory
|
|
||||||
/etc/passwd: regular
|
|
||||||
/dev/null: character special
|
|
||||||
/dev/sda: block special
|
|
||||||
```
|
|
||||||
|
|
||||||
### Tests sur les permissions de fichiers
|
|
||||||
|
|
||||||
Les extraits de codes suivant permettent des tester les permissisons sur les
|
|
||||||
fichiers et répertoires.
|
|
||||||
|
|
||||||
```c
|
|
||||||
if (statbuf.st_mode & S_IRUSR) { printf "User can read"; }
|
|
||||||
if (statbuf.st_mode & S_IWUSR) { printf "User can write"; }
|
|
||||||
if (statbuf.st_mode & S_IXUSR) { printf "User can execute"; }
|
|
||||||
if (statbuf.st_mode & S_IRGRP) { printf "Group can read"; }
|
|
||||||
if (statbuf.st_mode & S_IWGRP) { printf "Group can write"; }
|
|
||||||
if (statbuf.st_mode & S_IXGRP) { printf "Group can execute"; }
|
|
||||||
if (statbuf.st_mode & S_IROTH) { printf "Others can read"; }
|
|
||||||
if (statbuf.st_mode & S_IWOTH) { printf "Others can write"; }
|
|
||||||
if (statbuf.st_mode & S_IXOTH) { printf "Others can execute";}
|
|
||||||
```
|
|
||||||
|
|
||||||
### changer les permissions sur un fichier
|
|
||||||
|
|
||||||
```c
|
|
||||||
#include <sys/stat.h>
|
|
||||||
int chmod(const char *pathname, mode_t mode);
|
|
||||||
```
|
|
||||||
|
|
||||||
Modifie les permissions du fichier référencé par `*pathname`
|
|
||||||
|
|
||||||
```c
|
|
||||||
in fchmod(int fd, mode_t mode);
|
|
||||||
```
|
|
||||||
|
|
||||||
Modifie les permissions tout comme `chmod()` mais prend un descripteur de
|
|
||||||
fichier en paramètre.
|
|
||||||
|
|
||||||
Dans les deux cas, `mode` est un masquage de bits avec les paramètres suivants :
|
|
||||||
|
|
||||||
| mode | octal | utilisation |
|
|
||||||
|---------|-------|--------------------------------------------------------
|
|
||||||
| S_IRWXU | 00700 | Le propriétaire a le droit de lire, écrire, exécuter |
|
|
||||||
| S_IRUSR | 00400 | L’utilisateur a le droit de lire |
|
|
||||||
| S IWUSR | 00200 | L'utilisateur a le droit d'écrire |
|
|
||||||
| S IXUSR | 00100 | L'utilisateur a le droit d'exécuter |
|
|
||||||
| S_IRWXG | 00070 | Le groupe a le droit de lire, écrire, exécuter |
|
|
||||||
| S_IRGRP | 00040 | Le groupe a le droit de lire |
|
|
||||||
| S IWGRP | 00020 | Le groupe a le droit d'écrire |
|
|
||||||
| S IXGRP | 00010 | Le groupe a le droit d'exécuter |
|
|
||||||
| S_IRWXO | 00007 | Le propriétaire a le droit de lire, écrire, exécuter |
|
|
||||||
| S_IROTH | 00004 | Les autres ont le droit de lire |
|
|
||||||
| S IWOTH | 00002 | Les autres onr le droit d'écrire |
|
|
||||||
| S IXOTH | 00001 | Les autres ont le droit d'exécuter |
|
|
||||||
| | | S_ISUID, S_ISGID, S_ISVTX, cf. man 2 chmod
|
|
||||||
|
|
||||||
En cas de succès, retourne 0, sinon -1 et positionne `errno`
|
|
||||||
|
|
||||||
### Modifier l'appartenance d'un fichier
|
|
||||||
|
|
||||||
```c
|
|
||||||
#include <unistd.h>
|
|
||||||
int chown(const char *path, uid_t owner, gid_t group);
|
|
||||||
```
|
|
||||||
|
|
||||||
Modifie l'appartenance d'un fichier pointé par `*path`. comme pour `stat()`, il
|
|
||||||
existe un variante avec un descripteur de fichiers : `fchown()` et une pour les
|
|
||||||
lien symboliques `lchmod()`.
|
|
||||||
|
|
||||||
En cas de succès, retourne 0, sinon -1 et positionne `errno`
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
date: "2018-09-03"
|
date: "2018-09-03"
|
||||||
categories: ["Réseau", "Cours"]
|
categories: ["Réseau", "Cours"]
|
||||||
title: "Réseau - Introduction"
|
title: "Réseaux - Introduction"
|
||||||
tags: ["OSI", "latence", "débit"]
|
tags: ["OSI", "latence", "débit"]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Architecture d'Internet"
|
title: "Architecture d'Internet"
|
||||||
date: 2018-10-10
|
date: 2018-10-10
|
||||||
categories: ["Réseau", "cours"]
|
categories: ["Réseaux", "cours"]
|
||||||
tags: ["Internet", "routage", "interconnexion", "FAI"]
|
tags: ["Internet", "routage", "interconnexion", "FAI"]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,238 +0,0 @@
|
||||||
---
|
|
||||||
title: "TDM : Authentification et mots de passes"
|
|
||||||
date: 2019-01-09
|
|
||||||
categories: ['Sécurité', 'TD machine']
|
|
||||||
tags : ['hash', 'MD5', 'mot de passe', 'kali']
|
|
||||||
---
|
|
||||||
|
|
||||||
Lors de ce TD nous utiliserons principalement **john the ripper**, un outil de
|
|
||||||
cassage de mots de passe. C'est un logiciel opensource (licence GPL V.2)
|
|
||||||
connaissant de base plusieurs algorithmes de hachages (MD4, MD5, SHA256,
|
|
||||||
Blowfish, NTLM etc). Il est de plus extensible par des plugins.
|
|
||||||
|
|
||||||
Il est disponible sur beaucoup de plates-formes (GNU/Linux, *BSD, Windows, BeOS
|
|
||||||
etc.). Pour l'installer sur Debian ( et ses dérivés comme Ubuntu) :
|
|
||||||
|
|
||||||
```
|
|
||||||
apt install john
|
|
||||||
```
|
|
||||||
|
|
||||||
## Utiliser john
|
|
||||||
|
|
||||||
John permet de fonctionner dans 3 modes différents : single, par dictionnaire et
|
|
||||||
incrémentale
|
|
||||||
|
|
||||||
**Single** : dans ce mode, `john` utilise le *hash* du login et éventuellement
|
|
||||||
des variantes de celui-ci.
|
|
||||||
|
|
||||||
**Dictionnaire** : `john` essaye un à un les mos de passes d'une liste établie
|
|
||||||
|
|
||||||
**Incrémentale** : aussi appelé *Bruteforce*, dans ce mode, `john` essaye un
|
|
||||||
ensemble de combinaisons composé d'une suite de caractères donnés.
|
|
||||||
|
|
||||||
### Le mode single
|
|
||||||
|
|
||||||
C'est le mode le plus rapide du logiciel, pour tester notre fichier de mot de
|
|
||||||
passe dans ce mode il suffit de faire :
|
|
||||||
|
|
||||||
```
|
|
||||||
john -single -format=raw-MD5 logins.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
Voici la sortie de la commande :
|
|
||||||
|
|
||||||
```
|
|
||||||
Created directory: /root/.john
|
|
||||||
Using default input encoding: UTF-8
|
|
||||||
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
|
|
||||||
Press 'q' or Ctrl-C to abort, almost any other key for status
|
|
||||||
AndyGollum (AndyGollum)
|
|
||||||
Warning: Only 18 candidates buffered for the current salt, minimum 24
|
|
||||||
needed for performance.
|
|
||||||
Almost done: Processing the remaining buffered candidate passwords, if any
|
|
||||||
Warning: Only 4 candidates buffered for the current salt, minimum 24
|
|
||||||
needed for performance.
|
|
||||||
1g 0:00:00:08 DONE (2019-01-09 23:14) 0.1142g/s 718.4p/s 718.4c/s 5031C/s indianaford1900..brucemclane1900
|
|
||||||
Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably
|
|
||||||
Session completed
|
|
||||||
```
|
|
||||||
|
|
||||||
`john` sauvegarde automatiquement **tous** les *hashes* qu'il retrouve dans sa
|
|
||||||
base de donnée qu'il stocke dans le fichier `~/.john/john.pot`. Il écrit aussi
|
|
||||||
un fichier journal afin de reprendre les opérations là où il les a arrêtées
|
|
||||||
(`~/.john/john.log`).
|
|
||||||
|
|
||||||
Il est possible de retrouver les mots de passes que `john` a trouvé avec la
|
|
||||||
commande :
|
|
||||||
|
|
||||||
```
|
|
||||||
john -show -format=raw-MD5 logins.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
Et le résultat :
|
|
||||||
|
|
||||||
```
|
|
||||||
Using default input encoding: UTF-8
|
|
||||||
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
|
|
||||||
Remaining 7 password hashes with no different salts
|
|
||||||
Proceeding with single, rules:Wordlist
|
|
||||||
Press 'q' or Ctrl-C to abort, almost any other key for status
|
|
||||||
Warning: Only 15 candidates buffered for the current salt, minimum 24
|
|
||||||
needed for performance.
|
|
||||||
0g 0:00:00:01 1/3 (2019-01-09 23:40) 0g/s 549.0p/s 549.0c/s 3843C/s Indianaforded..maximuscr0we
|
|
||||||
Almost done: Processing the remaining buffered candidate passwords, if any
|
|
||||||
Warning: Only 4 candidates buffered for the current salt, minimum 24
|
|
||||||
needed for performance.
|
|
||||||
Proceeding with wordlist:/usr/share/john/password.lst, rules:Wordlist
|
|
||||||
Proceeding with incremental:ASCII
|
|
||||||
pwnetp (SylvesterBalboa)
|
|
||||||
avnrflr (bt1)
|
|
||||||
2g 0:00:51:49 3/3 (2019-01-10 00:32) 0.000643g/s 4060Kp/s 4060Kc/s 23260KC/s aslepred2..aslepruma
|
|
||||||
```
|
|
||||||
|
|
||||||
### La recherche incrémentale
|
|
||||||
|
|
||||||
`john` va tester un ensemble de combinaisons, elle est communément appelée
|
|
||||||
*bruteforce*. Comme pour les précédentes commandes, il est **nécessaire** de
|
|
||||||
spécifier la fonction de hashage via le paramètre `-format=<hash>` :
|
|
||||||
|
|
||||||
```
|
|
||||||
john -format=raw-MD5 logins.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
Cette commande est bien plus longue que la précédente, les combinaisons à tester
|
|
||||||
étant très nombreuses. Voici le résultat :
|
|
||||||
|
|
||||||
```
|
|
||||||
Using default input encoding: UTF-8
|
|
||||||
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
|
|
||||||
Remaining 7 password hashes with no different salts
|
|
||||||
Proceeding with single, rules:Wordlist
|
|
||||||
Press 'q' or Ctrl-C to abort, almost any other key for status
|
|
||||||
Warning: Only 15 candidates buffered for the current salt, minimum 24
|
|
||||||
needed for performance.
|
|
||||||
0g 0:00:00:01 1/3 (2019-01-09 23:40) 0g/s 549.0p/s 549.0c/s 3843C/s Indianaforded..maximuscr0we
|
|
||||||
Almost done: Processing the remaining buffered candidate passwords, if any
|
|
||||||
Warning: Only 4 candidates buffered for the current salt, minimum 24
|
|
||||||
needed for performance.
|
|
||||||
Proceeding with wordlist:/usr/share/john/password.lst, rules:Wordlist
|
|
||||||
Proceeding with incremental:ASCII
|
|
||||||
pwnetp (SylvesterBalboa)
|
|
||||||
avnrflr (bt1)
|
|
||||||
2g 0:00:51:49 3/3 (2019-01-10 00:32) 0.000643g/s 4060Kp/s 4060Kc/s 23260KC/s aslepred2..aslepruma
|
|
||||||
```
|
|
||||||
|
|
||||||
La commande a été interrompue, mais a trouvé deux mots de passe. Il est possible
|
|
||||||
de la lancer en changeant le format par `raw-SHA256`.
|
|
||||||
|
|
||||||
### les dictionnaires
|
|
||||||
|
|
||||||
Plus rapide que la technique précédente, celle-ci est basée sur une liste
|
|
||||||
définie de mots de passe> Voici la commande :
|
|
||||||
|
|
||||||
```
|
|
||||||
john -wordlist=top500movies.txt -format=raw-MD5 logins.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
Et le résultat :
|
|
||||||
|
|
||||||
```
|
|
||||||
Using default input encoding: UTF-8
|
|
||||||
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
|
|
||||||
Remaining 5 password hashes with no different salts
|
|
||||||
Press 'q' or Ctrl-C to abort, almost any other key for status
|
|
||||||
Le silence des agneaux (MaximusCrowe)
|
|
||||||
1g 0:00:00:00 DONE (2019-01-10 00:34) 25.00g/s 13500p/s 13500c/s 63600C/s The King of New York..Indiana Jones et le temple maudit
|
|
||||||
Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably
|
|
||||||
Session completed
|
|
||||||
```
|
|
||||||
|
|
||||||
## Utilisation avancée de john
|
|
||||||
|
|
||||||
Nous avons vu ici trois utilisations de `john the ripper`, mais grâce à son
|
|
||||||
fichier de configuration situé dans le répertoire `/etc/john/john.conf`. En plus
|
|
||||||
des paramètres de bases du logiciel, il est possible de définit des règles plus
|
|
||||||
fine pour la recherche.
|
|
||||||
|
|
||||||
Ces règle sont définie dans des sections commençant par
|
|
||||||
|
|
||||||
```
|
|
||||||
[List.Rules.<name>]
|
|
||||||
```
|
|
||||||
|
|
||||||
Où `<name>` est la nom donné à notre liste. Suive ensuite un ensemble de règle
|
|
||||||
étendant les recherche de bases.
|
|
||||||
|
|
||||||
### Premier exemple : étendre notre dictionnaire
|
|
||||||
|
|
||||||
Il est courant qu'un utilisateur choisisse un mot courant, puis ajoute son année
|
|
||||||
de naissance puis un caractère spécial à la fin, composant ainsi un mot de passe
|
|
||||||
correspondant à la politique de sécurité de son organisation.
|
|
||||||
|
|
||||||
Nous allons donc étendre notre liste de mots en prenant en compte ceci. Parton
|
|
||||||
du principe que les personnes de l'organisation on moins de 40 ans, voici la
|
|
||||||
règle créée :
|
|
||||||
|
|
||||||
```
|
|
||||||
[List.Rules:MaListe]
|
|
||||||
$1$9$[7-9]$[0-9]$[.,;:@-_!#]
|
|
||||||
```
|
|
||||||
|
|
||||||
Le caractère `$` remplace un caractère et `[]` est là pour définir une plage de
|
|
||||||
caractères.
|
|
||||||
|
|
||||||
Pour l'appliquer modifions notre dernière commande `john` comme ceci :
|
|
||||||
|
|
||||||
```
|
|
||||||
john -format=raw-MD5 -wordlist=top500movies.txt -rules=MaListe logins.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
Using default input encoding: UTF-8
|
|
||||||
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
|
|
||||||
Remaining 4 password hashes with no different salts
|
|
||||||
Press 'q' or Ctrl-C to abort, almost any other key for status
|
|
||||||
Pulp Fiction1989! (IndianaFord)
|
|
||||||
Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably
|
|
||||||
Session completed
|
|
||||||
```
|
|
||||||
|
|
||||||
### Second exemple : modifier la recherche
|
|
||||||
|
|
||||||
Prenons le cas d'un utilisateur qui aurait changé les voyelles d'un mot par des
|
|
||||||
chiffres pour en faire un mot de passe. Il est possible via des règles de tester
|
|
||||||
ce cas de figure.
|
|
||||||
|
|
||||||
```
|
|
||||||
[List.Rules:Voyelles]
|
|
||||||
s?v[0-9]
|
|
||||||
```
|
|
||||||
|
|
||||||
- `s` : remplacer
|
|
||||||
- `?v` : rechercher la classe v : les voyelles
|
|
||||||
- `[0-9]` : remplacer par la classe d : un chiffre
|
|
||||||
|
|
||||||
Nous pouvons maintenant lancer la recherche avec la commande
|
|
||||||
|
|
||||||
```
|
|
||||||
john -format=raw-MD5 -wordlist=top500movies.txt -rules=Voyelles logins.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
Et voilà la sortie :
|
|
||||||
|
|
||||||
```
|
|
||||||
Using default input encoding: UTF-8
|
|
||||||
Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
|
|
||||||
Remaining 3 password hashes with no different salts
|
|
||||||
Press 'q' or Ctrl-C to abort, almost any other key for status
|
|
||||||
Sl1md1g M1ll11n11r1 (KevinSoze)
|
|
||||||
1g 0:00:00:00 DONE (2019-01-10 01:40) 16.66g/s 90000p/s 90000c/s 192800C/s Th9 Pl9y9r..9nd99n9 J9n9s 9t l9 t9mpl9 m99d9t
|
|
||||||
Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably
|
|
||||||
Session completed
|
|
||||||
```
|
|
||||||
|
|
||||||
## Bibliographie
|
|
||||||
|
|
||||||
- [Site officiel](https://www.openwall.com/john/) de John the Ripper
|
|
||||||
- [Page Wikipedia](https://fr.wikipedia.org/wiki/John_the_Ripper)
|
|
Loading…
Add table
Add a link
Reference in a new issue