Les utilisateurs connectés sur mon serveur Linux devraient pouvoir ssh vers une machine distante spécifique avec un compte par défaut. L'authentification sur la machine distante utilise la clé publique, donc sur le serveur la clé privée correspondante est disponible.
Je ne veux pas que les utilisateurs du serveur puissent réellement lire la clé privée. Fondamentalement, le fait qu'ils aient accès au serveur leur donne le droit ssh, et leur suppression du serveur devrait également interdire la connexion à la machine distante.
Comment puis-je autoriser les utilisateurs à ouvrir une connexion ssh sans leur donner accès en lecture à la clé privée?
Mes réflexions jusqu'à présent: évidemment, l'exécutable ssh doit être capable de lire la clé privée, il doit donc s'exécuter sous un autre utilisateur sur le serveur qui en a le droit. Une fois la connexion ssh établie, je peux ensuite la "transmettre" à l'utilisateur afin qu'il puisse saisir des commandes et interagir avec la machine distante.
- Est-ce une bonne approche?
- Comment dois-je implémenter le transfert?
- Comment l'utilisateur peut-il initier la connexion (c'est-à-dire l'exécution du ssh par l'utilisateur qui a des droits de lecture sur la clé)?
- Y a-t-il une faille de sécurité? - si les utilisateurs peuvent exécuter un ssh en tant qu'autre utilisateur, peuvent-ils alors faire tout ce que l'autre utilisateur pourrait (y compris, lire la clé privée)?
la source
~/.ssh/authorized_keys
fichier?Réponses:
C'est une des raisons qui
sudo
existe. Permettez simplement à vos utilisateurs d'exécuter une seule commande avec uniquement les options de ligne de commande pré-autorisées et les contournements les plus évidents sont résolus. par exempleconfigure pour
sudo
que tous les membres du groupeusers
puissent exécuter la commande ssh en tant qu'utilisateur some_uid sans entrer leur propre mot de passe (ou celui du compte some_uid) lorsqu'ils exécutent:Supprimez l'
NOPASSWD:
option pour forcer les utilisateurs à saisir leur propre mot de passe avant de se connecter à l'hôte distant.Peut-être configurer un alias ou un script wrapper pour la commodité de vos utilisateurs, car il
sudo
est assez difficile d'utiliser les bons arguments.la source
Cela semble être un bon cas d'utilisation pour l'authentification basée sur l'hôte. Il s'agit d'une méthode d'authentification où SSH n'utilise pas la clé d' un utilisateur individuel sur la machine locale (dans ce cas, votre serveur) pour s'authentifier; à la place, il utilise la clé privée de l' hôte , celle stockée dans
/etc/ssh/
et qui n'est lisible que parroot
.Pour configurer cela, vous devrez créer un fichier nommé
.shosts
sur la machine distante, dans le répertoire personnel de l'utilisateur sous lequel vous souhaitez que les gens se connectent (pas dans~/.ssh
). Le fichier doit avoir le contenuoù
server-hostname
est le nom de votre serveur et+
est un signe plus littéral qui sert de caractère générique signifiant "n'importe quel utilisateur".Vous devrez également vous assurer que la machine distante peut vérifier la clé d'hôte du serveur, ce qui signifie que la clé d'hôte du serveur doit être répertoriée dans
/etc/ssh/ssh_known_hosts
ou~/.ssh/known_hosts
sur la machine distante. Si ce n'est pas déjà le cas, vous pouvez le configurer en vous connectant à la machine distante et en exécutantUne fois que vous avez configuré ces étapes, vous pouvez supprimer la clé privée sur le serveur entièrement, si vous n'en avez pas besoin pour autre chose. (Et si vous le faites, vous pouvez toujours le configurer pour qu'il ne soit lisible que par
root
ou quelque chose.)Vous pouvez également facilement faire des choses comme autoriser ou refuser à certains utilisateurs l'accès à la machine distante. Consultez les pages de manuel de
ssh
ethosts.equiv
pour plus de détails.Un problème avec cette configuration est que les utilisateurs qui se connectent à la machine distante peuvent modifier
.shosts
. Il n'y a rien qu'ils puissent faire qui leur permettrait de se connecter à la machine distante en tant qu'utilisateur différent, mais ils pourraient couper leur accès ou celui des autres à la machine distante. Si c'est un problème, vous pourriez être en mesure d'.shosts
écrire uniquement parroot
ou quelque chose - je ne sais pas si cela fonctionne, mais vous pouvez l'essayer et voir. (D'autres méthodes comme celle avecsudo
sont sujettes au même risque, car un utilisateur peut toujours supprimer~/.ssh/authorized_keys
.)la source
sudo
option pourrait être meilleure pour un environnement verrouillé, cependant ...