GRUB2 – ajouter un mot de passe – proteger le boot – securite

Afin de protéger votre machine, il peut être pertinent de protéger le chargeur de démarrage par mot de passe.

Ceci pour éviter que n’importe qui puisse, en accédant à votre machine physiquement, sans aucun outil, accéder au compte root et opère des modifications.

Il y a 2 façons pour avoir l’accès root, le mode « rescue » (ou mode de récupération) et le passage de paramètres au chargeur de boot, tellement simple (pour mémo, au menu grub, on appuye sur « e », puis on change le « ro » en « rw » et on ajoute en fin de ligne (après quiet splash le plus souvent) init=/bin/bash, et on boote. Voilà on est root en local sur la machine, mince alors.

Bref, évidemment, vous aurez mis un mot de passe au BIOS, en autorisant uniquement le boot sur le disque dur local (pas d’USB, pas de lecteur optique)…et vous aurez crypté votre home (http://forum.inforeseau.com/ubuntu-10-04-crypter-son-home-apres-installation-tuto-memo-t630.html), naturellement, afin que même si quelqu’un vole votre machine/disque dur, ça soit un peu compliqué d’accéder à vos données.

Évidemment, malgré ça, vous n’êtes pas a l’abri du fait que quelqu’un sorte le disque de votre machine, insert un keylogger/rootkit, remette le disque en place, et donc, votre séquence de boot est corrompue, mais c’est un autre problème.

Donc, histoire que ça ne soit pas trop facile localement, on va protéger l’accès à GRUB avec mot de passe, de manière manuelle.

Note : Commencez toujours par faire une copie de sauvegarde des fichiers avant modification, comme ça en cas de soucis, vous bootez sur un livecd et replacez le fichier d’origine !

Pour cela on va éditer le fichier /boot/grub/grub.cfg et ajouter juste avant « ### BEGIN /etc/grub.d/10_linux ### » les lignes suivantes :

set superusers="superadmin"
password superadmin ze_password
password un_utilisateur autre_password

(Note, ces comptes sont indépendants des comptes du système, ce sont des identifiants/mots de passe propre à GRUB).

Ceci suffit déjà à empêcher l’accès au menu « edit » lors du boot ! Ensuite, il faut ajouter une demande de mot de passe pour le mode rescue, à la ligne qui ressemble à ça :

menuentry 'Ubuntu, avec Linux 2.6.32-25-generic (mode de récupération)' --class ubuntu --class gnu-linux --class gnu --class os 

On ajoute à la fin –users un_utilisateur :

menuentry 'Ubuntu, avec Linux 2.6.32-25-generic (mode de récupération)' --class ubuntu --class gnu-linux --class gnu --class os --users un_utilisateur

Et voilà, pour accéder au mode RESCUE (récupération) il faut le mot de passe ! hé hé hé.
Évidemment il faut appliquer cette restriction à chaque version de kernel si vous en avez plusieurs (chaque ligne qui commence par « menuentry »).

Ceci sera par contre modifié en cas de mise à jour du kernel ou en modifiant GRUB par l’interface graphique, donc à refaire à chaque fois si vous choisissez cette méthode « manuelle », mais très didactique.

Pour empêcher la lecture de vos identifiants par un utilisateur, on va enlever les droits de lecture sur le fichier /boot/grub/grub.cfg comme suit :

chmod -r /boot/grub/grub.cfg

Il existe un moyen de faire cette modification de manière permanente (persistant même en cas de mise à jour), en 4 étapes, et de crypter le mot de passe (à partir de grub 1.98), comme expliqué ici :
http://ubuntuguide.net/how-to-setup-boot-password-for-grub2-entries ou là http://www.ubuntugeek.com/how-to-set-grub-2-password-protection.html

Soit, étape 1 :
Ajouter ce qui suit à la fin de /etc/grub.d/00_header :

cat << EOF
set superusers="superadmin"
password superadmin ze_password
password un_utilisateur autre_password
EOF

Note, ceci suffit déjà à empêcher l’accès aux commandes de GRUB2, en appliquant un « sudo update-grub »

Etape 2 (les installations de linux) :
A partir de là on va gérer l’automatisation de la demande d’identifiants pour toutes les entrées de Grub, et ce pour toutes mise à jour.
Pour protéger les installations de Linux sur la partition principale, on va modifier le fichier /etc/grub.d/10_linux comme suit :

printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"

devient :

printf "menuentry '${title}' ${CLASS} --users un_utilisateur {\n" "${os}" "${version}"

Etape 3 (les installations de memtest) :
On va changer toutes les lignes qui contiennent « menuentry » dans /etc/grub.d/20_memtest comme suit :

menuentry "Memory test (memtest86+)" {

en

menuentry "Memory test (memtest86+)" --users un_utilisateur {

Etape 4 (les autres systèmes détéctés) :
On va éditer le fichier /etc/grub.d/30_osprober pour ajouter la demande de mot de passe au menu d’accès aux autres systèmes.
Pour toutes les lignes de ce fichier qui commencent par « menuentry », on ajoute avant l’accolade de fin « –users un_utilisateur » (sans les guillemets).

Voilà, lancez un petit

sudo update-grub

et tout devrait être protégé par mot de passe, et ça sera le cas à chaque mise à jour. En cas de problème, restaurez les fichiers que vous aurez sauvegardé au préalable.

Enfin pour ce qui est de l’utilisation d’un mot de passe crypté, il faut voir ici au point No 7 :
http://www.ubuntugeek.com/how-to-set-grub-2-password-protection.html
En gros, on génère le hash du mot de passe avec l’utilitaire

grub-mkpasswd_pbkdf2

Note : il faut être patient, la génération du hash prend tu temps, avec par défaut une boucle sur 10000 itérations.
Puis au lieu d’utiliser simplement la chaine « password user pass » dans le fichier de config, on utilise la chaine suivante :

password_pbkdf2 un_utilisateur la_chaine_envoyée_par_grub-mkpasswd_pbkdf2

J’ai donc testé ça, et ça fonctionne très bien ! Ca permet, en cas de vol de votre disque, que le voleur ne puisse pas connaître votre mot de passe en clair ! 😀

Note : Pour autoriser de multiples utilisateurs sur un même menu, il suffit d’ajouter des identifiants séparés par des virgules, comme ceci : –users user1,user2 { etc.

Sources :
http://start.ubuntuforums.org/showthread.php?p=9675892 (posts 18/19/20)
http://www.ubuntugeek.com/how-to-set-grub-2-password-protection.html (partie cryptage utilisable que à partir de grub 1.98)
http://ubuntuguide.net/how-to-setup-boot-password-for-grub2-entries (pour préserver les changements au fur et à mesure des mises à jour)
http://grub.enbug.org/Authentification

Tags: , , , ,

dimanche, octobre 17th, 2010 GNU - Linux, Paranoïa, Technologie

1 Commentaire to GRUB2 – ajouter un mot de passe – proteger le boot – securite

  • Theo dit :

    Bonjour,
    A ces lignes la, j’ai oublié de changer le « superadmin » de la 1ere ligne et je n’arrive plus a accéder a mes partitions… Comment faire?
    set superusers=>> « superadmin » <<
    password mon_admin mon_password

  • Ajouter un commentaire


     
    octobre 2010
    L M M J V S D
    « Sep   Nov »
     123
    45678910
    11121314151617
    18192021222324
    25262728293031
     

     
    Suivez moi sur twitter - follow me on twitter
    [FSF Associate Member]
     
    Free Software, Free Society
    VIRTUALISATION :
    Compacter une image virtualbox VDI
    Bon petit tutoriel esxi
    Marche d'appliances vmware
    Installer ESXi sur un disque IDE
    Installer ESXi 3.5 sur un disque USB
    Installer proxmox avec DRBD et migration / réplication à chaud
    Installer OSSEC avec VMware
    Information sur le VDI
    SECURITE - FIREWALL :
    Ouvrir des ports dynamiquement iptables - knockd
    Autre tres bon tuto knockd
    Docs Arp poisoning - Anglais
    Metasploit test de pénétration
    Zone H - sites piratés en temps réel
    Blog invisible things
    Tips protection sécurité wordpress
    Pfsense - distribution firewall opensource - adsl internet failover
    Iproute 2 mini how to - linux advanced routing
    ClearOS - la passerelle sécuritaire lan - wan
    HAUTE DISPONIBILITE :
    CDN - Accélération de la distribution de données
    drbd iscsi ocfs2 dm multipath tutoriel
    Load balancing LVS
    Load balancing opensource list
    HA-Proxy :
    HAproxy - http load balancer
    Simple tutoriel HAproxy
    HAproxy - debian tutoriel
    Centos - Ip failover
    Configuratoin DM-Multipath Redhat
    VMware Doubletake - continuité
    Quelques liens sur la réplication MySQL : Manuel MySQL, chapitre sur la réplication
    Manuel MySQL, Tutoriel clair sur la mise en place
    Autre tuto sur la mise en place de la réplication MySQL
    Références pour optimisation du serveur MySQL
    Utilisation de EXPLAIN mysql pour optimiser vos bases
    optimiser vos bases - requetes et index
    STOCKAGE RESEAU :
    Un outil de clonage disque en reseau
    Internet NAS 250Go 250 accès VPN
    Server ISCSI avec Ubuntu tuto
    ISCSI centos redhat tutoriel
    Gérer et étendre un LVM
    Créer sa piratebox ! trop cool
    Deaddrops, les clés USB dans les murs, aussi cool !
    OPTIMISATION WORDPRESS :
    Télécharger Xenu
    Comment utiliser Xenu
    optimisation hébergement wordpress
    Super howto wordpress (En)
    Test de charge serveur web - Load impact
    VPN - ROUTEUR - LAN:
    Zeroshell - le mini-routeur wifi tout en un
    Retroshare, votre réseau d'échange crypté!
    Openvpn sur centos redhat
    Intégrer Linux dans active directory
    Routage inter-vlan avec Linux
    Routage avec OSPF
    Network Weathermap
    TENDANCES - WEB:
    Boutons twitter
    Analyser les tendances des recherches Google
    Protocole sitemap - robots.txt
    Creer des animations CSS3
    Code php pour interagir avec twitter
    E reputation
    Jquery
    TRUCS ET ASTUCES GNU/LINUX :
    Tuxmachines.org - Actus et tips linux
    Configurer GRUB2 et grub2 ici
    Panoet - en anglais - tips & tricks
    Readylines tips and trick pertinents
    Squid Clamav - proxy antivirus
    Apprendre Unix en 10 minutes
    13 tips sur les expressions régulières
    IE Sous linux IES
    LDAP 2.4 Quickstart guide
    Tutoriel LDAP
    Installation annuaire LDAP
    Serveur Mail Postfix - Dovecot - LDAP - MDS
    Créer un linux personnalisé en ligne - custom linux
    Super site sur linux - en
    Capistrano - déploiement automatisé
    MONITORING :
    Nagios tutoriel et doc
    Nagios plugin NRPE tuto
    Nagios plugin NRPE autre tuto
    Nagios plugin NRPE officiel
    Zabbix - fonctionnalités
    Zabbix - installation
    Guide MRTGsys - grapher la charge locale
    MRTGsys - ajouter des graphs
    MRTGsys - interpréter les données
    Shinken - Monitoring
    Thruk Monitoring webinterface
    Shinken - Tutoriel
    Shinken - Référence chez Nicolargo
    AUTRES LIENS :
    RemixJobs IT jobs
    USB Multiboot
    Reset mot de passe windows
    Java python et autres tips, intéressant !
    Forum inforeseau
    Open Clipart
    Excellent comic en ligne
    Inforeseau.fr
     
    Contrat Creative Commons
    This création is licensed under a Creative Commons Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique 2.0 France License.