24.07.2013 Views

commande

commande

commande

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Hector FLORES<br />

2eme 2 Partie<br />

eme Partie


Menu K<br />

Raccourcis<br />

4 Bureaux virtuels<br />

BUREAU sous KDE<br />

Console


Unix et MS-Dos<br />

DosUnixCopieCOPY, CP- cpSuppressionDEL,REMOVE- rmD


Les <strong>commande</strong>s UNIX<br />

et les shells


• Définition<br />

Le Shell<br />

– Langage de <strong>commande</strong> (interprété), équivalent<br />

du command.com sous MS-DOS<br />

• Différents shells existent<br />

– Bourne shell (sh) : System V<br />

– C-shell (csh) : syntaxe proche de C<br />

– tcsh, zsh, bash, …


Ecriture d’un shell script<br />

• Fichier texte contenant des <strong>commande</strong>s<br />

exécutables<br />

• Donner le droit d’exécution à ce fichier<br />

• Exécuter en tapant : ./nom_fichier<br />

• Par défaut le fichier est exécuté par /bin/sh<br />

(Bourne Shell)<br />

• Il peut être exécuté par n'importe quel autre<br />

programme si il commence par une ligne spéciale:<br />

#!/bin/bash<br />

...<br />

Sera exécuté par le<br />

shell bash


Variables et Paramètres<br />

• Exécution en mode debug<br />

– sh -x nom_script<br />

• Un script peut définir des variables<br />

– définition : variable=valeur<br />

– utilisation : $variable<br />

• Les paramètres de la ligne de <strong>commande</strong> sont<br />

accessibles dans le script par $1, $2, ...<br />

– $# : nombre de paramètres<br />

• Une variable peut être lue au clavier par : read<br />

variable


if <strong>commande</strong><br />

then<br />

...<br />

else<br />

...<br />

fi<br />

Conditionnelle<br />

if cd backup<br />

then<br />

ls<br />

else<br />

echo backup n'existe pas !<br />

fi


La <strong>commande</strong> test<br />

• Test numérique<br />

– test X option Y<br />

– options :<br />

• -eq : égal<br />

• -ne : différent<br />

• -gt : supérieur<br />

• -ge : supérieur ou égal<br />

• -le : inférieur ou égal<br />

• Tests de chaînes<br />

– test X option Y<br />

– options :<br />

• = : égal<br />

• != : différent<br />

• Test sur fichier<br />

– test option fichier<br />

– options :<br />

• -s : existe et non vide<br />

• -d : est un répertoire<br />

• -f : fichier ordinaire<br />

• -w : droit d'écriture<br />

• -r : droit de lecture<br />

• -x : droit d'exécution


•<br />

for i in a b c d<br />

do<br />

echo i vaut $i<br />

done<br />

Boucle for<br />

•<br />

i vaut a<br />

i vaut b<br />

i vaut c<br />

i vaut d


Configuration du shell<br />

• Le shell est configuré par l'exécution de<br />

scripts Type de Shell Action<br />

Login interactif .bash_profile est exécuté<br />

Interactif .bashrc est exécuté<br />

Non interactif Le shell script demandé est exécuté<br />

/etc/profile contient les<strong>commande</strong>s qui doivent êtreobligatoirement exéctuées pour chaque login<br />

On ajoute fréquemment une <strong>commande</strong> à .bash_profile :<br />

source ~/.bashrc


Syntaxe générale<br />

• <strong>commande</strong> [options] paramètres<br />

• En général, les options sont précédées du<br />

symbole - et peuvent être groupées<br />

• ps -ae<br />

• Les paramètres précisent les fichiers concernés


Les options<br />

• Comparer les effets de :<br />

• ls<br />

• ls -l liste avec les attributs des fichiers<br />

• ls -a liste complète, y compris les fichiers cachés, qui<br />

commencent par un point<br />

• ls -la<br />

• ls -R liste "récursive" des contenus des sous-rép.<br />

• ls --help


Historique des <strong>commande</strong>s<br />

• les touches flèches haut et bas<br />

permettent de parcourir les dernières<br />

<strong>commande</strong>s de l'utilisateur<br />

– Elles sont stockées dans le répertoire<br />

personnel dans le fichier<br />

/home/utilsateur/.bash_history


Manipulation de fichiers<br />

• touch file1 file2<br />

• crée les 2 fichiers vides<br />

• Pour consulter un fichier texte,<br />

• <strong>commande</strong>s cat (texte court) ou less (texte long)<br />

• sous X-KDE<br />

• l'éditeur kedit est appelé quand on ouvre un fichier texte<br />

dans l'explorateur kfm<br />

• On peut aussi lancer Emacs


Gestion de fichiers (1)<br />

• cp (copy, copier fichiers et répertoires)<br />

– cp [option] source destination<br />

• copie d'un seul fichier, en précisant le chemin et le nom<br />

du fichier destination<br />

– cp [option] rep-source rep-cible<br />

• copie l'ensemble des fichiers dans le rép. spécifié, en<br />

gardant les noms


• Principales options :<br />

– -R recopie récursive, permet de copier toute une<br />

arborescence<br />

– -i avertit l'utilisateur de l'existence d'un fichier du même<br />

nom et lui demande s'il veut le remplacer<br />

– -p effectue une copie en gardant le propriétaire et le groupe<br />

d'origine<br />

– -v affiche en clair le nom des fichiers copiés


Gestion de fichiers<br />

• rm (remove, supprimer des fichiers)<br />

– rm [option] fichiers<br />

– L'option -i a été ajoutée d'office dans un alias pour demander<br />

confirmation à l'utilisateur, pour chaque fichier.<br />

• Options<br />

– -r permet de supprimer un répertoire et ses sous répertoires<br />

(attention TRÈS dangereux)<br />

– -f (force) permet de supprimer les fichiers protégés en écriture<br />

sans demande de confirmation. Cela permet d'inhiber l'option -i et<br />

de gagner du temps .. sauf dégâts !


Gestion de fichiers<br />

• mv (move, renommer ou déplacer)<br />

• mv [option] source destination<br />

– renomme simplement le fichier source, ce qui est un<br />

déplacement de nom ...<br />

– exemple : mv toto titi<br />

• mv [option] fichiers répertoire<br />

– déplace les fichiers sources dans le répertoire, en<br />

gardant les noms.<br />

– exemple : mv /home/jean/images/*.jpg /tmp/


• Principales options :<br />

– -b (b=backup) effectue une sauvegarde des fichiers avant de<br />

les déplacer. La copie porte le même nom suivi d'un tilde.<br />

– -i (i=interactive) demande confirmation avant pour chaque<br />

fichier.<br />

– -u (u=update) pour ne pas supprimer le fichier si sa date de<br />

modification est postérieure à celle du fichier remplaçant.


Gestion de processus<br />

• La <strong>commande</strong> ps permet de connaître les processus actifs à<br />

un moment donné, associés à un terminal et lancés par<br />

l'utilisateur courant.<br />

– Pour obtenir tous les processus, y compris ceux lancés<br />

par le système et connaître l'utilisateur associé à chacun<br />

on ajoute l'option aux.<br />

• kill num-pid, pour faire terminer un programme<br />

• kill -9 num-pid pour le "tuer", s'il ne répond plus (le<br />

programme, pas le système)


– Description des colonnes de la <strong>commande</strong> ps aux.<br />

• "USER" à quel utilisateur appartient le processus.<br />

• "PID" est le numéro qui identifie le processus<br />

• "%CPU" en % les ressources du microprocesseur<br />

utilisées par le processus.<br />

• "%MEM" en % les ressources en mémoire vive<br />

utilisées par le processus.<br />

• "RSS" mémoire réellement utilisée en ko par le<br />

processus.<br />

• "START" l'heure à laquelle le processus a été lancé.


Commandes de filtre<br />

• sort<br />

– tri<br />

• more, less<br />

– pagination<br />

• Grep, egrep<br />

– recherche d'une ligne dans un fichier texte<br />

• cut<br />

– effectue la projection d'un fichier selon une colonne<br />

• tr<br />

– effectue des remplacements de caractères<br />

• sed<br />

– effectue des modifications sur les ligne du fichier


4. Système de fichiers


Système de fichiers<br />

• Un système de fichiers est une façon d'organiser et de stocker<br />

une arborescence sur un support (disque, disquette, cd ...).<br />

Chaque OS propriétaire a développé sa propre organisation.<br />

• On peut faire cohabiter plusieurs systèmes dans des partitions<br />

d'un même disque.<br />

• Linux possède son système appelé ext2 mais peut en gérer<br />

d'autres. La liste en est donnée dans /proc/filesystems


• L'utilisateur peut donc accéder sous Linux à d'autres systèmes<br />

de fichiers, comme DOS, Vfat,..provenant d'un périphérique ou<br />

importé par le réseau.<br />

• Comme pour l'utilisateur tout est fichier, ces systèmes<br />

extérieurs doivent être intégrés dans l'arborescence Linux.<br />

• Le processus de montage, avec sa <strong>commande</strong> mount en est le<br />

moyen : il permet d'affecter ce système extérieur (partition sur<br />

un disque, disquette, cdrom, dk zip, répertoire réseau ...) à un<br />

répertoire créé pour cela dans d'arborescence. Il suffira ensuite<br />

de se déplacer à ce répertoire, appelé point de montage, en fait<br />

un répertoire "d'accrochage", pour accéder à ses fichiers (bien<br />

sûr, conformément aux permissions que possède l'utilisateur, )


Les différentes fichiers<br />

• fichiers normaux<br />

– texte : courrier, sources des programmes, scripts,<br />

configuration ...<br />

– exécutables : programmes en code binaire<br />

• fichiers répertoires<br />

– ce sont des fichiers conteneurs qui contiennent des<br />

références à d'autres fichiers.<br />

– véritable charpente de l'arborescence, ils permettent<br />

d'organiser les fichiers par catégories


• fichiers spéciaux<br />

– situés dans /dev, ce sont les points d'accès préparés par le<br />

système aux périphériques. Le montage va réaliser une<br />

correspondance de ces fichiers spéciaux vers leur répertoire<br />

"point de montage".<br />

– par exemple, le fichier /dev/hda permet l'accès et le<br />

chargement du 1er disque IDE<br />

• fichiers liens symboliques<br />

– Ce sont des fichiers qui ne contiennent qu'une référence (un<br />

pointeur) à un autre fichier.<br />

– Cela permet d'utiliser un même fichier sous plusieurs noms<br />

sans avoir à le dupliquer sur le disque.


Arborescence du système Linux<br />

• La racine est le sommet de la hiérarchie des répertoires.<br />

– Il s'agit d'une arborescence logique, indépendante de l'implantation<br />

physique des divers sous-répertoires, qui peut s'étendre sur plusieurs<br />

partitions incluses sur un ou plusieurs disques, et même sur des disques<br />

réseaux.<br />

– Sa structure est standard, avec des extensions imposées par les<br />

distributions.<br />

– Toute modification est de la compétence exclusive de l'administrateur, à<br />

l'exception des répertoires personnels situés dans /home.<br />

– Il est recommandé de respecter cette architecture standard.


Liste et rôle des répertoires principaux<br />

• / le répertoire racine<br />

– /bin les fichiers exécutables (en binaire) (initialisation du système + <strong>commande</strong>s<br />

"essentielles")<br />

– /boot le noyau vmlinuz et les fichiers de démarrage<br />

– /dev répertoire de fichiers spéciaux, qui servent de canaux de communication avec les<br />

périphériques (disques, adaptateur réseau, cartes son etc...)<br />

– /etc les fichiers de configuration du système et les principaux scripts de paramétrage<br />

– /etc/rc.d scripts de démarrage du système<br />

– /etc/X11 scripts de configuration du serveur X<br />

– /etc/sysconfig configuration des périphériques<br />

– /etc/cron description des tâches périodiques à effectuer<br />

– /etc/skel fichiers recopiés dans le rép. personnel à la création d'un utilisateur


– /home la racine des répertoires personnels des utilisateurs<br />

– /lib les bibliothèques et les modules du noyau<br />

– /mnt la racine des points de montage des systèmes de fichiers périphériques<br />

ou extérieurs (cd, disquette, nfs ..).<br />

– /opt lieu d'installation d'applications supplémentaires (comme starOffice,<br />

java ..)<br />

– /root répertoire personnel du super-utilisateur root<br />

– /sbin les fichiers exécutables pour l'administration du système<br />

– /tmp stockage des fichiers temporaires<br />

– /usr programmes accessibles à tout utilisateur; sa structure reproduit celle<br />

de la racine /<br />

– /var données variables liées à la machine (fichiers d'impression, traces de<br />

connexions http, smb .. dans /var/log)<br />

– /proc ce pseudo-répertoire contient une "image" du système


Droits des fichiers


Permissions d'accès aux fichiers<br />

• Tout fichier du système appartient à la fois à un<br />

utilisateur (son "propriétaire") et à un groupe.<br />

• Ainsi, pour chaque fichier le monde de ses<br />

utilisateurs potentiels est scindé en 3 catégories,<br />

nommées :<br />

– 1.u, l'utilisateur normal, son propriétaire, bien souvent son<br />

créateur, qui n'a pas pour autant tous les droits sur lui !<br />

– 2.g, son groupe, ensemble d'utilisateurs ayant parfois des<br />

"permissions" particulières.<br />

– 3.o, tous les (others) autres.


• Attention, l'utilisateur propriétaire et le groupe propriétaire du fichier<br />

peuvent être indépendants :<br />

– le groupe propriétaire n'est pas forcément le groupe primaire de<br />

l'utilisateur propriétaire,<br />

– et même, le propriétaire n'est pas forcément membre du groupe !<br />

– Mais (heureusement) une règle générale simple s'applique à la création<br />

de tout nouveau fichier (ou rép)<br />

– son propriétaire est l'utilisateur (humain ou système) qui l'a créé<br />

– son groupe est le groupe primaire de ce même utilisateur


• Droits d'accès des utilisateurs aux fichiers<br />

• Linux permet de spécifier les droits d'action sur un fichier, que peuvent<br />

exercer les utilisateurs des 3 catégories précédentes, ou plutôt les<br />

permissions que leurs accordent les fichiers et les répertoires.<br />

• Linux a repris les 3 protections d'UNIX sur les fichiers et les répertoires.<br />

Leur notation symbolique est :<br />

– 1.r, lecture<br />

– 2.w, écriture<br />

– 3.x, exécution<br />

• De façon générale, ces permissions sont consultables complètement par la<br />

<strong>commande</strong> : ls -l<br />

• Rappel : ll est un alias plus court, pour la <strong>commande</strong> ls -l


• Par exemple :<br />

• ll *.html<br />

• -rw-r--r-- 1 fleury fleury 1200 oct 19 12 : 39<br />

amoi.html<br />

• Description globale<br />

– On trouve de gauche à droite<br />

– le 1er caractère indique la nature du fichier<br />

– "-" fichier normal, "d" un fichier répertoire, "l" un lien.


• le système de droits est spécifié symboliquement par les 9 attributs suivants,<br />

correspondants aux 3 catégories du fichier.<br />

– ...|...|...<br />

– u g o<br />

• La section u fixe les droits accordés au propriétaire du fichier.<br />

• La section g fixe les droits accordés aux utilisateurs faisant partie du groupe auquel<br />

appartient le fichier.<br />

• La section o fixe les droits des autres utilisateurs.<br />

• nombre de liens sur le fichier<br />

– 1 signifie que le fichier n'a aucun lien qui pointe vers lui, 2 (ou plus) signifiant qu'il existe<br />

un lien (ou plus) vers lui.<br />

• le nom du propriétaire du fichier<br />

• le nom du groupe propriétaire<br />

• la date de dernière modification<br />

• le nom complet du fichier


• Les permissions d'un fichier normal<br />

– Pour chaque fichier, les utilisateurs sont ainsi séparés en 3 catégories,<br />

le propriétaire, les membres du groupe et tous les autres.<br />

– Les permissions accordées par le fichier à ces catégories sont<br />

complètement indépendantes mais leur signification est la même.<br />

– Vis à vis de chacune de ces 3 catégories, on trouve dans l'ordre :<br />

• le droit de lecture , afficher son contenu --> "r" si permis , "-" si refusé<br />

• le droit d'écriture , modifier son contenu --> "w" si permis , "-" si refusé<br />

• le droit d'exécution , pour un fichier script ou binaire --> "x" si permis , "-<br />

" si refusé


• Exemples :<br />

– Le fichier de démarrage /etc/rc.d/rc.sysinit possède les droits rwx r-x<br />

r-x<br />

– Tous les utilisateurs ont donc le droit de lire et d'exécuter ce fichier (ce<br />

qui est à éviter); seul root peut le modifier<br />

– La table de montage /etc/fstab : rw-r--r-- peut être lu par tous, modifiée<br />

uniquement par root<br />

• Afficher toutes les infos sur un fichier<br />

• La <strong>commande</strong> stat permet d'obtenir une information plus<br />

poussée sur un fichier.<br />

• Exemple : stat /etc/passwd


• Les permissions des répertoires<br />

– Pour les fichiers de type répertoire, la signification des attributs est différente de<br />

celle d'un fichier normal.<br />

– Mais elle est toujours identique pour les 3 catégories d'utilisateurs du répertoire.<br />

– La présence d'un tiret "-" signifie toujours l'absence de droit<br />

• r : lire le contenu, droit d'afficher la liste des fichiers ( avec ls ou dir)<br />

• w : modifier le contenu : droits d'ajouter et de supprimer des fichiers (avec cp, mv,<br />

rm)<br />

• x : droit d'accéder aux fichiers du répertoire et de se déplacer à l'intérieur (avec cd)<br />

– En général, si on attribue w, il faut attribuer aussi x sur un répertoire.<br />

• Exemples :<br />

– Passer les <strong>commande</strong>s cd / puis ls -l, pour lister les répertoires situés à la racine.<br />

– A qui appartiennent-ils ? Un user quelconque peut-il y créer des sous-répertoire<br />

?<br />

– Commenter les 2 cas particuliers /root et /tmp


Changements des droits<br />

• De façon générale, l'utilisateur qui crée un fichier en<br />

devient le propriétaire, et le groupe auquel l'utilisateur<br />

appartient (au moment de la création) devient le groupe<br />

du fichier.<br />

– Mais les droits accordés au proprio, au groupe et aux autres dépend<br />

du processus qui a créé le fichier.<br />

– D'autre part l'administrateur peut être amené à effectuer des<br />

changement de propriété (par exemple pour permettre un travail en<br />

groupe) et des changements de droits sur des ensembles de fichiers<br />

et de répertoires , les étendre ou les restreindre.


• Changer le propriétaire d'un ensemble de fichiers ou de rép<br />

• chown [-R] new-user arborescence<br />

• L'option -R (récursif) permet d'agir sur l'ensemble des sous-répertoires.<br />

• Exemple : chown stage4 /home/stage1/*<br />

• Changer le groupe propriétaire<br />

• Ceci doit être effectué par root ou le propriétaire, à condition que celui-ci soit membre du<br />

nouveau groupe.<br />

• chgrp new-groupe fichiers<br />

• chgrp stage4 /home/stage1/*<br />

• changer les 2 en même temps<br />

• chown new-user.new-groupe fichiers<br />

• change l'user et le groupe des fichiers chown new-user.fichiers<br />

• dans ce cas, le groupe est le groupe primaire du nouveau propriétaire.


• Changer les permissions sur les fichiers(effectué par root ou le propriétaire)<br />

– chmod droits fichiers<br />

– La <strong>commande</strong> chmod (change mode, change le "mode" des fichiers) peut s'écrire de<br />

plusieurs façons équivalentes. L'attribut droits permet de calculer les nouvelles<br />

permissions.<br />

– Celles-ci peuvent s'obtenir de façon relative, par ajout ou retrait par rapports aux droits<br />

existants ou bien de façon absolue, en fixant les nouveaux droits (qui remplacent les<br />

anciens).<br />

• Ajout, retrait ou fixation des permissions<br />

– Pour chaque fichier, on désigne par :<br />

• u, g et o les 3 catégories d'utilisateurs (user, group, other) plus a (=all) désignant tous<br />

• r,w,x les 3 attributs de ce fichier pour chaque catégorie.<br />

• + - = l'action d'ajouter, de retirer ou de fixer un droit s'appliquant à une catégorie<br />

• les changements sont alors de la forme "qui comment quoi" notés : [u g o a] [+ - =] [r w x]<br />

• par exemple chmod u+x fichier signifie "ajouter le droit d'exécution au propriétaire du fichier"


• Notation relative (aux droits existants)<br />

– chmod [-R] fichiers<br />

– L'option -R (récursif) permet de modifier les permissions de tous les sousrépertoires.<br />

– exemple : chmod [-R] go-rwx /home/toto enlève tous les permissions d'accès<br />

des fichiers du rép. personnel de toto (et des sous-rép.), à tous sauf au<br />

propriétaire, c'est-à-dire toto.<br />

• Notation absolue<br />

– Pour chaque groupe, elle permet de fixer les nouveaux droits qui remplacent les<br />

anciens. Si une catégorie n'est pas présente, ses anciens droits s'appliquent.<br />

– chmod u=rwx,g=rw,o=r fichiers remplace les permissions précédentes des<br />

fichiers, en les fixant à -rwxrw-r--<br />

– Attention : aucun espace dans la liste des droits, pas même autour des<br />

éventuelles virgules<br />

– chmod u=rwx,g=r fichiers fixe les permissions à -rwxr--??? en ne changeant<br />

pas les permissions précédentes du groupe other<br />

– chmod u=rwx,g=r,o= fichiers fixe les permissions à -rwxr-----


Travail sous la fenêtre de<br />

<strong>commande</strong>s


Le shell<br />

• Un interpréteur de <strong>commande</strong>s (le "shell", la coquille qui entoure le<br />

"noyau" du système) est un programme qui sert d'intermédiaire entre<br />

l'utilisateur et le système d'exploitation.<br />

• Sa tâche essentielle est l'exécution de programmes.<br />

• Pour cela, il effectue (en boucle infinie) :<br />

– la lecture d'une ligne<br />

– sa compréhension comme une demande d'exécution d'un programme avec<br />

d'éventuels paramètres.<br />

– le lancement de ce programme avec passage des paramètres<br />

– d'éventuelles redirections d'entrées-sorties<br />

– les exécutions de scripts (fichiers de <strong>commande</strong>s)


• Démarrage du shell<br />

– Lors de la création de son compte, un utilisateur est associé à un type de shell<br />

– Lire le fichier /etc/passwd : le dernier champ contient le nom du fichier exécutable (shell par défaut)<br />

/bin/bash<br />

• Le shell associé est ainsi lancé automatiquement dès la saisie du login utilisateur.<br />

• Il poursuit sa configuration en exécutant les scripts "profils"<br />

• Enfin, il affiche le prompt et se met en attente de la lecture d'une <strong>commande</strong>.<br />

• Jusqu'à la <strong>commande</strong> exit, pour quitter le shell (ce qui équivaut à se déconnecter (logout))<br />

– 1. /etc/profile communs à tous les users y compris root<br />

– Notamment, on y trouve la définition du prompt<br />

– 2. le fichier $HOME/.bash_profile, s'il existe (sinon le fichier $HOME/.bash_login)<br />

– 3. /etc/bashrc définition des alias globaux<br />

– 4. $HOME/.bashrc, s'il existe


• Personnalisation des <strong>commande</strong>s bash<br />

• /etc/bashrc est le dernier script d'initialisation du shell bash.<br />

• Il contient des alias redéfinissables ou à compléter par l'utilisateur root.<br />

• Il suffit donc d'éditer et de compléter le fichier par défaut<br />

• par exemple :<br />

– # vi /etc/bashrc (ou bien sûr utiliser l'éditeur de Midnigth Commander, lancer mc )<br />

• alias l=""ls --color=tty -F -b -T 0"<br />

• alias ll="l -l"<br />

• alias lp="ll | more"<br />

• alias la="ll -a"<br />

• alias x="startx"<br />

• alias m="mc -c"<br />

– :wq (pour écrire dans le fichier et quitter vi)<br />

– Puis se reloguer (exit) pour relancer l'interpréteur du shell.


• Les variables d'environnement système<br />

– La liste en est accessible par la <strong>commande</strong> : env<br />

– La <strong>commande</strong> echo permet d'obtenir la valeur d'une telle variable.<br />

– Par exemple : echo $PATH, echo $USER<br />

– Ajout d'un nouveau chemin : attention à ne pas écraser la liste des chemins<br />

existants (PATH en majuscules !<br />

– PATH="$PATH:/home/jean" pour ajouter le chemin rép.personnel<br />

• (Attention ! pas d'espace autour du symbole =)<br />

– PATH="$PATH :./" pour ajouter le répertoire courant (non présent par<br />

défaut)<br />

– La variable $HOME contient le chemin du rép. personnel.<br />

– La <strong>commande</strong> cd $HOME est abrégée en cd<br />

– La variable $USER contient le nom de l'utilisateur<br />

– $SHLVL donne le niveau du shell courant


• Facilités de saisie des <strong>commande</strong>s<br />

– Comme les <strong>commande</strong>s Unix sont souvent longues à saisir, diverses facilités<br />

sont offertes :<br />

• Historique des <strong>commande</strong>s<br />

– Cette liste numérotée est accessible en tapant history | less<br />

– Pour relancer la <strong>commande</strong> n, saisir (sans espace)!n<br />

– On peut aussi parcourir les précédentes lignes de <strong>commande</strong>s avec les flèches<br />

(comme doskey) et les éditer.<br />

– Ceci permet très facilement de reprendre une précédente <strong>commande</strong> pour<br />

l'éditer et la modifier.<br />

• Le clic-droit<br />

– Dans un terminal console, sélectionner un texte puis cliquer-droit dessus,<br />

recopie ce texte sur la ligne de <strong>commande</strong><br />

– Ceci est particulièrement utile pour lancer des <strong>commande</strong>s.


• L'opérateur tilde<br />

– Le caractère tilde ~ (alt 126) seul renvoie au rép. personnel de l'utilisateur actuel.<br />

– Si l'user actif est toto, chaque occurrence du caractère ~ est remplacé par le chemin<br />

/home/toto<br />

– Le tilde ~ suivi d'un nom d'user, par ex jean, renvoie au rép. personnel de jean, c-à-d<br />

/home/jean<br />

– Ainsi la <strong>commande</strong> de toto : cd ~stagiaire3 le déplace dans le rép. /home/stagiaire3,<br />

mais ce qu'il pouvoir y faire dépend de ses permissions (est-il un "other" ? un membre<br />

du groupe ?)<br />

• Très utile pour l'administrateur root qui peut ainsi aller rapidement voir le rép. perso de toto<br />

et faire le "ménage"<br />

• cd ~toto<br />

• rm -r photos


• Compléter une <strong>commande</strong><br />

– Lorsqu'on tape une <strong>commande</strong> en ligne la touche TAB, l'interpréteur<br />

cherche à compléter le nom du fichier.<br />

• home/toto ]$ less /etc/fs TAB<br />

– S'il y a plusieurs propositions, il y a attente d'un complément d'info de la<br />

part de l'utilisateur (avec un "tut").<br />

– Un autre TAB et l'interpréteur affiche toutes les possibilités ou en indique le<br />

nombre, s'il y en a beaucoup !


• Les méta-caractères de la ligne de <strong>commande</strong><br />

– Travailler avec le shell nécessite souvent de manipuler des ensembles de fichiers. L'utilisation de<br />

caractères spéciaux (appelés aussi méta-caractères) dans les noms de fichiers, permet de générer des<br />

modèles pour désigner ces ensembles.<br />

– Il existe trois constructeurs de modèles *, ? et [].<br />

• Modèle Signification<br />

• * remplace une chaine de longueur qcq, même vide<br />

• ? remplace un seul caractère qcq<br />

• [ ] un caractère qcq de la liste ou de l'intervalle<br />

• [^ ] n'importe quel caractère sauf ceux de la liste<br />

– Attention ! en raison de certaines ressemblances, ne pas confondre ces constructeurs d'ensembles de<br />

fichiers avec les expressions rationnelles


• Un modèle de la forme X*Y où X et Y sont 2 chaînes quelconques, éventuellement<br />

vides, désigne l'ensemble des noms de fichiers de la forme XZY où Z est une chaîne<br />

quelconque elle aussi éventuellement vide.<br />

• ? remplace un et un seul caractère<br />

• Exemples<br />

• ll /*/*.d tous les fichiers (et rép) d'un sous-rép de / qui se<br />

terminent par .d<br />

• ll -d /home/* tous les sous-répertoires de /home<br />

• rm * attention ! <strong>commande</strong> dangereuse, supprime tout le rép courant !<br />

• cp *.? /home/toto<br />

• cp /home/stage? /root/tmp<br />

• Le modèle [] permet de sélectionner un élément de la liste ou de l'intervalle spécifié.


• Le séparateur de la liste est l'espace. Aucun espace ne doit être mis au début ou à la fin entre [ ]<br />

– Plus précisément, un modèle de la forme X [abc...z ]Y où X et Y peuvent être vides,<br />

désigne l'ensemble des noms de fichiers suivants: XaY, XbY ... XzY.<br />

– Dans le cas où l'ensemble des caractères abc ...z forment une série ordonnée, on peut<br />

utiliser la notation intervalle a-z.<br />

– On peut mélanger les deux notations, comme dans [a-z].[0-9], ensemble des fichiers a.0,<br />

a.1, .., b.0 b.1 etc ...<br />

• Quelques exemples :<br />

– ll a*<br />

– ll [a-d A-D]* liste les fichiers du rép. courant dont le nom commence par a, b, c ou d<br />

minuscule ou majuscule (y compris les sous-rép.)<br />

– cp ventes1[00-50].xls /home/toto/bilan copie tous les fichiers ventes100.xls jusqu'à<br />

ventes150.xls<br />

– lpr ~toto/formation/plan[93 94 77].html imprime les 3 fichiers plan93.html,<br />

plan94.html, ..


• Analyse de la ligne de <strong>commande</strong><br />

• Valeur de retour d'une <strong>commande</strong><br />

– Chaque <strong>commande</strong> transmet au programme appelant un code, appelée valeur de retour<br />

(exit status) qui stipule la manière dont son exécution s'est déroulée.<br />

– Par convention du shell BASH, la valeur de retour est toujours 0 si la <strong>commande</strong> s'est<br />

déroulée correctement, sans erreur (attention, c'est l'inverse du langage C !)<br />

– Une valeur de retour différente de 0 signale donc une erreur, qui peut être éventuellement<br />

analysée selon cette valeur.<br />

– Un variable système spéciale $? contient toujours la valeur de retour de la précédente<br />

<strong>commande</strong>. On peut afficher cette valeur avec la <strong>commande</strong> echo


• Enchainement des <strong>commande</strong>s<br />

– Habituellement, une ligne de <strong>commande</strong> saisie au prompt de la console ou bien écrite dans<br />

un script est une phrase composée de mots séparés par des espaces (ou des tabulations); le<br />

premier mot est considéré comme le nom d'une <strong>commande</strong> et le shell cherche à l'exécuter;<br />

les mots suivants sont des options ou paramètres de cette <strong>commande</strong>.<br />

– Pour inhiber cette interprétation des espaces, il faut entourer le groupe de mots de quotes<br />

ou de guillemets , ce groupe sera alors interprété comme un seul paramètre.<br />

– Exemple : recherche de la chaine jules toto (qui constitue un seul paramètre) sur les lignes<br />

de /etc/passwd (l'option -i pour s'affranchir de la casse)<br />

• grep -i "jules toto" /etc/passwd


• En général, on place une <strong>commande</strong> par ligne que ce soit en ligne de <strong>commande</strong> ou<br />

dans un script.<br />

• Le point-virgule ; a le rôle de séparateur de séquence inconditionnel.<br />

• Il permet ainsi d'écrire une séquence de plusieurs <strong>commande</strong>s sur une même ligne.<br />

• Toutes les <strong>commande</strong>s sont inconditionnellement exécutées (même si l'une d'entre<br />

elle provoque une erreur), et leur résultats respectifs sont envoyés sur la sortie<br />

standard, séparés par un retour à la ligne "\n".<br />

• On peut connaitre la valeur de retour de chacune en interrogeant la variable $?


• Enchainement conditionnels des <strong>commande</strong>s<br />

– Les séparateurs && et || sur la ligne de <strong>commande</strong> sont des séparateurs qui jouent les<br />

rôles d'opérateurs conditionnels, en ce sens que la 2ème <strong>commande</strong> sera exécutée en<br />

fonction du code de retour de la 1ère <strong>commande</strong>.<br />

– Dans <strong>commande</strong>1 && <strong>commande</strong>2, <strong>commande</strong>2 ne sera exécutée que si le code de retour<br />

de <strong>commande</strong>1 est 0 (exécution correcte)<br />

• Dans <strong>commande</strong>1 || <strong>commande</strong>2, <strong>commande</strong>2 ne sera exécutée que si le code de retour de<br />

<strong>commande</strong>1 est différent de 0 (exécution erronnée)<br />

• Exemples : trouver leur signification<br />

– cd ~/tmp || mkdir $HOME/tmp<br />

– extrait de /etc/rc.d/inet.d/inetd<br />

– [ -f /usr/sbin/inetd ] || exit 0


• Redirections des entrées-sorties<br />

• Toutes les <strong>commande</strong>s (du noyau, du shell et créées par le programmeur) sont dotées par le<br />

système de 3 canaux de communication :<br />

– entrée standard (stdin=standard input) pour lire des données,<br />

– la sortie standard (stdout) pour envoyer des résultats<br />

– et la sortie des erreurs (stderr).<br />

– Par défaut les canaux d'entrées et de sorties communiquent avec le clavier et l'écran : les<br />

<strong>commande</strong>s et les programmes qui ont besoin de données les attendent en provenance du<br />

clavier et expédient leurs résultats pour affichage sur le moniteur.<br />

– Il est possible de les détourner pour les rediriger vers des fichiers ou même vers les<br />

entrées-sorties d'autres <strong>commande</strong>s.<br />

– Les symboles utilisées sont :<br />

– < redirection de l'entrée standard à partir d'un fichier (et non depuis le clavier)<br />

– > redirection de la sortie standard en direction d'un fichier (et non vers l'écran clavier)<br />

• attention ! le fichier est créé .. et écrase sans préavis le fichier existant portant le même nom.


• >> redirection de la sortie standard à la fin du fichier s'il existe déjà<br />

• | (= alt 124) enchainement de <strong>commande</strong>s (appelé aussi tube ou pipe)<br />

• Tester<br />

– la sortie de la <strong>commande</strong> gauche est envoyée en entrée de la <strong>commande</strong> droite<br />

– Fréquemment utilisé avec less (ou more) pour examiner l'affichage sur le moniteur.<br />

– La valeur de retour est celle de la dernière <strong>commande</strong>.<br />

– ll --help | less


• Substitution de <strong>commande</strong><br />

• Ce procédé permet de substituer au texte d'une <strong>commande</strong> le résultat de son exécution qui<br />

est envoyé sur la sortie standard<br />

• La <strong>commande</strong> simple ou complexe (avec redirections, tubes ) doit être entourée de<br />

l''opérateur antiquote ` Alt-Gr7 ou être placée dans un parenthèsage précédé de $(...). D'une<br />

manière générale, il est recommandé d'entourer l'expression de ""<br />

• Exemple :<br />

– echo "`whoami`, nous sommes le `date` "<br />

– attention, pas d'espace entre $ et (<br />

– echo "$(whoami), nous sommes le $(date) "<br />

• Comparer :<br />

– pwd<br />

– echo pwd<br />

– echo `pwd`<br />

– echo "Il y a `ls | wc -l ` fichiers dans `pwd` "


• tr 'A-Z' 'a-z' traduit chaque caractère majuscule reçu sur son entrée en l'équivalent<br />

minuscule . Que réalise alors cette <strong>commande</strong> ?<br />

– echo -n "Votre mot de passe ?<br />

– read mdp<br />

– mdp = $(echo $mdp | tr 'A-Z' 'a-z')<br />

• Les substitutions de <strong>commande</strong> peuvent être imbriquées.<br />

• Attention à bien placer les " ".<br />

• Exemple :<br />

– echo "Nombre de fichiers du répertoire personnel : $( ls -l $( pwd ))" | less<br />

– Si on connait grep et cut, quelle est la signification de :<br />

– nom=toto<br />

– numero=$(cat /etc/passwd | grep -wi "^$nom" | cut -d: -f3)


• Rappel<br />

Lexique Commandes<br />

– Chercher de l'aide en ligne sur une <strong>commande</strong><br />

--help<br />

– Lire la page de manuel man <br />

• Classement par thème<br />

– -c : abandon de la <strong>commande</strong> (exemple factor)<br />

– -Fx : basculement (ou demande de nouveau login) sur<br />

la console ttyx (x=1 à 6)


• Renseignements utilisateurs et ressources<br />

– who : liste de tous les users connectés, leur console et l'heure de<br />

connexion<br />

– who-H affiche les utilisateurs connectés, le N° du terminal ttyx, et<br />

l'heure de connexion.<br />

– who am i : l'utilisateur aux <strong>commande</strong>s<br />

– pwd : chemin courant complet<br />

– w : abréviation de who<br />

– df points de montage des systèmes de fichiers et leur capacité<br />

disponible.<br />

– du capacité disque en Ko utilisé pour le répertoire spécifié et ses<br />

sous répertoires.


– set : liste des variables<br />

– export : listes des variables exportées, ie "globales" connues des autres<br />

processus gestion des utilisateurs et des permissions<br />

– adduser : <strong>commande</strong> root d'ajout d'un user<br />

– Id : numéro d'identification d'un user (le uid)<br />

– passwd : <strong>commande</strong> utilisateur de définition d'un (nouveau) mot de<br />

passe<br />

– chmod : changer les permissions sur les fichiers (et rép.) dont on est<br />

propriétaire (sinon : "Opération non permise")<br />

– chgrp<br />

– chown<br />

– chmod a+x : le propriétaire accorde des permissions d'exécution à<br />

tous<br />

– chmod 755 : le propriétaire impose un masque de permission 755, il<br />

est seul à posséder le droit d'écriture.


• contrôle de l'affichage des fichiers texte<br />

– more affiche à l'écran l'entrée standard à l'écran page par page.<br />

– less comme la <strong>commande</strong> more, et permettant des retours en arrière<br />

– cat contaténe les fichiers spécifiés sur la sortie standard<br />

– sort<br />

– cut affiche des colonnes extraites du fichier spécifié, vers la sortie standard<br />

– wc compte les lignes , mots et caractères<br />

• grep -n plantage faq-window95.help donne les num de lignes où se trouve le mot<br />

dans le(s) fichier(s)<br />

• grep -c print ~jean/perl/*.pl donne le nombre d'occurrences du mot dans chacun<br />

des fichiers.<br />

• grep --help pour voir les autres options<br />

• cd = cd ~ aller dans le rép. personnel de l'user<br />

• mkdir ~/ créer un sous-rép. dans le rép. perso de l'user


– cp --help aide sur la <strong>commande</strong> copy<br />

– cp -r /mnt/floppy/monCours /home/jean/ pour copier toute<br />

l'arborescence A:\monCours\ dans le rép. personnel<br />

– rm --help aide sur la <strong>commande</strong> remove (attention danger !)<br />

– rm -d ~toto/essai supprime le sous-rép. /home/toto/essai<br />

– find<br />

– whereis recherche des fichiers exécutables, les sources et les pages de<br />

manuel<br />

– which affiche les chemins d'accès d'une liste de <strong>commande</strong>s


• Processus<br />

– ps<br />

– pstree<br />

– kill<br />

• Archivage<br />

– tar<br />

– gzip<br />

• Suivi des connexions<br />

– tail -f /var/log/httpd/access_log<br />

– affiche les dernières requêtes au serveur Apache, "en direct"<br />

• Divers<br />

– cal calendrier mensuel ( cal 4 1970 ; cal 2000 | less )<br />

– date<br />

– bc calculatrice<br />

– factor


Top et kill


Vérifier la connexion PC/Unix<br />

• ping : <strong>commande</strong> permettant de vérifier<br />

qu'une machine est accessible sur le réseau<br />

– ping adresse_ip<br />

– ping nom_de machine (nécessite un DNS ou un<br />

fichier hosts)<br />

• Ouverture d'une session interactive<br />

– La <strong>commande</strong> telnet


Commandes de base<br />

• Le "prompt" du shell<br />

• Ou suis-je ? pwd<br />

– Print Working Directory<br />

• Qui suis-je ?<br />

– who am i, whoami, logname, id<br />

• Qui est avec moi ? who, w<br />

• Changer son mot de passe : passwd


Manipulation des fichiers<br />

• Lister les fichiers : ls<br />

• Créer un fichier vide : touch nom_fichier<br />

– Sur un fichier déjà existant, cette <strong>commande</strong> change la<br />

date et heure de dernière modification<br />

• Créer un fichier en saisissant le contenu<br />

directement sur la console<br />

– cat >nom_fichier<br />

Voici mon premier fichier<br />


Manipulation des fichiers<br />

– Copier de fichiers : cp<br />

– Afficher le contenu d'un fichier : cat<br />

– Détruire un fichier : rm<br />

– Créer un répertoire : mkdir<br />

– Changer de répertoire : cd<br />

– Copier un fichier d'un répertoire à l'autre<br />

– Afficher page à page : more<br />

– Désigner plusieurs fichiers dans la même <strong>commande</strong><br />

• Les caractères joker<br />

– Eviter les manipulations hasardeuses* : -i<br />

– Détruire un répertoire


Créer des alias de <strong>commande</strong><br />

• Pour émuler des <strong>commande</strong>s déjà connues<br />

– alias copy=cp<br />

• Pour positionner des options par défaut<br />

– alias rm='rm -i'<br />

• Supprimer un alias défini<br />

– unalias rm<br />

• Désactivation temporaire<br />

– \rm nom_fichier


Détails sur les <strong>commande</strong>s<br />

• man : l'indispensable manuel en ligne Unix<br />

• Ligne de <strong>commande</strong>s, options et paramètres<br />

– Options : modifient le fonctionnement par défaut de la<br />

<strong>commande</strong><br />

– Paramètres : définissent ce que traite la <strong>commande</strong><br />

• Manipulations avancées de la ligne de <strong>commande</strong><br />

– Succès ou échec d'une <strong>commande</strong> : $?<br />

– L'opérateur "Si Succès" : &&<br />

– L'opérateur "Si Echec" : ||


Décryptage d'une page man<br />

[bastide@moe bastide]$ man man<br />

NAME<br />

man - format and display the on-line manual pages<br />

manpath - determine user's search path for man pages<br />

SYNOPSIS<br />

man [-adfhkKtwW] [-m system] [-p string] [-C config_file]<br />

[-M path] [-P pager] [-S section_list] [section] name ...<br />

Le synopsis montre :<br />

- Des options facultatives sans paramètres complémentaires : [-adfhkKtwW]<br />

- Des options facultatives qui nécessitent un paramètre complémentaire : [-P pager]<br />

- Des paramètres optionnels : [section]<br />

- Un paramètre obligatoire : name<br />

- Le fait que le paramètre obligatoire peut être répété une ou plusieurs fois : name ...


Détails sur la <strong>commande</strong> man<br />

• Une des <strong>commande</strong>s les plus importantes du<br />

système Unix, puisqu’elle permet d’obtenir des<br />

renseignements sur toutes les autres <strong>commande</strong>s –<br />

parfois malheureusement en Anglais !<br />

Demander de l’aide sur la <strong>commande</strong> kill<br />

[bastide@moe bastide]$ man kill<br />

Idem, en cherchant uniquement dans la section 2 (appels systèmes)<br />

[bastide@moe bastide]$ man 2 kill<br />

Idem, en cherchant dans toutes les sections<br />

[bastide@moe bastide]$ man -a kill<br />

Idem, en spécifiant un programme de pagination (less par défaut)<br />

[bastide@moe bastide]$ man -a kill -P more<br />

La page de man(1) contient la ligne « see man.config(5) »<br />

Ceci indique que des indications complémentaires se trouvent dans la page<br />

man.config de la section 5 du manuel<br />

[bastide@moe bastide]$ man 5 man.config


Les sections du manuel<br />

• Le manuel Unix est divisé en un certain nombre de<br />

sections, le plus souvent :<br />

– 1 : Commandes Unix, appelables par les utilisateurs. La soussection<br />

1V correspond aux <strong>commande</strong>s relatives au System V, la<br />

sous-section 1M aux <strong>commande</strong>s réservées à l'administrateur<br />

système<br />

– 2 : Appels systèmes, utilisables en langage C<br />

– 3 : Sous-programmes et bibliothèques : diverses fonctions C ne<br />

faisant pas appel au noyau Unix<br />

– 4 : Fichiers spéciaux (périphériques)<br />

– 5 : Format de fichiers : structure des fichiers de configuration<br />

système (passwd, group, terminfo, ...)<br />

– 6 : Jeux<br />

– 7 : Divers<br />

– 8 : Commandes de maintenance du système


Imprimer une page du manuel<br />

Ne marche pas correctement - Que se passe-t-il ?<br />

[bastide@moe bastide]$ man 2 kill | lpr<br />

La solution est dans le manuel de man (à condition que l’imprimante soit<br />

bien configurée !<br />

[bastide@moe bastide]$ man 2 kill -t | lpr


Commandes complémentaires permettant d’obtenir des informations synthétiques<br />

• whatis (équivalent de man -f) : donne une description succinte d'une <strong>commande</strong> et indiques les pages ou l'on<br />

peut trouver sa description complète.<br />

[bastide@moe bastide]$ whatis man cp<br />

• apropos (équivalent de man -k) : donne la liste des pages ou l'on peut trouver des indications sur le mot-clé<br />

précisé.<br />

whatis et apropos<br />

[bastide@moe bastide]$ apropos ls


Entrées / Sorties standard<br />

• Entrée standard (stdin) : endroit où le programme<br />

lit ses données (en général le clavier)<br />

• Sortie standard (stdout) : endroit où le programme<br />

écrit ses résultats (en général l'écran)<br />

• Erreur standard (stderr) : endroit où le programme<br />

écrit ses messages d'erreur (en général l'écran


Redirection des Entrées/Sorties<br />

• Chacune de E/S d'un programme peut être<br />

redirigée séparément vers un fichier<br />

– lire les données d'entrée dans un fichier<br />

– Envoyer les résultats ou les erreurs dans un<br />

fichier


Caractères de redirection<br />

• Redirection de l'entrée standard<br />

– wc < .cshrc<br />

– sort < /etc/passwd<br />

• Redirection de la sortie standard<br />

– ls > liste<br />

• Redirection de l'erreur standard<br />

– cd xyz 2> erreur<br />

• Ajouter à un fichier par redirection<br />

– ls >> liste<br />

• La variable noclobber


Tubes et filtres<br />

• La sortie standard d'un programme peut être<br />

connectée à l'entrée standard d'un autre<br />

– Les résultats du premier programme servent de<br />

données au deuxième programme<br />

• Tube (pipe) : suite de <strong>commande</strong>s réliées<br />

par le caractère '|'<br />

– ls /etc | more


Filtre<br />

• Programme qui traite son entrée standard et<br />

produit un résultat sur sa sortie standard<br />

– sera en général utilisé dans un tube<br />

• cat est le filtre le plus simple<br />

– copie son entrée standard sur sa sortie standard


Principaux filtres<br />

Filtre Fonction<br />

crypt Crypter des données<br />

grep Recherche de chaines de caractères<br />

head, tail Début ou fin d'un fichier<br />

sort tri de données<br />

cut Coupe des colonnes<br />

wc Compte les lignes ou colonnes<br />

tr, expand, unexpand transformations de caractères


La <strong>commande</strong> grep<br />

• Rechercher les lignes correspondant à un<br />

modèle<br />

– c : compte le nombre de lignes qui<br />

correspondent<br />

– l : imprime seulement le nom du fichier<br />

– n : imprime le numéro de la ligne<br />

• Le modèle est donné par une expression<br />

régulière


Expressions régulières<br />

• Version étendue des «caractères joker»<br />

– [...] un caractère quelconque dans la liste<br />

– *zéro ou n fois le caractère précédent<br />

– . un caractère quelconque<br />

– ^début de ligne, fin de ligne$<br />

– [^...] liste de caractères à exclure


• JOKERS<br />

Jokers et expressions régulières<br />

• ? un caractère qq.<br />

• . le point<br />

• * n’importe quelle suite<br />

de caractères<br />

• [!a-i] un caractère qui<br />

n’est pas entre a et i<br />

• [^a-i] ^, ou un caractère<br />

entre a et i<br />

• Expressions<br />

• ?<br />

• un caractère qq.<br />

• 0 ou n fois le caractère<br />

précédent<br />

• ! ou un caractère entre a et<br />

i<br />

• un caractère qui n’est pas<br />

entre a et i


Exercices avec grep<br />

• Rechercher les utilisateurs connectés dont le<br />

nom commence par "r"<br />

• Rechercher les lignes commençant par s et<br />

se terminant par c dans un fichier<br />

• Rechercher les utilisateurs du système dont<br />

le nom commence par une voyelle<br />

• Supprimer les lignes blanches d'un fichier


Substitution de <strong>commande</strong>s<br />

• Une autre manière de combiner des<br />

<strong>commande</strong>s<br />

• La sortie standard d'une <strong>commande</strong> peut<br />

servir de paramètres (et non plus d'entrée<br />

standard) d'une autre <strong>commande</strong><br />

• exemple<br />

• which more (où se trouve la <strong>commande</strong> more ?)<br />

• ls -ls `which more` (détails sur le programme more)


Exécutées indépendamment et séquentiellement pas un nouveau shell<br />

Comparer :<br />

Commandes groupées<br />

[bastide@moe bastide]$ (cd Mail; pwd); pwd<br />

[bastide@moe bastide]$ cd Mail; pwd ; pwd<br />

De plus les <strong>commande</strong>s groupées peuvent être lancées collectivement en arrière plan (avec &) et redirigées<br />

collectivement. Comparer le contenu de fs avec les deux <strong>commande</strong>s suivantes :<br />

[bastide@moe bastide]$ echo "ajourd'hui"; date; echo les personnes \<br />

suivantes; who ; sont connectees >fs<br />

[bastide@moe bastide]$ (echo "ajourd'hui"; date; echo les personnes \<br />

suivantes; who ; sont connectees) >fs


SGF Hiérarchique<br />

• SGF : Système de Gestion de Fichiers<br />

– Regroupe plusieurs Systèmes de Fichiers (File<br />

Systems) sous une arborescence commune<br />

– Les périphériques apparaissent dans le système comme<br />

des fichiers.<br />

– Une seule arborescence de fichiers, même s'il y a<br />

plusieurs disques physiques, plusieurs partitions ou des<br />

disques réseaux (NFS).<br />

– Avantages : les données produites par un programme<br />

peuvent être dirigées vers un fichier ou vers un<br />

périphérique. Les périphériques disposent du même<br />

système de protection que les fichiers.


Différents types de fichiers<br />

• Unix connaît plusieurs types de fichiers. Ces différents types sont<br />

visibles par l'option -l de la <strong>commande</strong> ls<br />

– Fichier ordinaire (-)<br />

Contient n'importe quel type de données. Dans certains cas, la <strong>commande</strong> file<br />

permet de connaître les données contenues dans ce fichier.<br />

– Répertoire (d)<br />

Contient d'autres fichiers et sous-répertoires.<br />

– Lien symbolique (l)<br />

Permet de désigner le même fichier par plusieurs noms différents<br />

– Fichier spécial : périphérique en mode caractère (c)<br />

Dans le répertoire /dev<br />

– Fichier spécial : périphérique en mode bloc (b)<br />

– Tube nommé (named pipe) (p)<br />

Utilisation avancée, pour la communication entre processus<br />

– Socket (s)<br />

Idem.


Trois catégories d'utilisateurs<br />

• Pour chaque fichier, il existe trois type<br />

d'utilisateurs :<br />

– Le propriétaire (owner) du fichier. La personne<br />

qui crée un fichier en est propriétaire, jusqu'à ce<br />

qu'elle (ou l'administrateur système) utilise la<br />

<strong>commande</strong> chown.<br />

– Les membres du groupe du propriétaire du<br />

fichier.<br />

– Les autres utilisateurs du système


Trois types d'autorisation<br />

• Autorisation d'écriture : permet de modifier un fichier, ou de le supprimer.<br />

Pour un répertoire, permet de créer des fichiers dans un répertoire ou de les<br />

détruire, et de détruire le répertoire lui-même.<br />

• Autorisation de lecture : permet d'afficher le contenu d'un fichier et de le<br />

copier. Pour un répertoire, permet de lister les fichiers contenus dans ce<br />

répertoire.<br />

• Autorisation d'exécution : permet d'exécuter un fichier (il doit s'agir d'un<br />

programme compilé ou d'un script). Pour un répertoire, permet de se<br />

positionner (cd) dans ce répertoire ou de le traverser (par cd ou ls).<br />

• Il existe également deux "autorisations" supplémentaires<br />

– Set group/user ID : Lors de l'exécution d'un programme, change temporairement<br />

l'identité vers le propriétaire du fichier (le programme s'exécute avec les<br />

autorisations du propriétaire du fichier, et non pas avec celles de l'utilisateur<br />

courant). Pour un répertoire, les fichiers seront créés dans ce répertoire avec<br />

l'identité du propriétaire du répertoire, et non pas avec celles de l'utilisateur courant.<br />

– Sticky bit : le code du programme sera maintenu en zone de swap, accélérant<br />

ensuite son rechargement


Affichage des autorisations<br />

• Affichage en mode symbolique<br />

[bastide@moe bastide]$ ls - /etc/passwd<br />

-rw-r—r-- 1 root bin 2055 Jul 28 18:03 /etc/passwd$<br />

• Désignation en mode octal<br />

Les permissions peuvent être affichées de manière numérique sous la forme de trois nombres en octal (de 0 à 7), en considéran<br />

r w x r w - r-w<br />

4+2+1 4+2+0 401<br />

7 6 5


La <strong>commande</strong> chmod<br />

• chmod [-Rcfv] mode file ...<br />

• Mode symboliques<br />

– u,g,o,a : user, group, others, all<br />

– +,-,= : ajoute, supprime ou fixe le droit<br />

– r,w,x : read, write, execute<br />

• Mode octal


La <strong>commande</strong> umask permet de définir quelle seront les autorisations des fichiers au moment de leur création.<br />

Cette <strong>commande</strong> est souvent positionnée par défaut pour tous les utilisateurs dans le fichier /etc/profile.<br />

Le masque doit être donné en octal, et se soustrait à la valeur octale représentant les permissions par défaut (en<br />

d'autres termes, on précise les permissions que l'on souhaite enlever).<br />

Par exemple :<br />

La <strong>commande</strong> umask<br />

rwx rwx rwx – Les autorisations par défaut pour les répertoires<br />

--- -w- -w- - On veut supprimer le droit de lecture à tous les autres<br />

0 2 2 - Voilà le masque à utiliser<br />

[bastide@moe bastide]$ umask 022<br />

Le même masque donne un résultat différent lors de la création des fichiers<br />

rw- rw- rw- – Les autorisations par défaut pour les fichier<br />

--- -w- -w- - On supprime le droit de lecture à tous les autres<br />

rw- r—- r-- - Voilà les autorisations avec lesquelles les nouveaux fichiers<br />

seront créés.


Liens physiques et logiques<br />

• Permettre de désigner le même fichier par<br />

plusieurs noms, à différents endroits de<br />

l'arborescence<br />

– lien physique : le fichier est détruit quand tous ses liens<br />

physiques sont détruits. Un lien physique désigne un<br />

fichier dans le même filesystem<br />

– lien logique : simple pointeur vers le fichier réel, sans<br />

liaison physique. Peut être sur un autre filesystem<br />

• La <strong>commande</strong> ln permet de créer les liens


L’éditeur «standard» d’Unix


• Mode Commande<br />

Deux modes<br />

– Déplacement, manipulation de texte, <strong>commande</strong>s<br />

diverses<br />

• Passage en mode Insertion<br />

– i ou a: insertion avant ou après le curseur<br />

– O ou o : insertion sur la ligne précédente ou suivante<br />

– A : insertion à la fin de la ligne<br />

• Sortie du mode insertion par ESC


Commandes de base<br />

• Préfixées par «:»<br />

– q : quitter<br />

– q! : quitter sans sauvegarder<br />

– w : sauvegarder<br />

– wq : sauver et quitter<br />

– r : lire et insérer un fichier<br />

– ! : exécuter une <strong>commande</strong> shell


Commandes d’édition<br />

• dw : détruit le mot qui suit<br />

• dd : détruit la ligne courante<br />

• D : détruit jusqu’à la fin de la ligne<br />

• x : détruit le caractère sous le curseur<br />

• ctrl-d : une page en avant<br />

• ctrl-u : une page en arrière<br />

• ctrl-l : rafraîchit l’écran


Mais il existe des autres éditeurs<br />

PLUS SIMPLES A UTILISER!!<br />

emacs<br />

kedit<br />

emacs<br />

nedit<br />

xedit<br />

Avec des <strong>commande</strong>s graphiques<br />

comme word


Commandes de gestion des processus<br />

• Lancement d'un processus en tâche de fond<br />

– find / -name "RE*" -print &<br />

• Affichage des processus en cours : ps<br />

• Tuer un processus : kill


Gestion des processus à la console<br />

<strong>commande</strong><br />

Processus en<br />

avant plan<br />

fg %numéro_job<br />

fg %numéro_job<br />

<br />

stop %numéro_job<br />

Processus<br />

en arrière<br />

plan<br />

Processus<br />

stoppé<br />

bg %numéro_job<br />

<strong>commande</strong> &


La <strong>commande</strong> « find »<br />

• Permet de rechercher des fichiers répondant à<br />

certaines caractéristiques<br />

– (cf. « grep » qui recherche des chaînes à l’intérieur d’un<br />

fichier)<br />

• find [chemin…] [expression]<br />

– Chemin : chemins à partir desquels la recherche doit<br />

s’effectuer<br />

– Expression : critères de recherche<br />

• Options : modifient globalement la recherche<br />

– -depth, -maxdepth …<br />

• Tests : renvoient vrai ou faux<br />

– -name, -perm<br />

• Actions : effectuées quand un fichier vérifie les tests<br />

– Afficher le nom des fichiers, exécuter une <strong>commande</strong>…


Rechercher des fichiers, exécuter des <strong>commande</strong>s sur les fichiers<br />

La <strong>commande</strong> find : tests<br />

• Par nom:<br />

– find . -name "*html" -print<br />

• Par possesseur:<br />

– find . -user igsi -print<br />

• Par groupe:<br />

– find . -group igsi -print<br />

• Par type:<br />

– find . -type d -name "*html"<br />

–print<br />

• Par date d’accès<br />

– find . –amin –3 –print<br />

• Par permissions<br />

– find . –perm 777 -print<br />

• Affichage du nom des<br />

fichiers trouvés:<br />

– -print<br />

• Exécution d'une<br />

<strong>commande</strong> sur les fichiers<br />

trouvés:<br />

– -exec <strong>commande</strong> {} \;<br />

– find . -name "*.bak"<br />

-exec rm {} \;<br />

– find . -name "*.bak"<br />

-ok rm {} \;


Conversation en temps réel<br />

• talk nom_utilisateur<br />

– ou : talk nom_utilisateur@machine<br />

• write nom_utilisateur (plus répandu)


Courrier électronique<br />

• mail [-s sujet] utilisateur ...<br />

– Tapez le message<br />

– <br />

• La <strong>commande</strong> mail sert également à lire le<br />

courrier<br />

• Versions plus élaborées<br />

– elm (mode texte)<br />

– xmail, mailtool sous X<br />

• Client mail sur PC


Exécution périodique de <strong>commande</strong>s<br />

• L ’utilitaire crontab<br />

– Définir des <strong>commande</strong>s exécutées périodiquement<br />

• La <strong>commande</strong> at<br />

– Lancement d ’une <strong>commande</strong> à un moment précis<br />

• La <strong>commande</strong> batch<br />

– Lancement de <strong>commande</strong>s a un moment déterminé par<br />

le système


Assistants de configuration fournis avec<br />

Mandrake Linux<br />

ÿConfiguration du serveur DHCP: internet<br />

ÿConfiguration du DNS<br />

ÿAjouter une entrée DNS<br />

ÿConfiguration du serveur mail<br />

ÿConfiguration de Samba<br />

ÿConfiguration du pare feu (firewall)<br />

ÿConfiguration du serveur Web<br />

ÿConfiguration du serveur FTP<br />

ÿConfiguration du serveur de news<br />

ÿConfiguration du serveur mandataire (Proxy)<br />

ÿConfiguration du serveur de temps


Mandrake Control Center:


Mandrake Control Center: harddrake


Mandrake Control Center: harddrake


Mandrake Control Center: harddrake


Mandrake Control Center: harddrake


Mandrake Control Center: diskdrake


Mandrake Control Center: diskdrake


Mandrake Control Center: boot


Mandrake Control Center: boot


Mandrake Control Center: souris - clavier


Mandrake Control Center: printerdrake


Mandrake Control Center: printerdrake


Mandrake Control Center: printerdrake


Mandrake Control Center: printerdrake


Mandrake Control Center: sécurité


Mandrake Control Center: userdrake


Mandrake Control Center: userdrake


Mandrake Control Center: draklog


Mandrake Control Center: xdrake


Mandrake Control Center: rpmdrake


Mandrake Control Center: rpmdrake


Mandrake Control Center: rpmdrake


Mandrake Control Center: rpmdrake


Mandrake Control Center: draktime


Mandrake Control Center: drakrfont


Mandrake Control Center:<br />

boot et disquette d’amorçage


Mandrake Control Center:<br />

boot et disquette d’amorçage


Sécuriser votre machine: Firewall


Quelle niveau de sécurité<br />

Aucun ‡Tous les ports sont ouverts, le NAT (translation<br />

d'adresses réseau) est désactivé (ce niveau est à proscrire si le<br />

serveur est connecté à Internet).<br />

Faible ‡Tous les ports sont ouverts, le NAT est activé<br />

Intermédiaire ‡ Seuls les ports Internet correspondant à des<br />

services configurés par les assistants sont ouverts. le NAT est<br />

activé.<br />

Fort ËTous les ports sont fermés sauf : trafic HTTP et courrier<br />

sortant, plus le trafic ssh dans les deux sens. le NAT est désactivé.


Sécuriser votre machine:Les services


Sécurité informatique<br />

• Les données des utilisateurs doivent être<br />

protégées des autres utilisateurs<br />

– Les informations personnelles (p.ex. fichiers,<br />

courriers), les programmes, les répertoires, ..<br />

• Les informations doivent être protégées où qu’elles soient<br />

– sur le disque, le réseau, en mémoire primaire, etc..<br />

• Problème<br />

– Les actions des utilisateurs peuvent mener aux fuites<br />

d’informations ou aux modifications non-anticipées des<br />

informations


• La confidentialité<br />

confidentialit<br />

Sécurité informatique<br />

– Contraintes sur la divulgation d’informations<br />

d informations<br />

• P.ex. qu’un qu un fichier ne soit pas lu par un utilisateur n’ayant n ayant pas les<br />

droits d’acc d accès<br />

– P.ex: que personne d’autre d autre que le commerçant commer ant apprenne un numéro num ro de<br />

carte de crédit cr dit dans une transaction de commerce électronique lectronique<br />

• L’int intégrit grité<br />

– Contraintes sur les modifications d’informations<br />

d informations<br />

• P.ex. que seul le propriétaire propri taire d’un d un fichier puisse changer les droits<br />

d’acc accès<br />

– P.ex: seule la banque peut modifier le contenu d’un d un compte<br />

• La disponibilité disponibilit<br />

– Contraintes sur l’accessibilit<br />

l accessibilité d’informations d informations et de services<br />

• P.ex: un utilisateur ne doit pas être tre empêch emp ché de lire ses propres mails<br />

– P.ex: que le serveur de banque soit toujours accessibles aux participants<br />

d’une une transaction de commerce électronique lectronique


Types d'intrus<br />

oLe Curieux - Ce type d'intrus est surtout intéressé par le type de votre système et les<br />

données qui s'y trouvent.<br />

oLe Malveillant - Cet intrus est là pour faire écrouler votre système, modifier vos pages<br />

Web, ou même vous obliger à dépenser du temps et de l'argent pour vous remettre des<br />

dommages causés.<br />

oL'intrus Célèbre - Ce type d'intrus essaye d'utiliser votre système pour augmenter sa côte<br />

de popularité et d'infamie. Il est susceptible d'utiliser la popularité de votre système pour<br />

afficher ses capacités.<br />

oLe Concurrent - Cet intrus est intéressé par les données qui se trouvent sur votre<br />

système. Il peut d'agir de quelqu'un qui pense que vous possédez des informations dont il<br />

pourrait tirer profit, financièrement ou autre.<br />

oLe Locataire - Ce type d'intrus souhaite s'installer sur votre système, et utiliser ses<br />

ressources pour son propre compte. Ils font généralement tourner des serveurs chat ou<br />

IRC, site d'archives pornographiques, ou même des serveurs DNS.<br />

oLe Passager - Cet intrus n'est intéressé par votre système que pour obtenir l'accès à<br />

d'autres systèmes. Si votre système est bien connecté, ou une passerelle vers certains hôtes<br />

internes, vous êtes directement exposé à ce type d'individu.


Sécurité informatique<br />

• La protection<br />

– Ensemble des mécanismes qui contrôlent les actions<br />

des utilisateurs (processus/programmes)<br />

• P.ex. le chiffrement des données sur disque ou sur le réseau,<br />

mots de passe, matériel du processeur qui restreint l’adresse<br />

générée et qui empêche les programmes utilisateurs de<br />

communiquer avec le contrôleur de disque<br />

• La sécurité<br />

– La préservation de la confidentialité et de l’intégrité des<br />

informations du système<br />

• Une attaque est une action qui peut violer la sécurité<br />

• Une attaque peut être intentionnelle ou accidentelle<br />

• La sécurité est mise en œuvre par des mécanismes de<br />

protection


Pourquoi la sécurité<br />

• Contrer les attaques accidentelles<br />

– Qui ont souvent les mêmes effets que les attaques<br />

intentionnelles<br />

• Contrer les attaques intentionnelles<br />

– Un hacker<br />

• Vandalisme ou défi intellectuel<br />

– Terrorisme<br />

• Le Chaos Computer Club, prétend lutter contre les dangers que<br />

représente l’informatique pour les libertés individuelles<br />

– Espionnage industriel, profit financier<br />

• De plus en plus courant


Moyens de lancer une attaque<br />

• Ecoute passive<br />

– Un attaquant copie les données qui sont sur le disque ou le réseau<br />

• Attaque sur la confidentialité<br />

– P.ex: Peu de gens utilisent du chiffrement pour les données qu’ils<br />

échangent sur le réseau<br />

• Y compris pour leurs mots de passe !<br />

• Le chiffrement était longtemps interdit par la loi française (il fallait un<br />

permis)<br />

• Il est aisé d’attacher un dispositif matériel au réseau pour écouter les<br />

messages<br />

– P.ex. un driver de disque contenant une faille<br />

• Un problème particulier pour DOS puisque les utilisateurs peuvent installer<br />

leurs propres drivers<br />

• Interception<br />

– Données interceptées sont modifiées ou détruites par l’attaquant<br />

• Attaque sur l'intégrité des informations


Moyens de lancer une attaque<br />

• Répudiation<br />

– Un utilisateur nie d’avoir reçu des informations<br />

– Problématique pour le commerce électronique<br />

• Un utilisateur reçoit un paiement (ou service, p.ex. nouveau<br />

logiciel) et puis prétend de ne pas l’avoir reçu !<br />

• Pour combattre ce genre du problème, les protocoles de<br />

commerce électronique comprennent un trusted third party<br />

• Cryptanalyse<br />

– Analyse de texte chiffré dans le but de déterminer la clé<br />

ou le texte en clair<br />

– Le but est de cracker le système de chiffrage


Moyens de lancer une attaque<br />

• Déguisement (Mascarade)<br />

– Un utilisateur prétend être un autre et hérite des droits<br />

d’accès de ce dernier<br />

• Exemples<br />

– Dans Unix ou Windows, suite au vol d’un mot de<br />

passe, l’attaquant possède tous les privilèges de<br />

l’utilisateur auquel appartient le mot de passe<br />

– Si un attaquant arrive à remplacer un programme<br />

système par un programme à lui qui contient des<br />

erreurs<br />

• Il hérite les privilèges de l’administrateur (l’utilisateur root)


Moyens de lancer une attaque<br />

• Porte dérobée (Trap door)<br />

– Accès au système qui s’ouvre à cause d’une erreur dans le code<br />

• Exemple<br />

– Une ancienne version de Gnu-Emacs (éditeur de texte) donnait<br />

les privilèges de root à l’utilisateur (sur Unix)<br />

• Les programmes utilisateurs pouvaient ainsi s’exécuter avec les droits de<br />

root,<br />

– Et donc accéder à tous les fichiers du système !<br />

– Rappel: l’utilisateur root possède les droits d’accès pour tous les<br />

fichiers du système<br />

• Les fichiers systèmes (p.ex: /etc/passwd) et les programmes systèmes<br />

(p.ex: gcc, ls) lui appartiennent<br />

• L’utilisateur root peut tuer n’importe quel processus


Moyens de lancer une attaque<br />

• Bombe logique (Software bomb)<br />

– Un programme (dévastateur) déclenché à retardement<br />

ou par certaines conditions<br />

• P.ex. Date = 29 février ou 1 janvier 2000, utilisateur Jacques<br />

connecté<br />

• Cheval de Troie<br />

– Programme (système) qui apparaît normal mais qui<br />

contient des erreurs (accidentelles ou intentionnelles)<br />

• P.ex. L’exemple de l’éditeur Gnu-Emacs<br />

• L’origine des portes dérobés, virus, etc..


Moyens de lancer une attaque<br />

• Virus<br />

– Programme qui se répand dans un système<br />

• Il s’attache à un exécutable et se lance quand cet exécutable est<br />

lancé<br />

– Le virus s’attache à d’autres fichiers exécutables, et peut attaquer<br />

les ressources systèmes<br />

– Exemple : Israël 87<br />

• Découvert en Israël, le virus s’attachait aux exécutables et<br />

augmentait leurs tailles<br />

– Contenait une bombe logique (déclenchée chaque vendredi 13)<br />

et qui détruisait le système de fichiers<br />

– Découvert avant le 13 mai 1988 (40eme anniversaire de Israël).<br />

Acte de terrorisme. 500.000 PCs ont été infectés !


Moyens de lancer une attaque<br />

• Un bombardement réseau (Denial of Service)<br />

– On envoie plus de requêtes à un site que ce site n’est<br />

capable de gérer<br />

• On gaspille toutes les ressources du site<br />

– P.ex: l’espace mémoire allouée pour les sockets, les démons (les<br />

processus web), l’espace disque, etc.<br />

• Le site n’est donc plus capable de servir des requêtes<br />

– Un firewall est un moyen de limiter les dégâts d’un<br />

bombardement<br />

• Un firewall est un processus qui filtre des requêtes reçues sur<br />

le réseau (normalement) en fonction de leur origine (adresses<br />

IPs)<br />

– Tous les « grands » sites web ont récemment été<br />

victimes<br />

• P.ex: CNN.com, eBay.com, amazon.com, ….


Sécurité d’informatique<br />

• La sécurité n’est pas seulement un problème<br />

pour les systèmes multi-utilisateurs<br />

– Tout système peut contenir des programmes contenants<br />

des chevaux de Troie<br />

– Les erreurs ne sont pas toutes intentionnelles, mais les<br />

effets de ces erreurs peuvent néanmoins être graves<br />

– Un PC est particulièrement sensible aux virus puisque<br />

l’utilisateur s’occupe lui-même de l’installation de<br />

logiciel<br />

• Un utilisateur récupère beaucoup de ses programmes d’un site<br />

Web<br />

• Les systèmes Unix sont mieux protégés de ce point de vue


Mécanismes externes au système<br />

• Physiques : moyens qui limitent l’acc l accès s physique au<br />

système syst me<br />

– Accès Acc s aux salles contrôlé contr par des badges, gardiens<br />

• Règles gles et procédures proc dures, , p.ex.<br />

– Seul l’administrateur l administrateur peut installer des logiciels<br />

– Le mot de passe doit être tre changé chang tous les 4 mois<br />

• Personnels : contrôle contr le des personnes ayant un compte sur la<br />

machine<br />

– Autorisations accordées accord es en fonction de son rôle r le<br />

• P.ex: un étudiant tudiant possède poss de moins de privilèges privil ges qu’un qu un assistant<br />

• Les mécanismes m canismes externes sont limités limit s dans le cadre de<br />

l’Internet Internet<br />

– Car tous les clients se trouvent à distance


Mécanismes internes au système<br />

• 1 Authentification<br />

– La vérification de l’identité d’un utilisateur<br />

• 2 Autorisation<br />

– La vérification des droits d’accès d’un utilisateur<br />

• 3 La journalisation<br />

– L’OS enregistre des événements notables dans un<br />

fichier système (le log, voir répertoire /var/log)<br />

• P.ex. les logins des utilisateurs, les applications lancées<br />

– Ce log sert à détecter un comportement anormal de la part d’un<br />

utilisateur


Authentification<br />

• Mot de passe (password)<br />

– Très simple à implanter, voire trop simple !<br />

• Un dictionnaire de 3000 mots est suffisant pour trouver entre<br />

8% et 30% des mots de passe dans un système<br />

– Pas facile pour un utilisateur avec plusieurs comptes de<br />

se rappeler de tous ses mots de passe<br />

• Reconnaissance physique (voix, iris, empreintes)<br />

– Ou badges, cartes, etc.<br />

• Question : faut-il que le système s’authentifie à<br />

l’utilisateur ?<br />

– P.ex: comment un utilisateur peut-il savoir si l’ATM<br />

qu’il utilise n’a pas été contourné ?<br />

• Cette question devient importante avec la mise en place des<br />

terminaux « partout »


Autorisation<br />

• Contrôler les opérations qu’un processus peut<br />

effectuer dans un système<br />

– Pour exécuter une opération, le processus doit posséder<br />

un droit d’accès pour cette opération<br />

• P.ex: un utilisateur Linux doit avoir le droit r pour lire un<br />

fichier<br />

• Principe du moindre privilège (need-to-know)<br />

– Un utilisateur ne doit accéder à un instant donné<br />

qu’aux informations et services strictement nécessaires<br />

pour l’accomplissement de son travail<br />

• Minimaliser les risques des attaques internes et des<br />

programmes erronés<br />

– Tout système informatique doit suivre ce principe


Domaines de protection<br />

• Droit d’accès: permission d’exécuter une<br />

opération<br />

• Read, Write, Execute (rwx) en Unix/Linux pour les fichiers<br />

• Processus: demandeurs d’opérations<br />

• Domaines: définit un ensemble de ressources avec<br />

des droits d’accès sur ces ressources<br />

• Lorsqu’un processus s’exécute dans un domaine,<br />

– Ce processus possède tous les droits d’accès associés à<br />

ce domaine


Domain1<br />

File1[R]<br />

File2[RW]<br />

Domaines: illustration<br />

Domain2<br />

File3[RWX]<br />

File4[RW]<br />

Domain3<br />

Printer[W]<br />

File1[RW]<br />

Root


Domaines de protection<br />

• Les domaines ne sont pas toujours disjoints<br />

– P.ex. tout domaine possède le droit d’exécution sur les<br />

programmes systèmes (vi, gcc, shell)<br />

• Les droits d’accès sont gérés au niveau des<br />

domaines plutôt qu’au niveau de processus<br />

– Nombre fixé et inférieur au nombre de processus<br />

• P.ex. tous les processus d’un utilisateur appartiennent au même<br />

domaine<br />

– On associe le nom de l’utilisateur (domaine) au processus<br />

– On ne vérifie que les droits d’accès associés à ce nom lorsque le<br />

processus accède à un ficher


Représentation des droits d'accès<br />

• Liste de contrôle d’accès : Access control list<br />

• Liste associée à chaque ressource<br />

– spécifie qui a accès et avec quels droits<br />

Serge - r<br />

Jean - rw<br />

Fichier F1 Disque<br />

Serge - save<br />

Jean - conf<br />

Imprimante<br />

Serge - imp<br />

Jean - reset<br />

– Listes stockées et maintenues par l’OS<br />

• Contenus des listes modifiés par des appels systèmes<br />

– La <strong>commande</strong> chmod en Unix<br />

• Listes sont protégées de modifications illicites<br />

– C-à-d : seul la fonction système chmod peut accéder aux listes


Processus / domaine<br />

• Un processus peut changer son domaine<br />

dynamiquement<br />

– Il obtient les droits d’accès dans le nouveau domaine<br />

pendant qu’il y exécute quelque chose<br />

• Exemple<br />

– Un appel système change le domaine d ’un processus<br />

de celui d’un utilisateur vers le domaine de l’OS<br />

• Cela permet à un processus utilisateur d’accéder aux<br />

ressources protégées (p.ex. tables des I-nodes) en exécutant du<br />

code système (dans le domaine système)


Processus / domaine<br />

• Changement de domaine en cours d’exécution<br />

– En Unix, pour changer son mot de passe, un utilisateur<br />

doit modifier le fichier /etc/passwd<br />

• Ce fichier n’est accessible que dans le domaine de l’utilisateur<br />

root<br />

– Le processus utilisateur ne peut pas accéder à ce fichier<br />

tant qu’il reste dans le domaine de l’utilisateur<br />

– Lorsqu’un processus exécute le programme passwd, le<br />

domaine change du domaine de l’utilisateur vers le<br />

domaine de l’utilisateur root


Le modèle de Unix/Linux<br />

• Tout utilisateur possède un groupe ID (GID) et un<br />

ID utilisateur (UID)<br />

• p.ex: UID = rizza6 ; GID = étudiant<br />

– Les processus qu’il crée héritent son UID et GID<br />

– La paire (uid, gid) définit son domaine de protection<br />

• 2 processus avec le même (uid, gid) ont accès exactement aux<br />

mêmes ressources avec les mêmes droits d’accès<br />

– C-à-d, ils font partie du même domaine<br />

• Un fichier que l’utilisateur crée hérite aussi de<br />

l’UID et du GID du processus qui le crée


Le modèle de Linux/Unix<br />

• Unix ne permet pas un contrôle détaillé<br />

– Droits RWX, bits setuid, setgid<br />

– Catégories : owner, group, world<br />

• Perte d’expressivité<br />

– Je ne peux pas dire que seul Marc peut lire mes fichiers<br />

• Mais l’implantation du mécanisme est efficace<br />

• Réutilisation des bits:<br />

– ‘X’ veut dire “exécute” pour un programme, “ls”pour<br />

un répertoire


ls -gl<br />

Le modèle de Linux/Unix<br />

-rwxr-xr-x thanos denis 498 Nov 18 11:24 example.sh<br />

-rwxrwxr-x bryce progsys 683 Nov 19 22:01 grades.sh<br />

– example.sh appartient à thanos du groupe denis<br />

• grades.sh appartient à bryce du groupe progsys<br />

• thanos et bryce possèdent le droit de lire, d’écrire et d’exécuter<br />

leurs fichiers (rwx)<br />

• Les membres du groupe denis possèdent les droits r-x sur<br />

example.sh<br />

• Les utilisateurs ne faisant pas partie du groupe progsys<br />

possèdent les droits r et x sur grades.sh


Le modèle de Linux/Unix<br />

2 façons de changer de domaines en Unix<br />

• 1. Lors d’un appel système:<br />

– Changement de mode (user mode / kernel mode)<br />

– accès aux ressources du kernel (p.ex. I-Nodes, tables de<br />

pages), donc changement de domaine<br />

• 2. Changement vers un domaine d’un utilisateur<br />

– Fichier exécutable contient un setuid et setgid bits<br />

– Un processus qui exécute ce fichier hérite du domaine<br />

du fichier (c.f. exemple de passwd)


Exemple<br />

cuisuna:(~) ls -ldg Private<br />

drwx--x--- 8 denis 1024 Nov 21 14:24<br />

Private/<br />

cuisuna:(~) ls -lg Private/resultats.juin97<br />

-rw-r----- 1 denis 317 Jun 27 17:59<br />

Private/resultats.juin97<br />

cuisuna:(~) cat Private/resultats.juin97<br />

MARTIN 5<br />

DUPONT 4.25<br />


Exemple (suite)<br />

cuisuna:(~) ls -l notesExa<br />

-rwxr-sr-x 1 bryce denis 5380 Jun 23 16:45<br />

notesExa*<br />

cuisuna:(~) cat notesExa<br />

#!/usr/bin/csh<br />

echo "Resultats de l'Examen Juin 1997”<br />

set resfile = /user/u1/bryce/Private/resultats.juin97<br />

set username = `whoami`<br />

echo Bonjour $username<br />

set resultat = `grep $username $resfile`<br />

if($#resultat == 0) then<br />

echo "pas de resultat pour vous"<br />

echo "Envoyez un mail a Ciaran”<br />

else<br />

echo -n "Voici le note "<br />

echo $resultat<br />

endif<br />

Ce fichier possède<br />

un setuid bit


FIN 2eme FIN 2 Partie<br />

eme Partie<br />

Ouf …

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!