Estoy configurando Nagios en algunos de mis servidores Linux y me he encontrado con un pequeño problema. El check_ide_smart
complemento requiere acceso de root al sistema para ejecutarse. Para ejecutarlo, utilizo el check_by_ssh
complemento para ingresar a la cuenta nagios en el host remoto, luego ejecuto check_ide_smart
usando sudo.
Inicialmente agregué las siguientes líneas /etc/sudoers
para permitir que el programa funcione:
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart
Si bien esto funcionó bien cuando se ejecuta localmente, estaba teniendo un problema cuando se ejecutaba desde Nagios: no se generaba TTY, lo que impedía que el complemento funcionara.
Busqué sudo en la página de manual y encontré la opción -s, que genera un shell y ejecuta el programa allí. Cuando intenté usar sudo -s
, me encontré con problemas de permisos ya que aparentemente -s cambia el comando a /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart
, que no está permitido por el archivo sudoers. Intenté cambiar el archivo sudoers para usar ese comando en su lugar, pero eso no funcionó, y el uso de comillas es un error de sintaxis.
Eventualmente lo puse a trabajar usando la siguiente línea en /etc/sudoers
:
nagios ALL=/bin/bash
Esto se siente realmente mal para mí, ya que estoy permitiendo que el usuario nagios genere un shell raíz, con el que puede hacer cualquier cosa.
En este punto, pensé que tal vez, al poner el comando en un script de shell en el que el usuario nagios tiene privilegios de solo lectura funcionaría, entonces creé un script de shell:
#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@
Desafortunadamente, nunca pude hacer que los parámetros pasados ( Editar: necesitaba citar el $@
) funcionen correctamente con el complemento, por lo que no sé si esto funcionaría. $@
para que funcione. Gracias @derobert y @pjz. Todavía no sé si funcionaría desde que lo hice funcionar usando la solución de @Mike Arthur.
¿Hay alguna manera de que pueda ponerme sudo -s
a trabajar sin permitir el engendro de un shell raíz?
Responder:
Se agregó la siguiente línea a /etc/sudoers
:
nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *
Tenga en cuenta el asterisco final; sin ella, esto no funciona. Gracias @ Mike Arthur por la respuesta.
Para su información, necesita citar $ @ en su script de shell para que funcione correctamente:
$@
es mágico. Desde la página de manual de bash,Además, comenzar bash no generará una pty; aunque estoy perplejo de por qué su complemento nagios necesita un terminal para ejecutarse. No debería ¿Quizás el problema real es la desinfección del medio ambiente de sudo?
fuente
En lugar de usar
sudo -s
y lanzar un shell de root, solo permita que su usuario de nagios use sudo sin usar tty!requiretty
. Su/etc/sudoers
debe tener lo siguiente:... que permitirá el acceso directo a sudo, sin contraseña y sin tty. Puede dejar "check_ide_plugin" desactivado si desea sudo acceso a todos los complementos.
También usamos NRPE, que parece un poco más seguro que check_by_ssh, pero requiere un poco más de configuración. La misma idea en / etc / sudoers aunque, simplemente intercambie nagios con nrpe. :)
~ tommy
fuente
Intente el script nuevamente pero ponga comillas dobles alrededor de su $ @:
fuente
No creo que sea posible usar -s sin generar un shell raíz (suponiendo que necesite privilegios de root). La opción -s está específicamente allí para generar un shell. Eso es lo que significa. Desde sudo (8):
fuente
/bin/bash
, lo que también permite generar un shell interactivo sin ninguna limitación y sin restricciones sobre qué comandos se pueden llamar.