41 votes

Plusieurs administrateurs système Linux travaillant en tant que root

Dans notre équipe, nous avons trois administrateurs système Linux expérimentés chargés d'administrer quelques dizaines de serveurs Debian. Auparavant, nous avons tous travaillé en tant que root en utilisant l'authentification par clé publique SSH. Mais nous avons eu une discussion sur quelle est la meilleure pratique pour ce scénario et nous n'avons pu nous mettre d'accord sur rien.

La clé publique SSH de tout le monde est placée dans ~root/.ssh/authorized_keys2

  • Avantage : facile à utiliser, le transfert d'agent SSH fonctionne facilement, peu de surcharge
  • Inconvénient : manque d'audit (on ne sait jamais quel "root" a apporté un changement), les accidents sont plus probables

Utilisation de comptes personnalisés et sudo

De cette manière, nous nous connecterions avec des comptes personnalisés en utilisant des clés publiques SSH et utiliserions sudo pour effectuer des tâches ponctuelles avec les permissions de root. De plus, nous pourrions nous donner le groupe "adm" qui nous permet de consulter les fichiers journaux.

  • Avantage : bon audit, sudo nous empêche de faire des choses idiotes trop facilement
  • Inconvénient : le transfert d'agent SSH ne fonctionne plus, c'est une corvée car presque rien ne peut être fait en tant que non-root

Utilisation de plusieurs utilisateurs UID 0

C'est une proposition très originale de l'un des administrateurs système. Il propose de créer trois utilisateurs dans /etc/passwd ayant tous l'UID 0 mais des noms de connexion différents. Il affirme que ce n'est pas réellement interdit et permet à tout le monde d'avoir l'UID 0 tout en étant capable d'auditer.

  • Avantage : le transfert d'agent SSH fonctionne, l'audit pourrait fonctionner (non testé), pas de problème avec sudo
  • Inconvénient : cela semble assez peu recommandé - je n'ai trouvé aucune documentation qui l'autorise comme méthode permise

Que suggéreriez-vous ?

64voto

palswim Points 239

La deuxième option est la meilleure à mon avis. Comptes personnels, accès sudo. Désactiver complètement l'accès root via SSH. Nous avons quelques centaines de serveurs et une demi-douzaine d'administrateurs système, c'est ainsi que nous procédons.

Comment l'agent forwarding se casse-t-il exactement?

Aussi, si c'est si pénible d'utiliser sudo devant chaque tâche, vous pouvez invoquer un shell sudo avec sudo -s ou passer à un shell root avec sudo su -

9voto

Tom Points 10766

En ce qui concerne la troisième stratégie suggérée, en dehors de l'examen des options useradd -o -u userXXX tel que recommandé par @jlliagre, je ne suis pas familier avec l'exécution de plusieurs utilisateurs avec le même uid. (donc si vous décidez de le faire, je serais intéressé si vous pouviez mettre à jour le message avec les problèmes (ou succès) qui se posent...)

Je suppose que ma première observation concernant la première option "La clé publique SSH de tout le monde est placée dans ~root/.ssh/authorized_keys2" est que à moins que vous ne travailliez absolument jamais sur d'autres systèmes;

  1. alors au moins une partie du temps, vous devrez travailler avec des comptes utilisateurs et sudo

La deuxième observation serait que si vous travaillez sur des systèmes qui aspirent à respecter les normes HIPAA, PCI-DSS ou des choses comme CAPP et EAL, alors vous devrez contourner les problèmes de sudo parce que;

  1. C'est une norme de l'industrie de fournir des comptes utilisateurs individuels non-root, qui peuvent être audités, désactivés, expirés, etc, généralement en utilisant une base de données utilisateur centralisée.

Donc; Utilisation de comptes personnalisés et de sudo

Il est malheureux qu'en tant qu'administrateur système, presque tout ce que vous aurez besoin de faire sur une machine distante nécessitera des autorisations élevées, cependant il est agaçant que la plupart des outils et utilitaires basés sur SSH soient buggés lorsque vous êtes en sudo

Par conséquent, je peux vous transmettre quelques astuces que j'utilise pour contourner les inconvénients de sudo que vous mentionnez. Le premier problème est que si la connexion en tant que root est bloquée en utilisant PermitRootLogin=no ou que vous n'avez pas la clé ssh en tant que root, alors cela complique le transfert de fichiers avec SCP.

Problème 1 : Vous voulez copier des fichiers depuis le côté distant, mais ils nécessitent un accès root, cependant vous ne pouvez pas vous connecter à la boîte à distance en tant que root directement.

Solution ennuyeuse : copiez les fichiers dans le dossier personnel, changez le propriétaire et copiez avec scp.

ssh userXXX@systemeàdistance, sudo su - etc, cp /etc/somefiles à /home/userXXX/somefiles, chown -R userXXX /home/userXXX/somefiles, utilisez scp pour récupérer les fichiers à distance.

Très ennuyeux en effet.

Solution moins ennuyeuse : sftp prend en charge le drapeau -s sftp_server, donc vous pouvez faire quelque chose comme ce qui suit (si vous avez configuré le sudo sans mot de passe dans /etc/sudoers);

sftp  -s '/usr/bin/sudo /usr/libexec/openssh/sftp-server' \
userXXX@hôteàdistance:/etc/resolv.conf 

(vous pouvez également utiliser cette méthode de contournement avec sshfs, mais je ne suis pas sûr que ce soit recommandé... ;-)

Si vous n'avez pas les droits sudo sans mot de passe, ou pour une raison configurée cette méthode ci-dessus est cassée, je peux suggérer une autre méthode de transfert de fichiers moins ennuyeuse, pour accéder aux fichiers racine à distance.

Méthode Ninja de Port Forward :

Connectez-vous à l'hôte distant, mais spécifiez que le port distant 3022 (peut être n'importe quel port libre, et non réservé aux administrateurs, ie >1024) doit être renvoyé vers le port 22 du côté local.

 [utilisateurlocal@machinelocale ~]$ ssh userXXX@hôteàdistance -R 3022:localhost:22
Dernière connexion : Lun Mai 21 05:46:07 2012 depuis 123.123.123.123
------------------------------------------------------------------------
C'est un système privé; blah blah blah
------------------------------------------------------------------------

Obtenez les droits root de la manière habituelle...

-bash-3.2$ sudo su -
[root@hôteàdistance ~]# 

Maintenant vous pouvez utiliser scp dans l'autre sens pour éviter l'étape ennuyeuse de copier les fichiers;

[root@hôteàdistance ~]#  scp -o NoHostAuthenticationForLocalhost=yes \
 -P3022 /etc/resolv.conf utilisateurlocal@localhost:~
motdepasse utilisateurlocal@localhost: 
resolv.conf                                 100%  
[root@hôteàdistance ~]#  

Problème 2 : Transfert d'agent SSH : Si vous chargez le profil root, par exemple en spécifiant un shell de connexion, les variables d'environnement nécessaires pour le transfert d'agent SSH telles que SSH_AUTH_SOCK sont réinitialisées, donc le transfert d'agent SSH est "cassé" sous sudo su -.

Réponse à moitié cuite :

N'importe quelle chose qui charge correctement un shell root, va réinitialiser l'environnement, cependant il y a une légère solution de contournement que vous pouvez utiliser lorsque vous avez BESOIN à la fois des autorisations root et de la possibilité d'utiliser l'Agent SSH, EN MÊME TEMPS

Cela crée une sorte de profil chimaère, qui ne devrait vraiment pas être utilisé, parce que c'est un hack méchant, mais cela est utile lorsque vous devez copier des fichiers depuis l'hôte distant en tant que root, vers un autre hôte distant.

Quoi qu'il en soit, vous pouvez activer la possibilité pour votre utilisateur de conserver ses variables d'environnement, en définissant ce qui suit dans sudoers;

 Defaults:userXXX    !env_reset

Cela vous permet de créer des environnements de connexion hybrides méchants comme ceci;

connectez-vous normalement;

[utilisateurlocal@machinelocale ~]$ ssh userXXX@hôteàdistance 
Dernière connexion : Lun Mai 21 12:33:12 2012 depuis 123.123.123.123
------------------------------------------------------------------------
C'est un système privé; blah blah blah
------------------------------------------------------------------------
-bash-3.2$ env | grep SSH_AUTH
SSH_AUTH_SOCK=/tmp/ssh-qwO715/agent.1971

créez un shell bash, qui exécute /root/.profile et /root/.bashrc. mais conserve SSH_AUTH_SOCK

-bash-3.2$ sudo -E bash -l

Ainsi ce shell a les autorisations root, et le $PATH root (mais un répertoire personnel buggé...)

bash-3.2# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
bash-3.2# echo $PATH
/usr/kerberos/sbin:/usr/local/sbin:/usr/sbin:/sbin:/home/xtrabm/xtrabackup-manager:/usr/kerberos/bin:/opt/admin/bin:/usr/local/bin:/bin:/usr/bin:/opt/mx/bin

Mais vous pouvez utiliser cette invocation pour faire des choses qui nécessitent du sudo root à distance, mais aussi l'accès à l'agent SSH comme ceci;

bash-3.2# scp /root/.ssh/authorized_keys ssh-agent-user@quelque-autre-hôte-à-distance:~
/root/.ssh/authorized_keys              100%  126     0.1KB/s   00:00    
bash-3.2#

2voto

MagicAndi Points 10128

La 3ème option semble idéale - mais l'avez-vous réellement essayée pour voir ce qu'il se passe? Bien que vous puissiez voir les noms d'utilisateur supplémentaires à l'étape d'authentification, toute recherche inversée renverra la même valeur.

Permettre un accès SSH direct en tant que root est une mauvaise idée, même si vos machines ne sont pas connectées à Internet / utilisent des mots de passe forts.

En général, j'utilise 'su' plutôt que sudo pour l'accès en tant que root.

2voto

Milind R Points 121

Je utilise (1), mais je suis arrivé à taper

rm -rf / tmp *

un jour maudit. Cela peut être assez mauvais si vous avez plus qu'une poignée d'administrateurs.

(2) Est probablement plus sécurisé - et vous pouvez devenir super-utilisateur à part entière via sudo su -. Les accidents restent cependant possibles.

(3) Je ne toucherais pas ça avec des pincettes. Je l'ai utilisé sur les Suns, afin d'avoir un compte super-utilisateur non squelettique (si je me souviens bien) mais ce n'était jamais robuste - et je doute qu'il serait très auditable.

2voto

TorixBear Points 11

Définitivement répondre 2.

  1. Cela signifie que vous autorisez l'accès SSH en tant que root. Si cette machine est publique de quelque manière que ce soit, c'est une idée terrible; quand j'exécutais SSH sur le port 22, mon VPS recevait plusieurs tentatives par heure pour s'authentifier en tant que root. J'avais mis en place un IDS de base pour enregistrer et bloquer les adresses IP qui faisaient plusieurs tentatives infructueuses, mais elles continuaient. Heureusement, j'avais désactivé l'accès SSH en tant qu'utilisateur root dès que j'avais mon propre compte et sudo configuré. De plus, vous avez pratiquement aucun journal d'audit en faisant cela.

  2. Fournit un accès root quand cela est nécessaire. Oui, vous avez à peine des privilèges en tant qu'utilisateur standard, mais c'est à peu près exactement ce que vous voulez; si un compte est compromis, vous voulez qu'il soit limité dans ses capacités. Vous voulez que tout accès super-utilisateur nécessite une saisie du mot de passe. De plus, l'accès sudo peut être contrôlé via des groupes d'utilisateurs et limité à des commandes particulières si vous le souhaitez, vous donnant plus de contrôle sur qui a accès à quoi. De plus, les commandes exécutées en tant que sudo peuvent être journalisées, ce qui offre un bien meilleur suivi en cas de problème. Oh, et ne lancez pas simplement "sudo su -" dès que vous vous connectez. C'est une pratique terrible, terrible.

  3. L'idée de votre administrateur système est mauvaise. Et il devrait se sentir mal. Non, les machines *nix ne vous empêcheront probablement pas de le faire, mais à la fois votre système de fichiers et pratiquement toutes les applications s'attendent à ce que chaque utilisateur ait un UID unique. Si vous commencez à emprunter cette voie, je peux vous garantir que vous rencontrerez des problèmes. Peut-être pas immédiatement, mais éventuellement. Par exemple, malgré l'affichage de noms conviviaux, les fichiers et répertoires utilisent des numéros UID pour désigner leurs propriétaires; si vous rencontrez un programme qui a un problème avec des UIDs en double à l'avenir, vous ne pourrez pas simplement changer un UID dans votre fichier passwd plus tard sans devoir faire un sérieux nettoyage manuel du système de fichiers.

sudo est la voie à suivre. Cela peut causer des tracas supplémentaires pour exécuter des commandes en tant que root, mais cela vous offre une boîte plus sécurisée, à la fois en termes d'accès et d'audit.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X