15 octobre 2008

====== Gestion des utilisateurs ======

===== Général =====

Chaque utilisateur possède : 

  * identifiant
  * mot de passe
  * uid : numéro d'utilisateur
  * gid : numéro de groupe
  * un répertoire "home"
  * un shell de démarrage par défaut

Un groupe : 

  * un nom
  * un gid

Type d'utilisateurs : 

  * root (uid=0) : pas concerné par les droits
  * application (uid > 0, et < à 500)

par exemple : lp, apache, ... => limiter l'accès des applications sur les fichiers

Fichiers importants : 

  * /etc/login.defs : politique employée pour les mots de passe
  * /etc/nsswitch.conf : mode d'authentification qu'on va utiliser => utile pour LDAP ou NIS
  * /etc/passwd
  * /etc/group
  * /etc/shadow

===== Le fichier **/etc/passwd** =====

Il suit la chaîne suivante : 

<code bash>
login:passwd:pid:gid:gecos:homedir:shell
</code>

===== Le fichier **/etc/group** =====

Il suit la chaîne suivante :

<code bash>
group:passwd:gid:logins
</code>

===== Le fichier **/etc/shadow** =====

Il suit la chaîne suivante :

<code bash>
login:passwd:last:min:max:inactif:expire:drapeau
</code>

inactif : durée d'inactivité "légale" d'un compte

===== Gestion d'utilisateurs, groupe et mots de passe (mode assisté) =====

On fait les commandes suivantes :

  * useradd/del/mod
  * groupadd/del/mod
  * passwd

==== Utiles ====

Pour les utilisateurs :

  * id => uid, gid
  * su ou su -s => pour être root sans limite de temps

Sur les fichiers : 

  * chfn : changement gecos
  * chsf : changement de shell

  * makepasswd
  * openssl passwd
  * crypt

====== Compilation du noyau ======

===== Installation =====

Pour installer son noyau il faut : 

  * Récupérer le noyau : 
<code bash>
wget http://domaine.com/noyau.tar.gz
</code>
  * Se placer au bon endroit : 
<code bash>
cd /usr/src/linux2.X
</code>
  * tar xvf linux-2.X.YY.tar.gz
  * make config, puis question Y/m/n
    * Y : compiler le noyau
    * m : compiler en module
    * n : ne rien faire

===== Compilation du noyau =====

Compilation du noyau :

<code bash>
make clean && make dep && make image
</code>

Compilation des modules : 

<code bash>
make module
</code>

Installation : 

<code bash>
make install
</code>

====== Architecture de réseau sous UNIX ======

Uniquement pour des réseaux de confiance (pas très sécurisé, voire pas du tout).

===== Solution X-Window =====

L'objectif est de pourvoir à un ensemble d'utilisateur un accès réparti à leurs données.

Serveur (fichiers, etc.)

	Client X11

	+----+
	|    |-------- Client
       /|    |\
      /	|    | \
     /	+----+  \
  Client	Client
(Serveur X11)

Il y a deux façons pour se faire : 

  * terminal texte (getty)
  * terminaux graphiques : Terminaux X sur lequel un serveur X11 est installé, ce qui implique au minimum d'avoir une carte réseau

X11 est le protocole standard client/serveur (graphique) d'UNIX. Pour s'y connecter on utilisera les sockets (via TCP/IP).

X-Window s'est inspiré du travail de **Rank Xerox** nommé WIMP( = Window, Icons, Menus, Pointer).

Un des clients indispensable à un serveur X est le Window Manager qui gère le déplacement des fenêtres.

==== Contrôle d'accès ====

Deux méthodes :

  * Clé de session : cookie. On manipule alors les cookies avec la commande **xauth**
    * xauth list
    * xauth add
  * xhost : manipuler l'accès des machines sans les bons cookies

Semaine prochaine nous utiliserons la seconde méthode.

==== Démarrage d'un terminal X ====

  * Chargement des paramètres réseau puis récupération du système ( NFS + DHCP / BOOTP )
  * Démarrage du serveur X11

Côté client : XDMCP (X Display Manager Control Protocol).

XDMCP dispose de 2 modes : 
  * mode direct : X -query IP [:n°]
  * mode indirect : indirection via une autre machine

==== Avantages ====

  * Fiabilité (à part la carte réseau, rien de spécial pour les terminaux X
  * Confort de travail : juste l'écran, donc pas de bruits de la tour, etc.
  * Gestion centralisée des comptes (facile pour l'administrateur)
  * Administration aisée des TX

==== Inconvénients ====

  * Charge réseau : pénible si pas de bande passante suffisante
  * Charge processeur : si plus de 100 équipements qui tournent à plein régime sur une machine pas assez suffisante pour tenir la charge, il y aura des soucis de puissance
  * Pas de périphériques locaux : pas de clé USB, disquettes, etc.
  * Sécurité : ça marche sur réseau de confiance, mais pas évident à gérer. Les données passent en clair sur le réseau
  * Prix : pour le serveur ...

====== NFS / NIS : solution distribuée ======

===== Partage des fichiers avec NFS (Network File System) =====

Architecture client / serveur : le client veut les fichiers, le serveur les donne. Comme les fichiers sont un peu partout, chaque machine est à la fois client et serveur.

Le serveur __exporte__ des répertoires (/etc/export) vers machines nommées explicitement via leurs IPs.

Le client __monte__ ses répertoires (des sytèmes de fichiers de type NFS).

La sécurité vient seulement des identifiants ... donc si on accède avec une machine en tant que ROOT, NFS croit qu'on a tout les droits sur les fichiers.

===== NFS, côté serveur =====

3 démons permettent à NFS de tourner : 

  * rpc.nfsd : exportation de fichiers (requêtes de transfert de fichiers)
  * rpc.mountd : demande de montage des clients (requêtes de montage)
  * rpc.lockd : vérifier à ce que le fichier reste cohérent (verrouillage de fichiers lorsqu'ils sont utilisés)

NFS peut tourner en UDP ou en TCP.

La vérification des droits d'accès se fait en 2 temps : 

  * Le //portmapper// (démon portmap) associant un numéro de port à un service RPC (Remote Procedure Call) peut vérifier grâce à TCPwrappers que la machine a le droit d'accès
  * Si ce droit est acquis, mountd vérifie que l'entrée dans **/etc/exports** existe bien. Finalement nous travaillerons principalement dans ce fichiers pour l'ensemble des droits

==== 1 exemple de ligne dans /etc/exports ====

<code bash>
/CDROM-ro,access=130.79.92.15,anon=0
</code>

===== NFS, côté client =====

Commande manuelle : 
<code bash>
mount serveur:/rep /point_de_montage
</code>

==== Paramètres d'écriture dans NFS ====

Options pour l'export de fichiers : 

  * rsize,wsize : taille des blocs transmis par NFS. Exemple : 8ko (bon compromis)
  * hard (si prob réseau, l'appli fige) / soft ( = un timeout, si aucune réponse au bout d'un moment, il s'arrête et ne cherche pas à comprendre)

* * * *

Les démons côté client : 

  * rpc.lockd
  * rpc.statd : notifieur de redémarrage, il permet de restaurer les locks au redémarrage

L'authentification par uid => aucune sécurité

La commande **exportfs -a** permet de (ré)-exporter toutes les entrées de /etc/exports.

====== NIS, Network Information Service ======

L'objectif est de centraliser les mots de passe.

Tout est dans ce fichier : **/etc/nsswitch.conf** ; c'est l'ordre d'authentification.

NIS a été crée par SUN sous le nom de YellowPages mais BT (Britisch Telecom) avait déjà déposé le nom.

Authentification système à plat contravenant à LDAP.

Architecture client/serveur

Pour un accès rapide, la base de données est construite avec les fichiers ASCII du système : /etc/passwd et /etc/shadow.

Pour éviter un trou de sécurité, il faut bloquer l'accès à la commande permettant de voir les mots de passe chiffrés.

Les fichiers sont donc hachés au format [n|g]dbm (n = new, g = gnu).

Sur le serveur on va créer un domaine et des sous domaines, mais rien à voir avec les domaines réseaux DNS.

<code bash>
+::::::
</code>

Ce code dit d'aller sur le serveur NIS pour s'authentifier (centralisation de l'authentification)

NYS : corrige les failles de sécurité

NIS+ : adapté aux réseaux de grande taille

NIS côté serveur\\
démon ypserv\\
éventuellement utilisé conjointement avec TCPwrappers comme pour NFS

Sécurité : /var/yp/secuevents\\
Configuration : /etc/ypserv.conf\\
Commande pour le peuplement de la base : **ypinit-m** (prend les trois fichiers nécessaires, les prépare, les mélanges, etc et peuple la base de données)

ypinit utilise un makefile spécifique : /var/yp/Makefile

Modifier les mots de passe : yppasswd

===== NIS, côté client =====

Commande démon ypbind

Fichier de configuration : yp.conf (nom de domaine puis adresse IP du serveur)

Étapes supplémentaires : 

  * Modifier nsswitch.conf
  * Ajouter +:::::: à la fin de /etc/passwd

ypcat : affichages des tables en ASCII

ypmatch <table><nom> : toutes les infos de la personne

====== Système de fichiers ======

Microsoft : 

	FAT (File Allocation Table)

FAT12, FAT16, FAT32, VFAT

+------+---------+----------------------+----------------------+-------------------+------+------+-----+-----+
| Boot | options | Table d'allocation 1 | Table d'allocation 2 | Répertoire racine | Bloc | Bloc | ... | ... |
+------+---------+----------------------+----------------------+-------------------+------+------+-----+-----+

FAT16 : Adresse sur 1- bits => 2^16 clusters --> FAT dispose de 2 puissance 16 cases.

Taille de la FAT : 2x2^16 = 128Ko (va contenir une suite d'addresses)

===== Organisation du répertoire racine =====

+---+---+---+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
+---+---+---+---+---+---+---+---+

  1. Nom de fichier sur 8 octets
  2. Extension sur 3 octects
  3. Attributs sur 1 octets
  4. Réservé sur 10 octects
  5. Heure sur 2 octets
  6. Date sur 2 octets
  7. Adresse du premier bloc, sur 2 octets
  8. Taille, sur 4 octets

===== NTFS (New Technology File System) =====

Vient de NT3.1 en 1993

  * L'arborescence des répertoires est sous la forme d'un arbre B+ (permet de parcourir la base de données de manière plus rapide). Ce n'est pas pareil que l'arborescence d'un dossier par exemple, c'est très proche du côté base de données.
  * Information sur les clusters sont sotckés avec chaque cluster et non dans une FAT
  * Gestion de très gros fichiers
  * Utilisation d'une technologies ACL (Access Control List)
  * Système journalisé => on note tout dans un journal

Inconvénients :

  * Moins étendu que la FAT
  * Grosse perte de place

===== Tableau comparatif des différentes FAT et de NTFS =====

           +--------+----------+----------+---------------+
           | FAT 12 | FAT 16   | FAT 32   |      NTFS     |
+----------+--------+----------+----------+---------------+
| Taille   |        | 2Go (95) |          |               |
| max de   |  32 Mo |          |  4Go     |      16To     |
| fichiers |        | 4Go (NT) |          |               |
+----------+--------+----------+----------+---------------+
| Nombre   |        |          |          |               |
| max de   |  4086  |  65 536  |4 177 290 | 4 294 967 295 |
| fichiers |        |          |          |               |
+----------+--------+----------+----------+---------------+
| Taille 
| max 	   |  32 Mo |  2Go/4Go |   32Go(+)|    256 Tb     |
| volume
+----------+--------+----------+----------+---------------+
| Taille 
| max nom 
| de fichiers	8.3	8.3	8.3 ou 255	8.3 ou 255
+----------+--------+----------+----------+---------------+


===== Sous UNIX =====

+------+-------+-------+----------------------------+--------------------+------+-------+-----+-----+------+
| Boot | Super | Block | Informations d'allocations | Liste des i_noeuds | Bloc | Bloc2 | ... | ... | Bloc |
+------+-------+-------+----------------------------+--------------------+------+-------+-----+-----+------+

  * Super Block : Informations sur le FS lui - même (structures, dates de MàJ, etc.)
  * Informations d'allocations : Carte d'allocation des i-noeuds et des blocs
  * Liste des i_noeuds : description de fichiers physiques

==== Structure d'une inode ====

+----------+-----------+
| Mode     |  Proprio  |
+----------+-----------+
|   Taille en octets   |
+----------------------+
|       Dates          |
+----------+-----------+
| Groupe   |   Liens   +
+----------+-----------+
|   Taille en blocs    |
|    de 512 octets     |
+----------------------+
|      Flags           |
+----------------------+
|  Adresse en bloc de  |
|       données        |
+----------------------+

 sous EXT2 --> 15

=== Adressage en bloc de données ===

+-----------------------------+
| 3 Adresse direct            |
+-----------------------------+
| 7                           |
+-----------------------------+
| 17                          |
+-----------------------------+  Cette table x15
| 8                           |
+-----------------------------+
| Adressage simple indirection|
+-----------------------------+
| Table indirection           |
+-----------------------------+
| Triple indirection          |
+-----------------------------+

==== Histoire de SGF ====

  * Ext2 (système natif)
  * Ext3 (2001) Système journalisé + ext2
  * Ext4 (2006) Gestion de très gros disques et très peu de fragmentation
  * ReiserFS (2001) : le plus performant des systèmes de fichiers

==== Comparatif ====

<thead>
	<tr>
		<td></td>
		<td>Ext2</td>
		<td>Ext3</td>
		<td>Ext4</td>
		<td>ReiserFS</td>
	</tr>
</thead>
<tbody>
	<tr>
		<td>Taille max d'un fichier</td>
		<td>2To</td>
		<td>2To</td>
		<td>2To</td>
		<td>8To</td>
	</tr>
	<tr>
		<td>Nombre max de fichiers</td>
		<td>536 870 912</td>
		<td>idem</td>
		<td>? (trop grand)</td>
		<td>4294 967 293</td>
	</tr>
	<tr>
		<td>Taille max d'un volume</td>
		<td>4To</td>
		<td>4To</td>
		<td>1024^2 To</td>
		<td>16 To</td>
	</tr>

</tbody>

==== Les fichiers ====

  * Montage automatique : **/etc/fstab et /etc/mtab**
  * Montage manuel : 
<code bash>
mount de dir type options
</code>

dev: /dev/sdxy où x = lettre de l'alphabet du DD et y le numéro de partition dans la table de partition
dir: point de montage
type: ext2,vfat,...
options: ro, rw, uid, gid, defaults, ...

  * fsck : cohérence du FS
  * fdisk : partitionnement en ligne de commande
  * pour ext2 :
    * mke2fs : créatiopn du FS (formatage)
    * e2fsck : vérification et correction
    * dumpe2fs : affichage des paramètres
    * debugfs : déboguage manuel
    * tune2fs : réglages et configuration
  * lsattr / chattr : montre beaucoup d'attributs des fichiers (immuable [ni modifié], suppression sécurisée, etc.)
  * vmstat
  * free : mémoire
  * df -k : espaces disque

