A substituição do usuário Sudo está exigindo que o usuário alvo seja sudoer

1

Estou tentando executar um script como um usuário diferente (por exemplo, marvin ):

$ sudo -u marvin scriptname

Em uma máquina (Ubuntu 14.04), o comando funciona e o script é executado com sucesso.

Em outra máquina (Kubuntu 16.04), rodar o mesmo comando lança o erro

marvin is not in the sudoers file.  This incident will be reported.

marvin não está na lista de sudo- rentes em nenhuma das máquinas. Isso não deve importar, já que o script não requer direitos de sudo para executar. Estou usando o sudo para atuar como marvin , mas tenho direitos de sudo em ambas as máquinas. O próprio marvin não está tentando executar uma ação do sudo.

Por que isso acontece? Deve haver uma diferença entre as duas máquinas, mas não consigo encontrá-lo. Em ambos os sistemas, as propriedades e permissões do arquivo são idênticas.

Editar : Os arquivos /etc/sudoers nas duas máquinas são praticamente idênticos; a parte relevante é

root    ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

Não mencione nenhum usuário regular, mas eu ( borea ) sou membro do grupo sudo em cada um. Ambos têm a linha de importação de /etc/sudoers.d/ comentada, e esse diretório está vazio, exceto o README em ambas as máquinas, de qualquer maneira.

    
por Borea Deitz 08.09.2016 / 20:15

1 resposta

2

Quem um usuário pode 'runas' com sudo é definido no arquivo /etc/sudoers config. Este utilitário é extremamente configurável, então eu poderia simplificar um pouco. O mana sudoers cobre exaustivamente.

Quando chamado, sudo verifica as regras do usuário chamador. No seu exemplo, isso significa que as regras para o usuário borea são avaliadas primeiro, não aquelas, se houver alguma, para o usuário marvin .

A mensagem de erro da chamada definitivamente não ajuda a esclarecer esse ponto.

Uma entrada típica de "privilégio completo do sudo" em sudoers é assim:

borea ALL = (ALL) ALL

Esta é a mesma declaração com contexto sobre o que cada item significa:

Who:                     borea 
On hosts:                ALL
Can run as users:        (ALL)
The commands:            ALL

A entrada de chave no contexto da sua pergunta é a terceira. Se isso não estiver definido para TODOS, se estiver definido para uma lista de usuários que não inclua marvin, a chamada falhará.

Aqui está um exemplo mais envolvido da página man:

alan    ALL = (root, bin : operator, system) ALL

Essa configuração se traduz em:

user alan may run any command as either user root or bin, optionally setting the group to operator or system.

Portanto, a diferença entre o comportamento nos dois sistemas não está vinculada à conta marvin, mas sim à sua conta. Meu melhor palpite sobre a causa é a configuração 'executar como', mas há outras configurações que podem impedi-lo no mesmo arquivo de configuração, tanto globalmente quanto de outras maneiras sutis (por exemplo, associação ao grupo).

Outras coisas para analisar:

Com base nos seus comentários, o problema não está no arquivo sudoers configurado diretamente para o usuário borea . Aqui está uma lista de dados para coletar e coisas para tentar. Atualize sua pergunta com os resultados (especificamente quaisquer diferenças observadas entre as duas máquinas).

1. Este comando irá resumir seus privilégios e limitações relacionadas ao 'sudo', verifique se existe uma diferença relatada entre as duas máquinas:

 sudo -l -U borea

2. Repita o mesmo para o usuário marvin . Definitivamente não é necessário que marvin esteja em sudoers para que sudo -u funcione, mas é um bom ponto de dados. É possível que marvin tenha herdado algumas configurações por membros do grupo, etc.

 sudo -l -U marvin

3. Em ambas as máquinas, verifique o status da conta marvin para quaisquer diferenças. finger pode não ser instalado por padrão; use sudo apt-get install finger primeiro nesse caso.

 sudo finger -l marvin
 sudo passwd --status marvin
 id marvin

4. Tente abrir um shell usando a conta marvin . su usa um método diferente para escalar o privilégio:

 sudo su marvin

5. Assumindo que a conta root está habilitada para acesso ao shell (acho que, por padrão, o Ubuntu ainda desabilita isso), tente isto:

 sudo -s
 sudo -u marvin scriptname

6. Confirme as permissões em / etc / sudoers:

 ls -alt /etc/sudoers

O resultado deve começar com %código% Se isso não acontecer, corrija-o com:

 sudo chmod 440 /etc/sudoers
 sudo chown root:root /etc/sudoers

7. Tente copiar o arquivo sudoers da máquina se as coisas estiverem funcionando corretamente na máquina onde elas não estão. Tenha muito cuidado ao fazer isso - faça backup dos originais em um local seguro. Seria fácil perder a noção de qual arquivo é qual ...

8. Última coisa - verifique se você tem um arquivo /etc/sudo.conf em uma ou ambas as máquinas. Crie uma cópia de ambos os arquivos e mova-os para uma única máquina. correr

 diff sudo.conf.machine1 sudo.conf.machine2

para procurar diferenças de configuração. Faça o mesmo com o arquivo / etc / sudoers (usando diff) para encontrar todos os deltas.

    
por 09.09.2016 / 06:08