cours0809/cours/S5A/Seance5-15102008

310 lines
8.4 KiB
Plaintext
Executable File

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