autoriser sudo à un autre utilisateur sans mot de passe

46

Je souhaite pouvoir "suivre" un utilisateur spécifique, ce qui me permet d'exécuter n'importe quelle commande sans entrer de mot de passe.

Par exemple:

Si mes identifiants sont user1 et que je veux "su", c'est user2:

Je voudrais utiliser la commande:

su - user2

mais alors il me demande avec

Password:

zio
la source
Demandez à l'autre utilisateur le mot de passe. Au moins, l’autre utilisateur sait ce qui a été fait sous son identifiant.
Nomade mondial
1
Cela n'a rien à voir avec un autre utilisateur physique. Les deux identifiants sont à moi. Je connais le mot de passe lors de la création du compte. Je ne veux tout simplement pas avoir à taper le mot de passe à chaque fois.
Zio
Est-ce que ça irait de ssh à l'utilisateur ou avez-vous besoin d'hériter d'un shell en particulier et avez besoin de su pour fonctionner?
bmike
1
@zio Excellent cas d'utilisation. Ça open -na Skypene marche pas pour toi?
bmike
1
Vous pouvez également essayer de copier le lot d’applications et de changer CFBundleIdentifier .
Lri

Réponses:

66

sudo peut faire ça pour toi :)

Cela nécessite cependant un peu de configuration, mais une fois cela fait, vous ne feriez que:

sudo -u user2 -s

Et vous seriez connecté en tant qu'utilisateur2 sans entrer de mot de passe.

Configuration

Pour configurer sudo, vous devez modifier le fichier de configuration via: visudo. Remarque: cette commande ouvre la configuration à l’aide de l’ viéditeur de texte. Si cela ne vous convient pas, vous devez définir un autre éditeur (using export EDITOR=<command>) avant d’exécuter la ligne suivante. Un autre éditeur de ligne de commande, parfois considéré comme plus facile, est nanopréférable export EDITOR=/usr/bin/nano. Vous avez généralement besoin du privilège de super utilisateur pour visudo:

sudo visudo

Ce fichier est structuré en différentes sections, les alias, puis les valeurs par défaut et enfin, vous avez les règles. C'est ici que vous devez ajouter la nouvelle ligne. Donc, vous naviguez à la fin du fichier et ajoutez ceci:

user1    ALL=(user2) NOPASSWD: /bin/bash

Vous pouvez également remplacer /bin/bashpar ALLet vous pouvez alors lancer une commande en tant que user2 sans mot de passe: sudo -u user2 <command>.

Si vous voulez pouvoir changer d’utilisateur, utilisez simplement

user1    ALL=(ALL) NOPASSWD: /bin/bash

Mise à jour

Je viens de voir votre commentaire concernant Skype. Vous pourriez envisager d'ajouter Skype directement au fichier de configuration de sudo. Je suppose que Skype est installé dans votre dossier Applications :

user1    ALL=(user2) NOPASSWD: /Applications/Skype.app/Contents/MacOS/Skype

Ensuite, vous appelez depuis le terminal:

sudo -u user2 /Applications/Skype.app/Contents/MacOS/Skype
Huygens
la source
C’est beaucoup moins compliqué que l’idée des clés ssh, utilisez-le à moins que vous n’ayez également besoin des clés ssh pour un accès à distance.
bmike
2
Une chose à noter du point de vue de la sécurité est que la spécification d'une commande spécifique implique qu'il s'agisse d'une commande en lecture seule pour l'utilisateur1; Sinon, ils peuvent remplacer la commande par quelque chose d'autre et l'exécuter en tant qu'utilisateur2. Et si cela ne vous intéresse pas, vous pouvez également spécifier que l'utilisateur1 peut exécuter n'importe quelle commande en tant qu'utilisateur2 et donc avoir une configuration sudo plus simple.
Stan Kurdziel
@StanKurdziel bon point! Bien que ce soit quelque chose dont il faut être conscient, il est très rare que les utilisateurs puissent écrire les exécutables système à moins d'être root, mais dans ce cas, vous n'avez pas besoin de sudo ;-) Mais vous avez raison d'ajouter ce commentaire, car il est si rarement utilisé que je l'ai probablement oublié plus d'une fois.
Huygens
Pour obtenir plus près du comportement au su - user2lieu de su user2, les commandes devraient impliquer probablement tous sudo -u user2 -i, afin de simuler une connexion initiale user2
Gert van den Berg
4

Je mettrais en place des clés SSH publiques / privées pour le deuxième compte et stocker la clé dans le premier compte.

Ensuite, vous pouvez exécuter une commande comme:

 ssh user@localhost -n /Applications/Skype.app/Contents/MacOS/Skype &

Vous auriez toujours des problèmes de confusion avec Skype, car deux instances sont en cours d'exécution sur un même compte d'utilisateur et les fichiers lus / écrits par ce programme peuvent être en conflit. Cela pourrait également fonctionner assez bien pour vos besoins et vous n’auriez pas besoin d’un iPod touch pour exécuter votre deuxième instance Skype.

bmike
la source
1
C'est une bonne solution sécurisée pour le cas général de la connexion sans mot de passe à n'importe quel compte sur n'importe quel hôte, mais je dirais que c'est probablement excessif lorsque les deux comptes sont sur le même hôte et appartiennent au même utilisateur.
calum_b
@scottishwildcat C'est bien plus sûr que l'alternative de scripter le mot de passe et de le saisir en texte clair ou d'utiliser une variable et de stocker le mot de passe dans le trousseau et d'utiliser un outil comme expectle script d'interaction. Je viens d'utiliser sudo su - blahet tapez mon mot de passe. Je pense que l’autre réponse couvre assez bien sudo pour que cela reste un commentaire.
bmike
Oh, je ne proposais certainement pas de supprimer votre réponse… Je n'ai même pas voté à la baisse, c'est une excellente réponse.
calum_b
Nous semblons être totalement d'accord - merci pour l'ajout - n'hésitez pas à l'éditer dans la réponse si vous pouvez l'améliorer.
bmike
La solution acceptée ( sudo -u user2 <...>) présente l’avantage de ne pas pouvoir être utilisée à distance, ce qui peut contribuer à la sécurité: il n’existe pas de clé privée pour l’utilisateur1 pouvant être volée.
Gert van den Berg