Attendez... Ne vous jetez pas tout de suite sur votre clavier pour me dire que c'est très dangereux. Mais j'aimerais savoir ce que vous en pensez.
Je considère que quand on a un accès physique à la machine on peut tout faire, donc à quoi bon protéger cette partie? Il faut se protéger des attaques venant de l'extérieur.
Tout d'abord j'ai configuré le lancement automatique de mon serveur X sans mot de passe pour mon compte utilisateur.
Comme cet utilisateur n'a pas besoin de mot de passe pour se connecter je l'ai désactivé.
(dans mon /etc/shadow) :
user:!:13612:0:99999:7:::
Ensuite j'ai voulu m'inspirer de l'utilisation de sudo dans la distribution ubuntu. Je veux donner à cet utilisateur la possibilité d'utiliser les privilèges administrateurs.
Je veux éviter qu'un intrus s'étant connecté sous cet utilisateur puisse utiliser les privilèges root. Mon idée est de donner à cet utilisateur le droit de lancer un terminal en root.
Ma méthode :
- L'utilisateur a le droit de lancer un terminal en tant qu'admin (un utilisateur qui n'est pas root)
- admin a le droit de lancer n'importe quelle commande en tant que root
Voici mon fichier sudoers :
# Autorise un terminal root sans mot de passe
# - D'abord : autoriser user à lancer startxterm en tant qu'admin
user ALL=(admin) NOPASSWD: /usr/local/bin/startxterm
# - Ensuite : autoriser admin à lancer n'importe quoi
admin ALL=(ALL) NOPASSWD: ALL
C'est là que ça devient un peu compliqué. La variable d'environnement DISPLAY permet de rediriger l'affichage (X forwarding), et il faut l'en empêcher. C'est le rôle de startxterm, qui lance un terminal en redéfinissant la variable DISPLAY.
Voici mon programme startxterm :
#include <unistd.h>
#include <stdio.h>
int main(int argc, char**argv) {
char* environ[] = {"DISPLAY=:0.0", "HOME=/home/pi", NULL};
execle("/usr/bin/lxterm",
"lxterm", "+vb", "-bg", "black", "-fg", "white", "-fn", "-misc-fixed-bold-r-normal--18-120-100-100-c-90-iso8859-1", NULL,
environ);
//Ici le processus est remplacé par xterm, donc si la suite s'exécute c'est qu'il y a une erreur.
perror(NULL);
return 0;
}
Ce programme lance un xterm, et, en redéfinissant la variable DISPLAY je m'assure que ce terminal se lancera bien sur mon écran.
Si un intrus obtient un shell en tant qu'utilisateur principal (user), il ne pourra que lancer un terminal sur mon écran, et il ne pourra pas le contrôler.
Dernière étape : le compte root n'est pas utile. Je le désactive. (comme sous Ubuntu)
Par contre ce qui m'inquiète c'est que ce n'est pas du tout standard comme configuration. Est-ce une idée totalement stupide? Je ne pense pas. À ceux qui pensent que si, dites-moi ce qui ne va pas.