Utilisez un binaire wrapper
Pour ce cas d'utilisation particulier (voir la note importante ci-dessous), une possibilité est de créer un utilisateur (par exemple support-ssh) spécifiquement pour ces connexions SSH sortantes, puis d'installer un petit binaire wrapper qui s'exécute /usr/bin/ssh.
- Ne copiez pas + chmod le
sshbinaire lui-même, car vous ne vous souviendrez pas de le recopier à chaque fois que vous appliquez des mises à jour de sécurité.
- Et ne l'utilisez pas en
roottant qu'utilisateur plus privilégié, pour des raisons en lesquelles j'ai confiance sont évidentes.
Il s'agit d'une alternative fonctionnellement équivalente à l'utilisation sudopour élever les privilèges à ceux du support-sshcompte avec les compromis suivants:
- C'est plus petit et plus léger que
sudo, donc il y a moins de risques d'erreur de configuration qui s'ouvre plus que vous ne le pensiez.
- Il est de votre responsabilité de le coder correctement - ne le faites que si vous êtes extrêmement prudent et (idéalement) avez une expérience du codage critique pour la sécurité.
- Il peut être personnalisé pour être plus spécifique que
sudo(mais plus vous écrivez de code, plus vous devez auditer pour la sécurité).
Le binaire wrapper doit être défini HOMEsur le support-sshrépertoire personnel de l' utilisateur, de sorte que sshla ssh_configclé privée et appropriée sera récupérée . Mais l'utilisateur invoquant ne devrait pas être autorisé à lire ~support-ssh/.ssh/ou à lire son contenu.
L'emballage peut être aussi simple que:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv)
{
setenv("HOME", "/home/support-ssh", 1);
/* allow only a single, non-option argument */
if (argc!=2 || *argv[1]=='-') {
fprintf(stderr, "Usage: %s <hostname>", argv[0]);
exit(EXIT_FAILURE);
}
execv("/usr/bin/ssh", argv);
return EXIT_FAILURE;
}
Vous voudrez peut-être être plus restrictif et vérifier que l'argument se argv[1]trouve dans un ensemble de noms d'hôtes autorisés. Ou moins restrictif et autorisez (un sous-ensemble de) les arguments d'option. Vous pouvez remplacer complètement les variables d'environnement (mais garder les importants tels que TERM, LC_*, etc.); notez cela LD_LIBRARY_PATHet LD_PRELOADsont particulièrement dangereux.
Un programme wrapper similaire pourrait être fourni scpsi nécessaire.
Une note sur l'applicabilité
Cette réponse répond aux circonstances spécifiques de la question, où les utilisateurs sont contractuellement obligés de suivre les procédures, et il y a des sanctions (par exemple, licenciement) pour les violer. Cela suppose que vous souhaitiez empêcher les employés de copier des clés privées avec désinvolture, plutôt que d'empêcher un attaquant déterminé d'obtenir un accès non autorisé.
Je suis d'avis que la sécurité est obtenue à la fois par des moyens de défense techniques et non techniques, et que l'équilibre obtenu ici ou en utilisant sudoest approprié à la situation présentée.