sudoers - explicação simples solicitada

24

Sempre que eu quiser executar algo que exija sudoermuitas vezes, preciso pesquisar no Google para que a formatação /etc/sudoersme lembre novamente qual é exatamente a maneira correta de escrevê-lo.

Agora vejo diferentes estilos de escrita no meu sudoersarquivo, o que é a consequência de diferentes resultados do Google ao longo dos meses. Também notei que o segundo exemplo (abaixo) parece funcionar no XFCE, mas não no Canela (Gnome 3). Isso pode ser totalmente não relacionado, mas, no entanto, eu gostaria de saber de uma vez por todas, qual é a gramática correta da linha sudoer e qual é a diferença entre os exemplos dados?

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

Além disso, para que servem todos ALL? Um usuário, um comando, mas preciso usar a ALLpalavra-chave até três vezes? Estou fazendo isso errado?

Claro, omitindo NOPASSWD:faz você digitar sua senha antes você tem permissão para executar o comando, mas um ponto de confusão é o uso de =e :, para o comando final que é o assunto da linha pode ser prefixado por um ou outro =, :, , ou ), gramática confusa para semântica semelhante.

Redsandro
fonte
3
Eu também me sinto muito frustrado com a sudoerssintaxe. Ler a página de manual foi ainda mais frustrante: descreve a chamada linguagem EBNF concisa e exata; os exemplos são exaustivamente longos. Portanto, não estou surpreso ao encontrar tantos tópicos aqui sobre esse arquivo.
M-ric
1
Obrigado por isso. Estava querendo fazer esta pergunta desde que eu vim através de arquivo de alguns anos atrás, um sudoers :-)
vahidg

Respostas:

35

É mais do que apenas um usuário e um comando:


redsandro host=(user:group) tag:commands
  • hostespecifica os nomes de host para os quais esta linha é válida. A menos que você esteja compartilhando arquivos de usuários entre hosts diferentes que precisam de regras diferentes usando o valor especial que ALLsignifica "todos os hosts" é uma boa opção.

  • userespecifica quais usuários você pode usar com as -uopções para executar o comando. Se você omitir isso, não poderá usar a -uopção

  • groupespecifica quais grupos você pode usar com as -gopções. Se você omitir, não poderá usar a -gopção

Ambos usere groupentendem o valor especial ALLcomo "todos os usuários / grupos"

Se você omitir tudo (user:group), não poderá usar -ue -gapenas executar o comando como root.

  • tag permite especificar algumas opções, como NOPASSWD

Portanto, com o seu primeiro exemplo, você pode executar o comando como root, mas não pode usá-lo -ue -gexecutá-lo como qualquer outro usuário ou grupo.

Com o exemplo 2., você pode executar o comando como root ou usá -u-lo como qualquer outro usuário.

Com 3., você pode executar o comando como root ou usar -uou -gexecutar o comando como qualquer outro usuário ou grupo.

Florian Diesch
fonte
Era exatamente isso que eu estava procurando. Aceitei sua resposta e agradeço seu esforço.
Redsandro
1
Pensamento final, posso usar 127.0.0.1ou localhostcomo hostsegurança adicional trivial?
Redsandro 02/04
5
A página de manual diz 'Note que o sudo apenas inspeciona as interfaces de rede reais; isso significa que o endereço IP 127.0.0.1 (localhost) nunca corresponderá. Além disso, o nome do host "host local" corresponderá apenas se esse for o nome real do host, o que geralmente ocorre apenas em sistemas não em rede. '
Florian Diesch
1
Obrigado. Nenhum nome de host para mim, especialmente porque desejo poder copiar o arquivo sudoers para várias máquinas. ALListo é.
Redsandro
9

Vamos desmontar este:
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

redsandro é o nome de usuário ao qual estamos dando permissão. Coloque um% na frente para aplicá-lo a um grupo.

ALL é um nome para esta regra. Sudoers podem fazer muito mais do que apenas conceder permissões globais. É aí que fica complicado, no entanto.

= não precisa de explicação

ALL: ALL lê como (who_to_run_it_as: what_group_to_run_it_as). Dessa forma, você pode permitir a execução de um comando, mas apenas no contexto de um usuário ou grupo específico.

NOPASSWD: diz para desativar o prompt de senha.

/ path / to / command permite especificar comandos específicos path_to_commmand, another_command

É importante lembrar que, embora o sudo seja usado principalmente por usuários domésticos para aumentar os privilégios de root, ele pode ser e é usado para controlar o acesso a comandos específicos de uma maneira muito mais granular.

RobotHumans
fonte
1
Obrigado pelo adicional %e , another_commandnotas. Agora eu entendo a %wheellinha na distribuição baseada no Fedora.
Redsandro