Journal Installation pam_usb

Posté par  .
Étiquettes : aucune
1
20
sept.
2004
Rapel bref
pam_usb est un module PAM permettant l'authentification sous linux par échange de clé DSA (public/privée). La clé privée étant stockée de manière privilégiée sur une clé USB -- ça devrait aussi fonctionner avec n'importe quel média amovible montable sous linux à priori --.

Installation du package
Ca depend de votre distribution, sous gentoo un petit emerge pam_usb est suffisant. Le package doit installer un "pam_usb.so" dans les libraries, sous gentoo c'est "/lib/security/pam_usb.so" (si je me souviens bien).

Génération des clés
La génération des clés se fait grâce à "usbadm" installé par le package pam_usb :

    monter la clé usb (ex: mount -t vfat /dev/sda1 /mnt/usbkey),
    Génération des clés DSA usbadm keygen [mon_mountpoint] [mon_user] [taille_en_bit_de_la_clé] (ex: usbadm keygen /mnt/usbkey toto 2048).


Pour plus de sécurité il est possible de "chiffrer" la clé privée en 3des ou blowfish avec un usbadm cipher [mon_mountpoint] [mon_user] (3des|blowfish). Il est également possible de ne permettre l'authentification que par une clé usb connue en gérant une liste de numéro de série avec usbadm addserial (à faire avec le clé branchée).

Configuration
Pour "pluggé" le module pam_usb au niveau du login linux il faut modifier le fichier "/etc/pam.d/login" et rajouter avant la ligne du style auth request [un_path]/(pam_stack.so|pam_unix.so) une nouvelle ligne auth required [un_path]/pam_usb.so force_device=[mon_dev] fs=[ma_fs] check_if_mounted=1 (ex: auth /lib/security/pam_usb.so force_device=/dev/sda1 fs=vfat check_if_mounted=1 debug=1).

Finitions
Avec le "required" dans la ligne pour "pam_usb.so" la ligne contenant "pam_stack.so" (ou "pam_unix.so" en fonction des distributions) peut être supprimée si vous ne voulez l'authentification que par clé usb. Avec les deux ensemble le mot de passe sera bien demandé sur la console mais ne fonctionnera pas si la clé n'est pas insérée.

Le "required" pour "pam_usb.so" peut également être remplacé par "sufficient" (ex: auth sufficient /lib/security/pam_usb.so [...options...]) pour utiliser soit l'authentification par clé usb, soit l'authentification par login en console.

Autres...
Le module "pam_usb" peut être également "pluggé" sur tous les autres systèmes sous linux utilisant pam, lister le répertoire "/etc/pam.d", par exemple pour modifier l'authentification du "sudo" et y adjoindre l'authentification par clé usb il suffit de faire le même type de configuration mais dans le fichier "/etc/pam.d/sudo" (au lieu de "/etc/pam.d/linux").
  • # SSH ?

    Posté par  . Évalué à 2.

    Merci pour ce mini-guide !

    Ce genre de choses m'interesse, mais comment cela se passe pour les programmes comme kdm/gdm ?
    Même chose, pour les connexion à distances comme SSH ? Ça parait difficile de mettre la clé USB à distance !!
    • [^] # Re: SSH ?

      Posté par  . Évalué à 2.

      Pour kdm/gdm/xdm il faut tout simplement modifier les fichiers correspondants dans "/etc/pam.d" (c-à-d "/etc/pam.d/xdm", "/etc/pam.d/gdm" ou "/etc/pam.d/kdm").

      Pour le ssh il existe également une solution d'exchange de clé implementée hors pam et en standart par ssh (voir http://linuxfr.org/tips/31.html(...)).
      En résumé tu généres le couple clé privée/clé publique sur ta bécane, sur les dernières version de openssh c'est ssh-keygen -t rsa ("rsa" peut être remplacé par "dsa" mais j'ai cru voir que c'était un tout petit peu moins "secure"), ensuite du copie (en ftp, en ssh, transfert sur clé usb ;-) enfin comme tu veux) le contenu de la clé publique (en général ~/.ssh/id_rsa) dans le fichier ~/.ssh/authorized_keys du serveur. Pour copier en général je fais bzip2 -9c ~/.ssh/id_rsa | ssh mon_user@server 'bzip2 -dc >> ~/.ssh/authorized_keys.

      Si tout va bien le ssh ne te demanderas plus le mot de passe de l'utilisateur sur le serveur mais la passphrase pour la clé privé en local et donc l'authorisation sur le serveur se fait bien par exchange de clé et le mot de passe ne passe plus sur le réseau.

      P.S.: Si quelqu'un avait un solution pour faire fonctionner ça en clés DSA entre un client SSH Version OpenSSH_2.2.0p1, protocol versions 1.5/2.0.
      Compiled with SSL (0x0090581f). et un serveur OpenSSH_3.5p1, SSH protocols 1.5/2.0, OpenSSL 0x0090701f, j'ai beau avoir essayé pas mal de chose la différence de version OpenSSL à l'air bloquante pour la compréhension des clé.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.