J'installe Nagios sur certains de mes serveurs Linux et j'ai rencontré un peu de problème. Le check_ide_smart
plugin nécessite un accès root au système pour fonctionner. Pour l'exécuter, j'utilise le check_by_ssh
plugin pour ssh dans le compte nagios sur l'hôte distant, puis je lance en check_ide_smart
utilisant sudo.
J'ai initialement ajouté les lignes suivantes /etc/sudoers
pour permettre au programme de fonctionner:
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart
Bien que cela ait très bien fonctionné lorsqu'il était exécuté localement, je rencontrais un problème lorsqu'il était exécuté à partir de Nagios: aucun TTY n'était généré, ce qui empêchait le plugin de fonctionner.
J'ai creusé la page de manuel de sudo et trouvé l'option -s, qui génère un shell et exécute le programme là-dedans. Lorsque j'ai essayé d'utiliser sudo -s
, j'ai rencontré des problèmes d'autorisation car le -s change apparemment la commande en /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart
, ce qui n'est pas autorisé par le fichier sudoers. J'ai essayé de changer le fichier sudoers pour utiliser cette commande à la place, mais cela n'a pas fonctionné, et l'utilisation de guillemets est une erreur de syntaxe.
Je l'ai finalement fait fonctionner en utilisant la ligne suivante dans /etc/sudoers
:
nagios ALL=/bin/bash
Cela me semble vraiment mal car j'autorise l'utilisateur nagios à générer un shell racine, avec lequel il peut faire n'importe quoi.
À ce stade, je pensais que peut-être, en mettant la commande dans un script shell sur lequel l'utilisateur nagios aurait des privilèges de lecture seule, cela fonctionnerait, alors j'ai créé un script shell:
#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@
Malheureusement, je n'ai jamais pu obtenir les paramètres passés ( Edit: je devais citer le $@
) pour fonctionner correctement avec le plugin, donc je ne sais pas si cela fonctionnerait. $@
pour que cela fonctionne. Merci @derobert et @pjz. Je ne sais toujours pas si cela fonctionnerait depuis que je l'ai fait fonctionner avec la solution de @Mike Arthur.
Existe-t-il un moyen de me mettre sudo -s
au travail sans autoriser le frai d'un shell racine?
Réponse:
Ajout de la ligne suivante à /etc/sudoers
:
nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *
Notez l'astérisque de fin; sans cela, cela ne fonctionne pas. Merci @Mike Arthur pour la réponse.
Pour info, vous devez citer $ @ dans votre script shell pour que cela fonctionne correctement:
$@
est magique. Depuis la page de manuel bash,De plus, le démarrage de bash ne générera pas de pty; bien que je ne sache pas pourquoi votre plugin nagios a besoin d'un terminal pour fonctionner. Ça ne devrait pas. Peut-être que le problème réel est la désinfection de l'environnement de sudo?
la source
Au lieu d'utiliser
sudo -s
et de lancer un shell root, permettez simplement à votre utilisateur nagios d'utiliser sudo sans utiliser de tty!requiretty
. Vous/etc/sudoers
devriez avoir les éléments suivants:... qui permettra un accès direct à sudo, sans mot de passe, et sans tty. Vous pouvez laisser le "check_ide_plugin" désactivé si vous voulez que sudo accède à tous les plugins.
Nous utilisons également NRPE, qui semble un peu plus sûr que check_by_ssh, mais il nécessite un peu plus de configuration. Même idée dans / etc / sudoers tho, il suffit d'échanger nagios avec nrpe. :)
~ tommy
la source
Essayez à nouveau le script mais mettez des guillemets autour de votre $ @:
la source
Je ne pense pas qu'il soit possible d'utiliser -s sans générer un shell root (en supposant que vous ayez besoin des privilèges root). L'option -s est spécifiquement là pour générer un shell. C'est ce que signifie -s. Depuis sudo (8):
la source
/bin/bash
, ce qui permet également la génération d'un shell interactif sans aucune limitation et sans aucune restriction sur les commandes qui peuvent être appelées.