Limitando o uso de `sudo -s`

8

Estou configurando o Nagios em alguns dos meus servidores Linux e tive um problema. O check_ide_smartplug-in requer acesso root ao sistema para ser executado. Para executá-lo, eu uso o check_by_sshplug-in para ssh na conta nagios no host remoto e, em seguida, corro check_ide_smartusando o sudo.

Inicialmente, adicionei as seguintes linhas /etc/sudoerspara permitir que o programa funcione:

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

Enquanto isso funcionava bem quando executado localmente, eu estava tendo um problema quando foi executado no Nagios: nenhum TTY estava sendo gerado, o que impedia o plug-in de funcionar.

Eu procurei na página de manual do sudo e encontrei a opção -s, que gera um shell e executa o programa lá. Quando tentei usar sudo -s, tive problemas de permissão, pois o -s aparentemente altera o comando para /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart, o que não é permitido pelo arquivo sudoers. Tentei alterar o arquivo sudoers para usar esse comando, mas isso não funcionou, e usar aspas é um erro de sintaxe.

Acabei conseguindo funcionar usando a seguinte linha em /etc/sudoers:

nagios ALL=/bin/bash

Isso me parece realmente errado, pois estou permitindo que o usuário do nagios crie um shell raiz, com o qual ele possa fazer qualquer coisa.

Nesse ponto, pensei que talvez, colocando o comando em um script de shell em que o usuário do nagios tenha privilégios de somente leitura funcionasse, então criei um script de shell:

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

Infelizmente, nunca consegui que os parâmetros passados ​​( $@) funcionassem corretamente com o plug-in, então não sei se isso funcionaria. Edit: Eu precisava citar o $@para que ele funcione. Obrigado @derobert e @pjz. Ainda não sei se funcionaria desde que o fiz funcionar usando a solução do @ Arthur Arthur.

Existe uma maneira de começar sudo -sa trabalhar sem permitir a desova de um shell raiz?

Responda:

Adicionada a seguinte linha em /etc/sudoers:

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

Observe o asterisco à direita; sem ele, isso não funciona. Obrigado @ Mike Arthur pela resposta.

Chris Lieb
fonte

Respostas:

7

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

Isso deve funcionar e permitir argumentos.

Mike McQuaid
fonte
Isso não funcionou. Veja minha edição para obter detalhes.
317 Chris Lieb
@ Chris Lieb: você terá que mudar sua chamada de "sudo -s ..." para "sudo / bin / bash -c ...". Então deve funcionar. Eu tenho uma configuração semelhante trabalhando aqui (não nagios, mas semelhante).
Martin C.
Corrigi-o, tente agora (com o asterisco para caracteres curinga).
Mike McQuaid
2

Para sua informação, você precisa citar $ @ no seu shell script para que funcione corretamente:

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

$@é mágico. Na página de manual do bash,

@ Expande para os parâmetros posicionais, iniciando em um. Quando a expansão ocorre entre aspas duplas, cada parâmetro se expande para uma palavra separada. Ou seja, "$ @" é equivalente a "$ 1" "$ 2" ... Se a expansão de aspas duplas ocorrer dentro de uma palavra, a expansão do primeiro parâmetro será associada à parte inicial da palavra original e a expansão do último parâmetro é associado à última parte da palavra original. Quando não há parâmetros posicionais, "$ @" e $ @ expandem para nada (ou seja, eles são removidos).

Além disso, iniciar o bash não gera um pty; embora eu esteja perplexo com o motivo pelo qual o plugin nagios precisa de um terminal para rodar. Não deveria. Talvez o problema real seja a higienização do ambiente do sudo?

derobert
fonte
Este plugin é o único que causou problemas. Nenhum dos outros que eu configurei até agora exige acesso root, portanto não precisei usar o sudo para eles. Por causa disso, não tenho certeza se o problema é causado pelo sudo não gerar um shell ou pelo plug-in check_ide_smart que exige que um shell seja executado.
317 Chris Lieb
1

Em vez de usar sudo -se iniciar um shell raiz, permita que o usuário do nagios use o sudo sem usar o tty !requiretty. Você /etc/sudoersdeve ter o seguinte:

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

... que permitirá acesso direto ao sudo, sem uma senha e sem um tty. Você pode deixar o "check_ide_plugin" desativado se quiser acessar o sudo para todos os plugins.

Também usamos o NRPE, que parece um pouco mais seguro que check_by_ssh, mas requer um pouco mais de configuração. A mesma idéia no / etc / sudoers tho, apenas troque nagios com nrpe. :)

~ tommy

TommyTheKid
fonte
0

Tente o script novamente, mas coloque aspas duplas em torno de seu $ @:

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

Eu não acho que é possível usar -s sem gerar um shell raiz (assumindo que você precise de privilégios de root). A opção -s existe especificamente para gerar um shell. Isso é o que -s significa. Do 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.
Christopher Cashell
fonte
11
Um shell é executado, mas seu atual é permitir qualquer chamada /bin/bash, o que também permite a geração de um shell interativo sem limitações e sem restrições sobre quais comandos podem ser chamados.
Martin C.