Peut-on utiliser un fichier clé comme mot de passe pour sudo?

11

Le contexte

J'aime travailler en public sur mon ordinateur portable, mais j'aime aussi utiliser sudo sans mot de passe. Sur la base de ce que je sais maintenant, j'utiliserais l' NOPASSWDoption dans mon sudoersfichier, mais bien sûr, n'importe qui pourrait utiliser sudo comme bon lui semble.

Une pensée importante qui me vient à l'esprit est que des programmes de verrouillage existent. Cependant, je préférerais utiliser un lecteur flash (et l'utiliser uniquement pour sudo) parce que (1) il est plus rapide, (2) plus facile que d'entrer mon mot de passe, et (3) je ne me soucie pas que les gens accèdent à mon contenu ni fassent du mal choses: l'ordinateur portable serait en public autour d'autres personnes, et la seule propriété intellectuelle sur mon ordinateur portable est un projet Angular très basique.

De plus, moi-même et d'autres personnes souhaiterons peut-être empêcher l'utilisation abusive de sudo sur un ordinateur qui ne fonctionne pas dans un environnement X ou Wayland. Mon travail actuel nécessite un navigateur Web moderne, mais si jamais j'ai la chance de ne pas utiliser X et simplement d'utiliser un multiplexeur, je le fais - mon ordinateur portable est un peu vieux et lent.

Question

Ce que je voudrais faire, c'est mettre un fichier clé sur un lecteur flash, et simplement brancher le lecteur flash lorsque je suis à l'ordinateur portable, et le retirer lorsque je m'éloigne de lui.

Voici donc mes trois questions dérivées de ce problème:

  1. Est-ce possible avec sudo tel quel?
  2. Sinon, pourrais-je écrire un programme qui me permette de le faire?
  3. Si oui, quelle langue serait la meilleure pour écrire ce programme?

(4. [Peut-être une question étrangère] Ce package pourrait-il être séparé ou devrait-il être un fork de sudo?)

Remarque

Si cela est pertinent, ma configuration est Arch Linux avec bspwm, aucun environnement de bureau. La plupart de mon travail est le développement web dans urxvt / vim et le contrôle avec Chrome.

Gage Sorrell
la source
1
Est - pam_usb répondre à vos besoins?
StrongBad
@StrongBad Oh ... oui. On dirait qu'il ne fait pas immédiatement juste sudo et fait login et sudo ensemble, mais cela n'a pas d' importance pour moi. Merci!
Gage Sorrell
2
D'accord, pour clarifier, vous souhaitez rester connecté en permanence et simplement empêcher les gens d'utiliser sudo sous votre compte.
StrongBad
@StrongBad Correct.
Gage Sorrell
Vous pourrez peut-être configurer quelque chose en utilisant l' rootpwindicateur dans les /etc/sudoersfichiers et en configurant pam_usbla connexion root.
RubberStamp

Réponses:

3

Je ne suis pas sûr de comprendre pourquoi l' NOPASSWDoption ne satisfait pas à elle seule vos exigences, mais si vous voulez exiger la présence du lecteur flash, je peux penser à quelque chose qui pourrait presque faire ce que vous recherchez.

Il s'agit plus d'une solution de contournement, mais vous pouvez créer un utilisateur administratif local, par exemple superuser, et lui accorder des sudodroits sans mot de passe , c'est-à-dire ajouter la ligne suivante à votre /etc/sudoersfichier:

superuser ALL=(ALL) NOPASSWD:ALL

Vous pouvez ensuite désactiver la connexion par mot de passe et configurer l'authentification SSH clé uniquement pour cet utilisateur, c'est-à-dire exécuter passwd -l superuseret ajouter la strophe suivante à votre /etc/ssh/sshd_config:

Match user superuser
PasswordAuthentication no

Créez ensuite une paire de clés SSH pour cet utilisateur. Ajoutez la clé publique à /home/superuser/.ssh/authorized_keyset mettez la clé privée sur votre lecteur flash. Ensuite, lorsque vous souhaitez utiliser le superusercompte, branchez votre lecteur flash et ssh dans le superusercompte à l'aide de votre clé privée. Et voilà! Vous avez maintenant sans mot sudode passe pour votre utilisateur. Bien sûr, vous devrez toujours quitter vos sessions shell lorsque vous aurez terminé - débrancher le lecteur flash ne sera pas suffisant. Bien que je suppose que vous pouvez également configurer un crochet de précommande pour vérifier la clé privée et quitter automatiquement si elle n'est pas présente (ou si elle n'est pas valide).

igal
la source
une réponse simple pour expliquer pourquoi vous pourriez vouloir faire cela. pour ce serveur, j'essaie de revenir, je n'ai que la clé racine, pas d'accès root ssh, je suis verrouillé dans l'ec2-user, que sudo demande à un pw que je n'ai pas. j'ai scp'd ma clé racine sur le serveur, donc je voudrais idéalement maintenant utiliser cette clé pour obtenir un accès sudo, alors je peux réparer les choses.
Brian Thomas