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.