Nous avons environ 2500 serveurs Linux. Nous avons un serveur JumpStart, à partir duquel nous pouvons SSH sur n'importe quel serveur pour les tâches associées à l'administrateur système. Nous avons déployé un seul fichier d'identité et en utilisant la même clé publique sur tous les serveurs. Mais c'est une menace de sécurité énorme.
Nous voulons déployer différentes touches pour chaque serveur. Mais cela créerait un grand nombre de clés et cela rendrait difficile à gérer. S'il vous plaît suggérer une solution à partir de laquelle je peux le faire facilement.
Freepipa fait assez bien la direction clé de la clé. Je l'utilise avec succès à la maison mais de nombreuses entreprises l'utilisent en production (la liste de diffusion des utilisateurs Freeipa-utilisateurs est hyper-active). C'est le projet logiciel libre en amont sur lequel est basé sur la solution de gestion d'identité de Red Hat. Il existe également des devs rouges modérateurs et aident à la mailinglist des utilisateurs Freeipa.
Fondamentalement, il s'agit d'un service de type Active Directory pour les environnements UNIX/Linux. Il peut également synchroniser avec la publicité. Il a * nix caractéristiques natales telles que NFS Automounts, stratégies centralisées sudo, etc.
Chaque utilisateur peut ajouter sa clé SSH à son profil Freeipa. Ensuite, SSHD peut être configuré pour utiliser un AutocalisékeysCommand fourni par le package SSSD qui serait configuré pour interroger le serveur FreepiAf. Combinée avec des politiques sudo, vous obtenez une escalade de privilège et Audit (Qui Sudo'ed).
En tant que projet RedHAT, il s'agit d'un one-liner à installer sur Fedora ou Centos, mais j'ai installé et configuré avec succès des boîtes Debian en tant que clients Freepipa. J'installe le serveur d'authentification sur un serveur Fedora, qui est sa plate-forme prise en charge de manière native.
Pour 2500 hôtes, vous pouvez déjà avoir un système de gestion de la configuration, mais vous pouvez utiliser Saltstack si vous ne le faites pas. Nous avons cela pour la racine Auth:
user1auth:
ssh_auth:
- present
- user: root
- source: salt://resources/ssh_keys/user1
user2auth:
ssh_auth:
- present
- user: root
- source: salt://resources/ssh_keys/user2
Vous n'avez pas besoin d'avoir la clé privée sur l'hôte de saut. Utilisez simplement le transfert de l'agent lorsque vous vous connectez: ssh -A root@Host
.
Il y a aussi d'autres systèmes (Lionion, Cfengine, par exemple).
Le problème que je vois avec l'utilisation de la même clé SSH partout est le manque de responsabilité.
Je tiens plutôt que chaque utilisateur a sa propre clé ou des touches SSH, et utilisez un système centralisé d'authentification et d'autorisation.
De cette façon, les clés publiques n'ont même pas besoin d'être distribuées aux systèmes cible et peuvent être stockées dans un service d'annuaire central comme Freeipa .
En plus de gain de la responsabilité, vous avez également la capacité de définir des politiques de contrôle d'accès à des rôles (RBAC) à base d'ingéniosité.
Un fichier d'identité unique sur chaque serveur viole la plupart des cadres de sécurité, y compris PCI, HIPAA, etc. Chaque utilisateur humain a besoin de leur propre compte, et ces comptes doivent pouvoir être supprimés.
Il existe de nombreuses solutions commerciales et open source qui peuvent gérer cela pour vous. Par exemple, userify (où je travaille), gestionnaire de clé universel, zone clé SSH, etc.
Votre choix devrait dépendre de vos besoins et de vos budgets, ainsi que les fonctionnalités que vous trouvez importantes. Par exemple, de nombreux systèmes centralisés sont tellement centralisés au point que vous ne pourrez peut-être pas vous connecter à aucun de vos serveurs, si, par exemple, votre serveur LDAP est en panne. Il est important de pouvoir gérer vos autorisations SSH de manière centralisée, tout en décentralisant l'opération réelle pour une plus grande fiabilité et un contrôle.
Voir aussi cette discussion d'inclinaison:
Copier la clé publique sur tous les serveurs que vous vous connectez est généralement la façon dont les choses sont faites avec SSH. Si ce que vous avez fait est de créer un clavier privé/public sur le serveur Jumpstart et copié la touche Public sur ~/.ssh/authorized_keys
Fichier sur l'hôte Si vous souhaitez, c'est ce qui est (partiellement) le moyen accepté de sécuriser une connexion distante via SSH. Autres choses à considérer pour que Ssh Ssh plus approfondi sont:
/etc/ssh/sshd_config
Et mettre PasswordAuthentication No
et PubkeyAuthentication yes
LogLevel
dans /etc/ssh/sshd_config
à VERBOSE
puis surveiller /var/log/auth.log
pour les anomalies./etc/security/access.conf
Pour autoriser uniquement les connexions par l'utilisateur de certaines IP/etc/pam.d/login
Et mettre account required pam_access.so
Pour activer les modifications apportées à access.conf
Déploiement d'une "clé différente de chaque serveur" semble signifier que vous voulez une clé différente publique dans le ~/.ssh/authorized_keys
sur chaque serveur. La raison de cela n'est pas claire pour moi, mais si vous le devez, je créerais un fichier texte sur le serveur JumpStart avec un hôte sur chaque ligne. Utilisez une boucle for
pour analyser le fichier et exécuter ssh-keygen -f $line_from_file
Pour créer une paire de clés pour chaque hôte. Vous pouvez également utiliser le même for
boucle sur SSH dans chaque hôte et ajouter le pubkey à ~/.ssh/authorized_keys
à l'aide de sed -i
ou quelque chose.
Essayez Bastillion - https://www.bastillion.io/
Facile à installer, les utilisateurs gèrent leurs propres clés SSH en fonction des profils qui leur ont été attribués.
https://www.bastillion.io/docs/using/keymanagement/
(Divulgation: Il s'agit d'un produit que j'ai développé. Il est open source et libre d'utiliser sous le fichier AGPL ou vous pouvez acheter une licence commerciale)