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 dedpkg -l
; - filtrez ceux qui ont le statut
install
en fin de ligne dans la sortie dedpkg --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...