Qual é a sintaxe apropriada dos sudoers para adicionar um usuário?

50

De acordo com os comentários em /etc/sudoers(Fedora 13):

## Syntax:
##
##    user  MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.

Minhas duas perguntas relacionadas:

  1. O que ALL=(ALL) ALLsignifica a seguinte linha:

    root  ALL=(ALL)   ALL
    
  2. Eu testei essas duas linhas, mas não consigo descobrir como elas são funcionalmente diferentes:

    superadm    ALL=(ALL)    ALL
    superadm    ALL=ALL
    

Eu li o manual, mas é difícil seguir a especificação da sintaxe. Eu deduzi que a (ALL) ALLpeça é o comando e as especificações de etiqueta, mas ainda não consigo entender.

Belmin Fernandez
fonte

Respostas:

91

Nota: estou respondendo a 1. , pois Ignacio já respondeu a 2 ..

Na sudoentrada a seguir :

superadm  ALL=(ALL)   ALL

existem quatro campos:

  • O primeiro especifica um usuário que receberá privilégios para alguns comandos.
  • O segundo é raramente usado. É uma lista de nomes de host nos quais essa entrada sudo será eficaz. Nas configurações padrão, apenas um host é relevante (host local); portanto, esse campo geralmente é deixado como ALL.
  • O quarto campo é a lista de comandos superadmcapazes de executar com privilégios elevados. ALLsignifica todos os comandos. Caso contrário, use uma lista de comandos separados por vírgula.
  • O terceiro campo (aquele (…)que é opcional) especifica quais usuários (e grupos) o superadmusuário poderá executar os seguintes comandos como. ALLsignifica que eles podem escolher qualquer coisa (sem restrições). Se este campo for omitido, significa o mesmo que (root).

Exemplo:

alan   ALL = (root, bin : operator, system) /bin/ls, /bin/kill

Aqui, alané permitido executar os dois comandos /bin/lse /bin/killcomo root(ou bin), possivelmente com privilégios adicionais operatorou de systemgrupos.

Portanto, alanpode optar por executar lscomo binusuário e com operatorprivilégios de grupo como este:

sudo -u bin -g operator /bin/ls /whatever/directory

Se -ufor omitido, é o mesmo que -u root. Se -gfor omitido, nenhum privilégio de grupo adicional será concedido.

Stéphane Gimenez
fonte
11
Bem, isso é provavelmente a melhor resposta sempre ...
David Betz
11
Observei que uma nova linha \nde caracteres é obrigatória no final da entrada no sudoers ou /etc/sudoers.d/your_file_name
ramonrails
Além disso, você pode usar caracteres curinga em nomes de host, nomes de caminhos e argumentos de linha de comando. Curtir /bin/cat /var/log/messages.?ou /bin/ls /var/log/*mais informações aqui
Alex
9

Na sudoers(5)página do manual, seção DESCRIPTION , subseção Runas_Spec :

O primeiro Runas_List indica que os usuários o comando pode ser executado como via sudode -uopção.

...

Se nenhum Runas_Spec for especificado, o comando poderá ser executado como roote nenhum grupo poderá ser especificado.

Portanto, não há diferença funcional ao tentar executar comandos como root, por exemplo, quando não estiver usando -ucom sudo. A diferença importa ao tentar executar comandos como outros usuários; o último impedirá isso, mas o primeiro permitirá.

Ignacio Vazquez-Abrams
fonte