commande
commande
commande
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 …