Limitare l'uso di `sudo -s`


8

Sto installando Nagios su alcuni dei miei server Linux e ho riscontrato un problema. Il check_ide_smartplug-in richiede l'accesso root al sistema per funzionare. Per eseguirlo, uso il check_by_sshplug-in per ssh nell'account nagios sull'host remoto, quindi check_ide_smarteseguo usando sudo.

Inizialmente ho aggiunto le seguenti righe /etc/sudoersper consentire al programma di funzionare:

nagios  ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart

Mentre questo funzionava bene quando eseguito localmente, stavo ricevendo un problema quando veniva eseguito da Nagios: non veniva generato alcun TTY, che impediva il funzionamento del plugin.

Ho scavato nella pagina man per sudo e ho trovato l'opzione -s, che genera una shell ed esegue il programma lì dentro. Quando ho provato a utilizzare sudo -s, ho riscontrato problemi di autorizzazione poiché apparentemente -s cambia il comando in /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart, il che non è consentito dal file sudoers. Ho provato a cambiare il file sudoers per utilizzare quel comando, ma non ha funzionato e l'uso delle virgolette è un errore di sintassi.

Alla fine sono riuscito a farlo usando la seguente riga in /etc/sudoers:

nagios ALL=/bin/bash

Questo mi sembra davvero sbagliato dal momento che sto permettendo all'utente nagios di generare una shell di root, con la quale possono fare qualsiasi cosa.

A questo punto, ho pensato che forse, inserendo il comando in uno script di shell su cui l'utente nagios ha i privilegi di sola lettura funzionerebbe, quindi ho creato uno script di shell:

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@

Sfortunatamente, non sono mai riuscito a far $@funzionare correttamente i parametri passati ( ) con il plugin, quindi non so se funzionerebbe. Modifica: avevo bisogno di citare il $@per farlo funzionare. Grazie @derobert e @pjz. Ancora non so se funzionerebbe da quando l'ho fatto funzionare usando la soluzione di @Mike Arthur.

C'è un modo in cui posso mettermi sudo -sal lavoro senza consentire la generazione di una shell root?

Risposta:

Aggiunta la seguente riga a /etc/sudoers:

nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *

Nota l'asterisco finale; senza di essa, questo non funziona. Grazie @Mike Arthur per la risposta.

Risposte:


7

nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *

Questo dovrebbe funzionare e consentire argomenti.


Non ha funzionato. Vedi la mia modifica per i dettagli.
Chris Lieb,

@Chris Lieb: dovrai cambiare la tua chiamata da "sudo -s ..." a "sudo / bin / bash -c ...". Quindi dovrebbe funzionare. Ho una configurazione simile che funziona qui (non nagios, ma simile).
Martin C.

L'ho risolto, provalo ora (con l'asterisco per i caratteri jolly).
Mike McQuaid,

2

Cordiali saluti, è necessario citare $ @ nello script della shell affinché funzioni correttamente:

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "$@"

$@è magico. Dalla manpage di bash,

@ Si espande nei parametri posizionali, a partire da uno. Quando l'espansione avviene tra virgolette doppie, ogni parametro si espande in una parola separata. Cioè, "$ @" equivale a "$ 1" "$ 2" ... Se l'espansione tra virgolette doppie si verifica all'interno di una parola, l'espansione del primo parametro viene unita alla parte iniziale della parola originale e l'espansione dell'ultimo parametro viene unito con l'ultima parte della parola originale. Quando non ci sono parametri posizionali, "$ @" e $ @ si espandono in nulla (cioè vengono rimossi).

Inoltre, iniziare bash non genererà un pty; anche se sono perplesso sul perché il tuo plugin nagios abbia bisogno di un terminale per funzionare. Non dovrebbe. Forse il vero problema è la sanificazione dell'ambiente di sudo?


Questo plugin è l'unico che ha causato problemi. Nessuno degli altri che ho impostato finora richiede l'accesso come root, quindi non ho dovuto usare sudo per loro. Per questo motivo, non sono sicuro che il problema sia causato dal fatto che sudo non genera una shell o dal plugin check_ide_smart che richiede l'esecuzione di una shell.
Chris Lieb,

1

Invece di utilizzare sudo -se avviare una shell di root, consenti all'utente nagios di usare sudo senza usare tty !requiretty. Il tuo /etc/sudoersdovrebbe avere la seguente:

# Allow Nagios extra privs
Defaults:nagios !requiretty
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_plugin

... che consentirà l'accesso diretto sudo, senza password e senza tty. Puoi lasciare "check_ide_plugin" disattivato se desideri l'accesso sudo a tutti i plugin.

Usiamo anche NRPE, che sembra un po 'più sicuro di check_by_ssh, ma richiede un po' più di installazione. Stessa idea in / etc / sudoers, basta scambiare nagios con nrpe. :)

~ tommy


0

Prova di nuovo lo script ma metti delle virgolette attorno a $ @:

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "$@"

-1

Non credo sia possibile usare -s senza generare una shell di root (supponendo che abbiate bisogno dei privilegi di root). L'opzione -s è specificatamente lì per generare una shell. Questo è ciò che significa. Da sudo (8):

-s [command]
    The -s (shell) option runs the shell specified by the SHELL
    environment variable if it is set or the shell as specified
    in passwd(5).  If a command is specified, it is passed to
    the shell for execution.  Otherwise, an interactive shell
    is executed.

1
Viene eseguita una shell, ma la sua attuale è quella di consentire qualsiasi chiamata a /bin/bash, il che consente anche la generazione di una shell interattiva senza alcuna limitazione e senza alcuna restrizione su quali comandi possono essere chiamati.
Martin C.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.