Como verificar a configuração adequada do sudo sem senha do userA para o userB, da sessão userB

1

Resumo

Existe um método não interativo (autônomo, que não requer um terminal de controle baseado em ncurses) para verificar se o sudo está configurado corretamente para permitir sudo'ing sem senha de uma conta de usuário não-root para outra?

Por que

Eu tenho um cenário onde algum processamento precisa ser executado em uma conta de usuário diferente, mas a execução precisa ocorrer sem qualquer intervenção do usuário, pois não haverá um terminal de controle disponível (por exemplo, de um processo em segundo plano).

Detalhes

Isso está sendo executado no Linux (especificamente no RHEL 5 ou RHEL 6 ou nas máquinas CentOS equivalentes aproximadas). Nenhum outro sistema operacional ou variantes do Linux são relevantes para essa questão.

Para fins de discussão, suponha que há duas contas de usuário envolvidas: userA e userB.

Eu preciso de um método para verificar se é possível fazer um sudo sem senha do userA para o userB, tudo a partir da conta userB.

Os comandos que estão sendo executados na conta userB dentro da chamada sudo serão para coisas como executar programas do espaço do usuário (por exemplo, não executar comandos de administração do sistema, como fdisk ).

A principal restrição aqui é que o método deve ser feito a partir da conta userB, não da conta userA, em um processo em segundo plano sem um terminal de controle.

Esse método deve ser possível implementar em um script Bash usando sed / awk / etc. comandos para inspecionar arquivos.

O administrador do sistema não deve estar envolvido neste método (por exemplo, nenhum script setuid é necessário).

Isso é possível? Se sim, como?

Pesquisa

Considere que o arquivo sudoers pode ser difícil de analisar. Olhando para uma questão semelhante em Como executar um programa específico como root sem um prompt de senha? não está claro como um script não-raiz pode inspecionar o conteúdo do arquivo sudoers sem usar algum mecanismo interativo como visudo , o que exigirá um ncurses Terminal habilitado que não é uma opção.

Além disso, o link indica a sintaxe adequada para o sudo sem senha de userA para userB, mas minha pergunta aqui provavelmente apenas ferve até como ver essa configuração sem executar um aplicativo restrito por ncurses como visudo , mas não tenho certeza se é tão simples assim.

    
por bgoodr 30.06.2017 / 18:38

2 respostas

2

Você não pode fazer isso analisando os arquivos de configuração do sudo porque a configuração do sudo é legível apenas pelo root. Mesmo se você pudesse ler a configuração do sudo, é difícil analisá-lo de forma confiável (especialmente para lidar com informações não locais, como bancos de dados LDAP) e não conta toda a história (por exemplo, permissão pode ser conferida por um grupo). / p>

A única verificação realista é executar sudo como usuário A. Como você precisa fazer essa verificação a partir de um script executado como usuário B, você precisará de uma maneira de o usuário B executar a verificação como usuário A. escreva um programa pequeno ( não é um script que seja setuid A ou ofereça ao usuário B a permissão para executar o cheque como usuário A via sudo.

Se você não puder envolver o administrador para configurar uma regra sudo permitindo que o usuário B execute a verificação como A, então um programa setuid é a única solução. Este programa invocaria sudo -u userB -b true para verificar se A tem permissão para executar true como usuário B. Aqui está um código-fonte C para este programa (aviso: não testado!):

#include <unistd.h>
int main(void) {
    execl("/usr/bin/sudo", "sudo", "-u", "userB", "-b", "/bin/true", (char*)NULL);
    return 126;
}

Compile e torne o executável resultante setuid A (ele deve ser de propriedade de A e, em seguida, executar chmod 4755 /path/to/executable ).

Note que esta solução não está completa: ela só funcionará se A tiver permissão para executar comandos como B em virtude de ser o usuário A, não se obtiver esse privilégio em virtude de pertencer a um grupo. Se você precisar verificar a associação ao grupo, será necessário executar sg como usuário A para obter essa associação de grupo e, em seguida, executar sudo .

    
por 01.07.2017 / 00:39
1

Você tem dois problemas distintos que você menciona nesta questão.

  1. Como permitir / verificar privilégios de sudo para userA
    Link para a página inicial do projeto Sudo

  2. Como rever as configurações do sudo como userB (não raiz)

# 1 é possível mergulhando na documentação de / etc / sudoers e arquivos sudo relacionados e comando. Eu não tenho experiência limitando comandos por um usuário como outro usuário não-root, então eu não posso dizer, exceto eu sei que isso pode ser feito.

# 2 é inteiramente um problema com as permissões das configurações do sudo, como / etc / sudoers /etc/sudo.conf /etc/sudoers.d/* etc. Nos meus sistemas aqueles arquivos são modo -r--r-----. root root Seu userB não seria capaz de lê-los sem:

  1. sendo um membro do grupo raiz
  2. solicitando ao administrador do sistema que altere essas permissões.

É tão simples assim; sem que uma dessas duas coisas aconteça, o userB não poderá ler ou analisar o arquivo.

    
por 30.06.2017 / 19:47