Aller au contenu

Administration Unix - TP séance 15

À la fin de la séance, déposez votre fichier de réponses sur la page Ametice en suivant bien les instructions, même si vous n'avez pas fini la planche ; lorsque vous aurez terminé, vous pourrez re-déposer la version finale.

Important : pour travailler ce TP, faites tous les essais dans une VM, afin de ne pas risquer "d'abîmer" votre système hôte.

Exercice 1 : Installation de paquets et PPA

À faire dans la VM xubuntu

a) Combien de paquets sont actuellement installés dans le système ? Essayez 2 méthodes :

  • filtrez ceux qui ont le statut ii en début de ligne dans la sortie de dpkg -l ;
  • filtrez ceux qui ont le statut install en fin de ligne dans la sortie de dpkg --get-selections.

b) Sauvegardez la liste des noms des paquets installés, dans un fichier liste1.txt (la commande cut peut être utile ; le caractère tabulation peut être donné sous la forme $'\t').

c) Rajoutez le dépôt personnel (PPA) suivant en faisant :

sudo apt-add-repository ppa:umang/indicator-stickynotes

ensuite faites un apt update, puis installez le paquet indicator-stickynotes.

Remarque : si l'opération échoue, vous n'avez peut-être pas une version supportée d'Ubuntu. Vérifiez si votre version d'Ubuntu (obtenue en tapant : lsb_release -sc) apparait bien dans le dépot http://ppa.launchpad.net/umang/indicator-stickynotes/ubuntu/dists/ ; si ce n'est pas le cas, faites l'exercice en installant par exemple le ppa ppa:mozillateam/ppa puis en installant le paquet firefox-esr.

d) Refaites la liste comme dans la question b), dans un fichier liste2.txt ; triez les 2 fichiers, puis à l'aide de diff, affichez la liste des paquets qui ont été installés.

e) À l'aide de apt-mark mettez la marque hold sur indicator-stickynotes afin qu'il ne puisse plus être mis à jour. Vérifiez l'état à l'aide de dpkg -l, dpkg --get-selections, et apt-mark showhold.

f) Observez dans la sortie de apt policy que le PPA est affiché. Supprimez le PPA (option --remove de apt-add-repository ; cela ne supprimera pas le paquet précédemment installé) puis faites un apt update. Vérifiez que maintenant le PPA n'apparaît plus dans la sortie de apt policy.

Remarque : pour a), on peut aussi utiliser : dpkg-query -l, ou encore apt list --installed

Exercice 2 : Fabrication d'un paquet .deb dangereux

On se propose d'écrire un script gen-exploit-deb.sh qui fabriquera un paquet .deb "dangereux", pour montrer qu'il ne faut pas faire confiance au paquets d'origine suspecte. Le paquet installera le petit exploit en C du TP 13 avec le setuid.

Voici le étapes à suivre ; n'oubliez pas de tester le script à chaque étape, voire de mettre au point chaque commande dans le terminal avant de la recopier dans le script. Soyez très précis sur les chemins !!

a) En haut du script, affecter une variable TMPDIR par exemple au chemin "/tmp/temp-$$". Tous les fichiers intermédiaires seront créés par la suite dans "$TMPDIR".

b) À l'aide d'un here-document dans le script, créer dans le répertoire "$TMPDIR" le programme C "exploit2.c", dont le source est dans le TP n°13.

c) Vérifier dans le script que la commande gcc --version réussit. Si c'est le cas, on passe à l'étape suivante, sinon, on appelle apt pour installer le paquet gcc.

d) Compiler dans le script le programme C dans "$TMPDIR" en appelant

gcc -Wall -std=c99 exploit2.c -o exploit2

puis vérifier que cette commande a réussi (sinon, échec du script).

e) Toujours dans le script, créer dans "$TMPDIR" les sous-répertoires usr/bin/, puis déplacer l'exécutable exploit2 produit par gcc dans usr/bin/.

f) À l'aide d'un here-document dans le script, créer dans "$TMPDIR" un script "postinst" bash, qui donne à l'exécutable /usr/bin/exploit2 : l'appartenance et le groupe à root, puis les droits d'exécution à tous, et enfin le setuid (remarque : il est inutile d'utiliser sudo dans postinst car postinst sera appelé par root). Donner les droits d'exécution à postinst.

g) Le script crée ensuite les fichiers suivant dans "$TMPDIR"  :

debian-binary :
contient une ligne : 2.0
md5sums :
contient la ligne générée par : md5sum ./usr/bin/exploit2
control :

contient le fichier de contrôle suivant ; vous pouvez le générer à l'aide d'un here-document (le paragraphe qui suit Description doit être indenté de 1 caractère).

Package: exploit2
Version: 1.0
Architecture: amd64
Essential: no
Maintainer: John Doe <johndoe@nowhere.org>
Installed-Size: 17
Pre-Depends: libc6 (>= 2.15)
Depends: 
Recommends: 
Suggests: 
Conflicts: 
Replaces: 
Section: shells
Priority: required
Multi-Arch: foreign
Homepage: 
Description: root shell with setuid
 This package installs a root shell, and therefore should not be used
 at all, except for educational purpose.

h) Le script crée ensuite dans "$TMPDIR" :

  • l'archive data.tar.xz contenant ./usr/bin/exploit2
  • l'archive control.tar.xz contenant : control, md5sums, postinst

i) Le script crée dans "$TMPDIR" l'archive "exploit2_1.0_amd64.deb" avec la commande ar (avec l'option r), contenant les fichiers dans l'ordre : debian-binary, control.tar.xz, data.tar.xz.

j) Le script recopie enfin le .deb produit dans le répertoire courant initial (pensez à le sauvegarder au début du script en faisant CURDIR=$PWD), puis supprime récursivement "$TMPDIR".

k) Dans le terminal, exécutez le script pour produire le paquet .deb ; procédez à l'installation du paquet avec dpkg -i, puis appelez : apt show exploit2 pour vérifier le statut (installé). Testez ensuite que l'exploit fonctionne. Finalement, désinstallez le paquet avec dpkg -r ou apt remove.

l) Dans le script au niveau du fichier control, mettez Essential: yes, générez le paquet puis installez-le. Maintenant, essayez de le supprimer...