8 votes

Permettre l'exécution automatique de commandes en tant que root sous Linux en utilisant SSH

Quelle est une bonne configuration permettant l'exécution automatique d'une commande ou d'un script sur un serveur distant avec root privilèges en utilisant SSH ?

Je suis conscient (seulement vaguement pour certaines des options) des options suivantes :

  • Permettre une connexion directe par root ( PermitRootLogin ) (et éventuellement en forçant l'authentification des clés).
  • Configuration de sudo de ne pas exiger un mot de passe ( NOPASSWD le drapeau en sudoers ) et TTY ( requiretty drapeau).
  • Configuration de sudo pour permettre l'exécution de commandes/scripts spécifiques, lorsqu'ils sont authentifiés avec une clé privée spécifique.
  • Définition du propriétaire du script en tant que root et la mise en place permission setuid .

Mais d'abord, je ne suis pas sûr des conséquences de ces mesures sur la sécurité. Par exemple, je sais que le fait d'autoriser root La connexion est désapprouvée. Mais je ne suis pas sûr que ce ne soit pas un point de vue obsolète. D'après ce que j'ai compris, il semble qu'une authentification par mot de passe soit le danger. Avec l'authentification par clé publique, le root La connexion pourrait être correcte. Et pour certaines des options, notamment l'option sudo Je ne suis même pas sûr de la configuration nécessaire. Bien que je sois capable de googler tout cela, il pourrait y avoir des considérations de sécurité que je pourrais manquer, c'est pourquoi je demande l'avis d'experts.

Notez, que je demande une côté serveur installation. L'exécution sera déclenchée par un programme, et non par un outil de type ssh donc je ne cherche pas des choses comme l'automatique. client l'authentification.


Le contexte : Être actif dans ssh tag sur Stack Overflow L'une des questions qui reviennent le plus souvent concerne les différents hacks que les gens tentent d'exécuter une commande/script (ou même un serveur SFTP) par SSH sur un serveur Unix/Linux distant en utilisant une clé USB. root compte à l'aide de divers langages de programmation (C#, Java, VB.NET, Python, etc.) et de bibliothèques SSH (SSH.NET, JSch, Paramiko, etc.).

Les implémentations, que les gens tentent, essayent généralement d'utiliser su o sudo . Ces derniers demandent alors un mot de passe. Les implémentations essaient alors de transmettre le mot de passe à l'entrée de commande. Comme su y sudo exigent souvent émulation de terminal pour l'invite de mot de passe, l'implémentation doit exiger PTY. Ce qui, à son tour, cause d'autres problèmes, car les sessions avec l'émulation de terminal utilisent souvent des fonctions interactives, telles que Codes d'échappement ANSI la pagination, etc. Tout cela conduit à des tas d'autres bidouillages peu fiables qui tentent de supprimer ou même d'interpréter les codes d'échappement ANSI ou de simuler un terminal suffisamment grand pour éviter la pagination.

Quelques exemples parmi tant d'autres :

Bien que je puisse généralement fournir une aide pour la mise en œuvre de ces astuces, j'ajoute généralement une suggestion selon laquelle il existe des moyens plus efficaces que l'automatisation. sudo / su . Mais je ne suis pas vraiment sûr de pouvoir fournir des détails sur ces prétendues "de meilleurs moyens" . Une question connexe : です。 sudo presque inutile ?

Donc je cherche un canonique du point de vue d'un super utilisateur, qui peut ensuite être consulté et adapté aux besoins de Stack Overflow.

0voto

Das D Points 101

Ansible est le meilleur outil pour l'automatisation et sur les hôtes distants. En utilisant les méthodes disponibles d'Ansible, vous pouvez exécuter les commandes en tant que super-utilisateur (root) sur des machines distantes. --become & --become_method pour passer à l'utilisateur root via sudo sans activer l'autorisation de connexion root et NOPASSWD pour sudo.

De plus, aucune installation n'est nécessaire sur les hôtes clients - la seule exigence est que les hôtes distants doivent supporter Python >= 2.7.

AFAIK Ansible a deux méthodes d'accès, l'une avec SSH et Paramiko.

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