Comment exécuter la command shell en tant que root?

Je développe une application qui s'exécute sur une instance Amazon EC2 et exécute certaines commands nécessitant un access root. Le problème est que différentes VM donnent un access root de différentes manières. Par exemple, certaines VM donnent un access direct au count root, tandis que d'autres autoriseront simplement un access user non root par défaut à sudo.

Maintenant, je peux facilement résoudre l'exemple ci-dessus en ajoutant une option pour append "sudo" à toutes les commands. Cependant, je ne suis pas très familier avec Unix, et j'aimerais savoir s'il existe d'autres moyens d'get des privilèges root pour lesquels je devrais préparer mon programme. Su et sudo sont-ils raisonnablement suffisants?

Il existe plusieurs outils de type sudo (calife, op, super, …) – voir Comment exécuter une command en tant qu'administrateur système (root) – mais vous pouvez passer votre vie sur des systèmes unix sans les rencontrer (ils ont tous été déplacé par sudo). En pratique, si vous avez besoin d'appeler des scripts en tant que root, faites en sorte que toutes vos machines aient sudo sans mot de passe ou autorisez les connections ssh en tant que root. Il n'y a pas beaucoup de différence de security entre les deux: de toute façon, le script doit avoir toutes les informations d'identification nécessaires pour atteindre le count root.

Si vous voulez seulement que vos scripts puissent exécuter des commands spécifiques, utilisez des inputs spécifiques pour ces commands dans /etc/sudoers , ou des keys spécifiques avec une command= ligne dans ~root/.ssh/authorized_keys .

  • Les filesystems POSIX implémentent généralement les bits setuid / setgid. Ceci n'est jamais recommandé car il peut difficilement être sécurisé, mais cela fonctionne:

.

  cp /usr/bin/id /tmp/rootid sudo chown root /tmp/rootid sudo chmod u+s /tmp/rootid /tmp/rootid 

Surveillez attentivement le champ euid

  • sudo et su travail; méfiez-vous de sudo -E , ou su - interactions avec des environnements. Peut-être est-il préférable d'envelopper explicitement tous vos appels de soi afin d'être isolé des dommages

  • Solaris a RBAC bien qu'OpenSolaris ait eu un package sudo pour la compatibilité

Si vous tentez d'exécuter une command à partir d'un script, transmettez l'option -t à ssh:

 ssh -i file.pem -t myhost “sudo -n myscript” 

L'option -n de sudo empêchera sudo de requestr un mot de passe; si la command nécessite un mot de passe, vous obtiendrez une erreur.

Cela a fonctionné pour accéder aux instances EC2.