Vous êtes sur la page 1sur 11

exercices du TP n°3

Droits d’accès

Pour cet exercice, vous créerez un utilisateur banalisé

 Vous est-il possible de faire une copie du fichier /etc/passwd?


Vous est-il possible de supprimer ou de modifier le fichier
/etc/passwd?
Répeter ces tentatives en tant qu'utilisateur root.
Expliquer la situation à l’aide de la commande ls -l.
 A l’aide de la commande id, vérifier votre identité et le(s)
groupe(s) au(x)quel(s) vous appartenez.
 Créer un petit fichier texte (de contenu quelconque), qui soit
lisible par tout le monde, mais non modifiable (même pas par
vous).
 Créer un répertoire nommé "Secret", dont le contenu est visible
uniquement par vous même.
Les fichiers placés dans ce répertoire sont-ils lisibles par
d’autres membres de votre groupe?
 Créer un répertoire nommé "Connaisseurs" tel que les autres
utilisateurs ne puissent pas lister son contenu mais puissent lire
les fichiers qui y sont placés.
On obtiendra:
ls Connaisseurs
ls : Connaisseurs: Permission denied
cat Connaisseurs/toto
<...le contenu du fichier toto (s’il existe)...>
 Chercher dans le répertoire /usr/bin des exemples de
commandes ayant la permission SUID.
De quelle genre de commande s’agit-il?

Les utilisateurs

 Votre compte d'utilisateur est-il défini dans le fichier


/etc/passwd? Pourquoi? Il y a-t-il d'autres alternatives?
 Quel est le répertoire de connexion de l’utilisateur root?
 Quel est le shell de l’utilisateur root?
 Quelle est la particularité de l’utilisateur nobody? Et de
l’utilisateur shutdown?
 Quels sont les utilisateurs définis dans /etc/passwd qui font
partie du même groupe que l’administrateur?

Redirections, méta-caractères

Le répertoire /usr/include contient les fichiers d’entête standards


en langage C (stdlib.h, ...).

 Créer un répertoire nommé inc dans votre répertoire de


connexion (HOME).
En utilisant une seule commande, y copier les fichiers du
répertoire /usr/include dont le nom commence par std.
 Afficher la liste des fichiers de /usr/include dont le nom
commence par a, b ou c.
 Modifier la commande de la question précédente pour qu'au lieu
d’afficher le résultat, celui-ci soit placé dans un fichier nommé
"Abc.list" de votre répertoire de connexion.
 Afficher le contenu de ce fichier en utilisant la commande cat.
Copier avec cat son contenu dans un nouveau fichier nommé
"Copie".
 Toujours avec cat, créer un nouveau fichier nommé "Double"
formé par la mise bout à bout (concaténation) des fichiers
"Abc.list" et "Copie".
Vérifier que le nombre de lignes a bien doublé à l’aide de la
commande wc.
 Créer un fichier nommé "Temp" contenant une ligne de texte.
 Avec cat, ajouter la ligne "The end" à la fin du fichier "Temp”.
 En une seule ligne de commande, faire afficher le nombre   de
fichiers de /usr/include dont le nom contient la lettre t.

find

 Afficher la liste des fichiers .h situés sous le répertoire


/usr/include.
 Afficher la liste des fichiers plus vieux que 3 jours situés sous
votre répertoire de connexion.

head, tail, tubes

 Afficher les 5 premières, puis les 5 dernières lignes du


fichier /etc/passwd.
 Afficher la 7ième ligne de ce fichier (et elle seule), en une
seule ligne de commande.

tr, more, tubes

 Afficher le fichier /etc/passwd en remplaçant les caractères /


par des X.
 Obtenir le résultat précédent page par page.

Contrôles d'accès

Un administrateur désire s’assurer chaque matin que tous les fichiers


placés sous $REPERTOIRE sont lisibles  par tout le monde, mais non
modifiables excepté par leur propriétaire.

 Quel doit être le mode de ces fichiers et répertoires?


 Écrire un script permettant d’afficher la liste des fichiers d'un
répertoire et le type de chacun (utilisation de file et sort ) trié
par type.

Flux d’E/S standards

Étudier la documentation de la commande tee.

 Écrire une commande qui affiche "Bonjour" à l’écran et en même


temps crée un fichier nommé "Salutation.txt" dont le contenu
est le même message.
 Ecrire un script qui lit une ligne de caractères sur son entrée
standard et l’écrit sur sa sortie, en passant tous les caractères
en majuscules.
 Modifiez votre script pour qu’il affiche le nombre de
caractères traités sur sa sortie d’erreur.
 Créer un fichier texte quelconque. Écrire une seule commande
shell qui recopie le contenu passé en majuscule de ce fichier
dans un nouveau fichier nommé "Titre.txt" et affiche à l’écran
le nombre de caractères traités.

grep, cut, uniq, sort et tubes

Étudier la documentation des commandes cut et uniq.

 Afficher la liste des répertoires de connexion des utilisateurs


déclarés dans le fichier /etc/passwd.
 On rappelle qu’à chaque utilisateur est associé un interpréteur
de commandes (shell) lancé lors de son login. La commande
correspondante est indiquée dans le 7ième champ du fichier
/etc/passwd.
Afficher en une ligne de commande le nombre  d’interpréteurs
de commandes différents  mentionnés dans /etc/passwd.
 On dispose d'un fichier texte telephone.txt contenant un petit
carnet d’adresses.
Chaque ligne est de la forme "nom prenom numerotelephone".
Les champs sont séparés par des tabulations.
Répondre aux questions suivantes en utilisant à chaque fois une
ligne de commande shell:
o Afficher le carnet d’adresse trié par ordre alphabétique
de noms.
o Afficher le nombre de personnes dans le répertoire.
o Afficher toutes les lignes concernant les “Dupond”.
o Afficher toutes les lignes ne concernant pas  les “Dupond”.
o Afficher le numéro de téléphone (sans le nom) du premier
“Dupond” apparaissant dans le répertoire.
o Afficher le numéro de téléphone (sans le nom) du premier
“Dupond” dans l’ordre alphabétique (ordre basé sur les
prénoms).
Droits d’accès
Corrections des exercices du TP n°3
 Essayer de supprimer ou de modifier le fichier /etc/passwd.
Que se passe-t-il?
Expliquer la situation à l’aide de la commande ls -l.

Il est impossible de supprimer le fichier /etc/passwd. Seul le


propriétaire (root) du fichier peut le supprimer.

ls -l /etc/passwd
-rw-r--r-- 1 root root 1705 2004-12-09 09:55 /etc/passwd

 A l’aide de la commande id, vérifier votre identité et le(s)


groupe(s) au(x)quel(s) vous appartenez.

id
uid=1000(toto) gid=1000(toto) groupes=1000(toto)

 Créer un petit fichier texte nommé "Lecture" (de contenu


quelconque), qui soit lisible par tout le monde, mais non
modifiable (même pas par vous).

touch Lecture
chmod 444 Lecture
-r--r--r-- 1 toto toto 3 2004-12-09 09:55 Lecture

 Créer un répertoire nommé "Secret", dont le contenu est visible


uniquement par vous même.
Les fichiers placés dans ce répertoire sont-ils lisibles par
d’autres membres de votre groupe?

mkdir Secret
chmod 700 Secret
drwx------ 2 toto toto 4096 2004-12-09 09:55 Secret

 Créer un répertoire nommé "Connaisseurs" tel que les autres


utilisateurs ne puissent pas lister son contenu mais puissent lire
les fichiers qui y sont placés.
On obtiendra:
ls Connaisseurs
ls : Connaisseurs: Permission denied
cat Connaisseurs/toto
<...le contenu du fichier toto (s’il existe)...>

mkdir Connaisseurs
chmod 711 Connaisseurs

 Chercher dans le répertoire /usr/bin trois exemples de


commandes ayant la permission SUID.
De quelle genre de commande s’agit-il?

/usr/bin/passwd pour modifier son mot de passe


/usr/bin/gpasswd pour administrer le fichier /etc/group
/usr/bin/readcd pour lire et écrire des cd

Ces commandes "travaillent" en tant que root mais peuvent être


endossées par d'autres utilisateurs

Les utilisateurs

 Votre compte d'utilisateur est-il défini dans le fichier


/etc/passwd? Pourquoi?

Non, car les comptes sont définis globalement au sein d'un "domaine"
NIS.

 Quel est le répertoire de connexion de l’utilisateur root?

Le répertoire de connexion de root est /root.

 Quel est le shell de l’utilisateur root?

Le shell est /bin/bash.

 Quelle est la particularité de l’utilisateur nobody?


Et de l’utilisateur shutdown?

L'utilisateur Nobody n'a pas de home valide, son home devient /.

 Quels sont les utilisateurs définis dans /etc/passwd qui font


partie du même groupe que l’administrateur?
sync, postfix, sshd, partimag et distccd.

Redirections, méta-caractères

Le répertoire /usr/include contient les fichiers d’entête standards


en langage C (stdlib.h, ...).

 Créer un répertoire nommé inc dans votre répertoire de


connexion (HOME).
En utilisant une seule commande, y copier les fichiers du
répertoire /usr/include dont le nom commence par std.

mkdir inc
cp /usr/include/std* $HOME/inc

 Afficher la liste des fichiers de /usr/include dont le nom


commence par a, b ou c.

find /usr/include/ \( -name 'a*' -o -name 'b*' -o -name 'c*' \)


ou
find /usr/include/ -name [abc]*

 Modifier la commande de la question précédente pour qu'au lieu


d’afficher le résultat, celui-ci soit placé dans un fichier nommé
"Abc.list" de votre répertoire de connexion.

find /usr/include/ \( -name 'a*' -o -name 'b*' -o -name 'c*' \)


>$HOME/Abc.list

 Afficher le contenu de ce fichier en utilisant la commande cat.


Copier avec cat son contenu dans un nouveau fichier nommé
"Copie".

cat Abc.list > copie


wc Abc.list
450 450 14861 Abc.list

 Toujours avec cat, créer un nouveau fichier nommé "Double"


formé par la mise bout à bout (concaténation) des fichiers
"Abc.list" et "Copie".
Vérifier que le nombre de lignes a bien doublé à l’aide de la
commande wc.

cat Abc.list copie >double


wc double
900 900 29722 double

 Créer un fichier nommé "Temp" contenant une ligne de texte.

touch Temp

 Avec cat, ajouter une ligne “The end” à la fin du fichier “temp”.

cat >> temp


The end
CTRL-d

 En une seule ligne, faire afficher le nombre  de fichiers de


/usr/include dont le nom contient la lettre t.

ls /usr/include/[t]* | wc
14 14 306

find

 Afficher la liste des fichiers h situés sous le répertoire


/usr/include.

find /etc -name "*.conf"

 Afficher la liste des fichiers plus vieux que 3 jours situés sous
votre répertoire de connexion.

find $HOME -ctime +3

head, tail, tubes

 Afficher les 5 premières, puis les 5 dernières lignes du


fichier /etc/passwd.

head -5 /etc/passwd
tail -5 /etc/passwd
 Afficher la 7ième ligne de ce fichier (et elle seule), en une
seule ligne de commande.

head -n7 passwd | tail -n1

tr, more, tubes

 Afficher le fichier /etc/passwd en remplaçant les caractères /


par des X.

cat /etc/passwd | tr / X

 Obtenir le résultat précédent page par page.

cat /etc/passwd | tr / X | more

Contrôles d'accès

Un administrateur désire s’assurer chaque matin que tous les fichiers


placés sous $REPERTOIRE sont lisibles  par tout le monde, mais non
modifiables excepté par leur propriétaire.

 Quel doit être le mode de ces fichiers et répertoires?

fichiers: rwxr-xr-x
répertoires: rwxr-xr-x

 Écrire un script permettant d’afficher la liste des fichiers d'un


répertoire et le type de chacun (utilisation de file et sort ) trié
par type.

#! /bin/bash
for i in `ls`
do
file $i >>text
done
more text| sort -t: +1
rm text

Flux d’E/S standards


 Écrire une commande qui affiche "Bonjour" à l’écran et en même
temps crée un fichier nommé "Salutation.txt" dont le contenu
est le même message.

echo "Bonjour" |tee salutation.txt

 Ecrire un script qui lise une ligne de caractères sur son entrée
standard et l’écrive sur sa sortie, en passant tous les
caractères en majuscules.

#! /bin/bash
read a
echo $a|tr "[a-z]" "[A-Z]"

 Modifiez votre script pour qu’il affiche le nombre de


caractères traités sur sa sortie d’erreur.

read a
echo $a|tr "[a-z]" "[A-Z]"|tee text1

 Créer un fichier texte quelconque. Écrire une seule commande


shell qui recopie le contenu passé en majuscule de ce fichier
dans un nouveau fichier nommé "Titre.txt" et affiche à l’écran
le nombre de caractères traités.

cat salutation.txt|tr "[a-z]" "[A-Z]"|tee text1|wc -c

grep, cut, uniq, sort et tubes

Étudier la documentation des commandes cut et uniq.

 Afficher la liste des répertoires de connexion des utilisateurs


déclarés dans le fichier /etc/passwd.

cut -d: -f 6 passwd

 On rappelle qu’à chaque utilisateur est associé un interpréteur


de commandes (shell) lancé lors de son login. La commande
correspondante est indiquée dans le 7ième champ du fichier
/etc/passwd.
Afficher en une ligne de commande le nombre  d’interpréteurs
de commandes différents  mentionnés dans /etc/passwd.

cut -d: -f 7 passwd|sort|uniq|wc -l

 On dispose d'un fichier texte telephone.txt contenant un petit


carnet d’adresses.
Chaque ligne est de la forme "nom prenom numerotelephone" les
champs étant séparés par des tabulations.
Répondre aux questions suivantes en utilisant à chaque fois une
ligne de commande shell:
o Afficher le carnet d’adresse trié par ordre alphabétique
de noms.

sort telephone.txt

o Afficher le nombre de personnes dans le répertoire.

wc -l telephone.txt

o Afficher toutes les lignes concernant les “Dupond”.

grep Dupond telephone.txt

o Afficher toutes les lignes ne concernant pas  les “Dupond”.

cat telephone.txt | grep -v "Dupond"

o Afficher le numéro de téléphone (sans le nom) du premier


“Dupond” apparaissant dans le répertoire.

grep Dupond telephone.txt|uniq -f 1|cut -d\; -f 3

o Afficher le numéro de téléphone (sans le nom) du premier


“Dupond” dans l’ordre alphabétique (ordre basé sur les
prénoms).

sort telephone.txt|grep Dupond |uniq -f 1|cut -d\; -f 3

Vous aimerez peut-être aussi