Objectifs :
- configurer sudo
- lancer un premier conteneur, et contrôler son exécution ;
- lancer un conteneur disposant d'un programme installé ;
- créer son conteneur via un Dockerfile.
L'utilitaire su
est beaucoup plus puissant qu'on peut penser de prime abord,
mais celui-ci a quelques limitations, comme l'obligation d'être root pour ne
pas effectuer certaines opérations sans mot de passe, ainsi que l'absence de
filtrage sur des utilisateurs, groupes, commandes, voire même groupes de
commandes. L'utilitaire sudo
vient combler ce vide.
Attention : une mauvaise configuration peut donner trop de droits à un ou plusieurs utilisateurs. Cela peut faciliter la compromission d'un serveur. Pour limiter cela, la lecture du document "Recommandations de configuration d’un système GNU/Linux" de l'ANSSI est fortement encouragé, et contient quelques paragraphes sur sudo.
Comme beaucoup de logiciels, le paquet à installer correspond au nom de celui-ci. Le paquet "sudo" est normalement installé si les machines sont configurés grâce au fichier preseed fourni dans les premiers TP.
En tant que root, sur server11
, vérifier que le paquet "sudo" est installé,
et que les fichiers suivants sont présents :
/usr/bin/sudo
/usr/sbin/visudo
/etc/sudoers
Par commodité, lorsque sudo demande un mot de passe, et que l'authentification
est réussie, celle-ci considérée valide pendant un certain temps (15 ou 5
minutes selon les versions). Cela peut perturber le TP et fausser des
résultats, nous allons donc désactiver ce "temps de grâce". Se connecter sur
server11
, et passer root. Lancer la commande visudo
. Celle-ci lance un
éditeur de texte. Dans le texte, repérer les lignes commençant par "Defaults"
et ajouter sous celles-ci la ligne suivante :
Defaults timestamp_timeout=0
Sauver le fichier, et quitter l'éditeur.
Se connecter sur server11
en tant qu'utilisateur student et lancer la
commande sudo -l
. Celle-ci permet de lister les droits sudo disponibles à
l'utilisateur l'appelant. Elle devrait demander un mot de passe.
Question : de quels droits sudo dispose l'utilisateur student ? Même question pour l'utilisateur root.
En tant que root, ajouter l'utilisateur student au groupe sudo. Déconnecter la session de l'utilisateur student, puis s'y reconnecter. Lister de nouveau les droits sudo depuis l'utilisateur student.
Question : de quels droits sudo dispose maintenant l'utilisateur student ?
Toujours en tant qu'utilisateur student, lancer la commande sudo whoami
.
Question : quel est le résultat de la commande sudo whoami
?
Il est possible de lancer des commandes avec les droits root sans mot de passe. Profitons-en pour découvrir une autre fonctionnalité de sudo, l'inclusion de fichiers de configuration complémentaire.
Toujours en tant que root sur server11
, créer un nouveau fichier de
configuration sudo via la commande visudo -f /etc/sudoers.d/student
, et y
insérer le contenu suivant :
student ALL=(ALL) NOPASSWD: ALL
Se reconnecter en tant que student, et lancer les commandes sudo -l
ainsi que
sudo whoami
, constater qu'il n'y a pas besoin de mot de passe.
Comparer la syntaxe de la déclaration ci-dessus avec celle du fichier
/etc/sudoers
qui donne l'accès à sudo au groupe sudo
.
Questions :
- à quel endroit définit-on l'utilisateur ou le groupe ?
- à quel endroit définit-on qu'on ne souhaite pas de mot de passe ?
- à quel endroit définit-on l'inclusion de fichiers supplémentaires ?
En plus d'utiliser les utilisateurs et groupes du système, sudo est capable de
créer ses propres listes d'utilisateurs ou de commandes autorisées. En tant que
root, sur server11
, modifier la configuration sudo créée à l'étape précédente
comme suit :
Cmnd_Alias SERVICES = /usr/bin/systemctl status, /usr/bin/top
student ALL=(ALL) NOPASSWD:SERVICES
Questions :
- quelles commandes sudo peut lancer student sans mot de passe ?
- Est-ce qu'il y a une limite sur les arguments ?
- Que se passe-t'il pour les autres commandes ? Pourquoi ?
En tant que root, sur server11, comme présenté au TP 2 étape 4, créer un utilisateur nommé student1.
Depuis la session de l'utilisateur student, lancer la commande suivante :
sudo -u student1 whoami
En tant que root, ajouter la configuration suivante à sudo :
Cmnd_Alias WHO = /usr/bin/whoami
student ALL=(student1) NOPASSWD:WHO
Relancer la commande sudo précédente et analyser la différence.
En tant que root sur server11
, ajouter à la configuration de sudo la ligne
suivante sous les directives Defaults
:
Defaults insults
En tant qu'utilisateur student, lancer une commande via sudo et taper plusieurs fois le mauvais mot de passe ;-)