Adicionar NOPASSWD em / etc / sudoers não funciona

47

Em 14.04 aqui. Coloquei SSH na minha máquina e adicionei a seguinte linha a /etc/sudoers:

myuser   ALL=NOPASSWD: ALL

E então tentei correr:

sudo mkdir /etc/blah

... e me pedem minha senha. Por quê?!?

Eu não quero ser convidado para a minha senha ao fazer esta operação. Observe que, quando corro ls -ltr /, recebo:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

Mas eu não acho que isso importe, porque eu me estabeleci como um "sudoer", certo?

Mais importante, o que preciso fazer para poder executar sudo mkdir /etc/blahcomo meu usuário atual ( myuser) sem ser solicitada a senha?

Aqui está o meu /etc/sudoersarquivo inteiro :

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root      ALL=(ALL:ALL) ALL
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
Zac
fonte
Você poderia postar seu arquivo sudoers? A diretiva está certa, mas não pôde funcionar devido ao contexto.
Lety 30/07
Obrigado @Letizia - por favor, veja a minha atualização, alguma coisa saltou para você?
Zac
Acho que também devo observar que não usei, visudono entanto, nenhuma edição manual deste arquivo foi de trabalhos de copiar e colar, digitei tudo como está. Mas visudoedita outros arquivos além deste? Isso poderia ser ele ...
Zac
Além disso, verifique todos os arquivos /etc/sudoers.d/, eles podem estar substituindo itens de/etc/sudoers
tokland

Respostas:

69

É a sequência / ordem das regras que causou isso. A última regra tem preferência.

Para resolver seu problema, basta mover suas linhas,

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

do sudoersarquivo para

sudo visudo -f /etc/sudoers.d/myOverrides 

Essa é uma abordagem melhor do que editar o sudoersarquivo com um editor de texto simples. Se você acidentalmente inserir erros no arquivo, talvez não seja mais possível executar sudo. Sempre use visudo, para que a sintaxe seja verificada e você receba avisos sobre erros!

Sua diretiva não funciona porque é substituída por:

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

Se você executar o groupscomando, verá que seu usuário pertence a esses grupos.

Lety
fonte
O nome do arquivo deve seguir uma convenção de nn-somename, por exemplo/etc/sudoers.d/20-myoverrides
shimatai 03/11
Sim, é claro, se você tiver mais de um arquivo, eles serão analisados ​​em ordem lexical classificada; portanto, é uma boa prática usar um número e será fácil saber essa ordem.
Lety 4/11
22

Se myuser estiver no grupo sudo , essa ordem das linhas não fornecerá acesso sem senha (como observado por Florian Diesch), porque a terceira linha substitui a primeira.

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Então, basta colocar as linhas nesta ordem:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

Na conta myuser , use sudo -lpara verificar quais permissões o myuser possui.

Kostyantyn
fonte
11

Se várias entradas corresponderem a um usuário, a última será usada. Portanto, se fizzbuzze chadminsão membros dos grupos, adminou sudoainda será solicitada uma senha.

Coloque as duas linhas no final do sudoersarquivo após a #includedirlinha.

Florian Diesch
fonte
De fato, uma combinação de @ Letizia e suas respostas é a melhor, já que essa #includediré a última entrada sudoerspor padrão.
muru 30/07
0

Idealmente, se você estiver personalizando os comandos que podem ser executados, sudofaça essas alterações em um arquivo separado em /etc/sudoers.d/vez de editar o sudoersarquivo diretamente. Você também deve sempre usar visudopara editar o (s) arquivo (s). NUNCA deve conceder NOPASSWDem ALLcomandos.

Exemplo: sudo visudo -f /etc/sudoers.d/mynotriskycommand

Insira sua linha concedendo permissão: myuser ALL= NOPASSWD: /bin/mkdir

Em seguida, salve e saia e visudoavisará se você tiver algum erro de sintaxe.

Você pode executar sudo -lpara ver as permissões concedidas ao usuário, se algum dos NOPASSWDcomandos específicos do usuário aparecer ANTES de qualquer %groupyouarein ALL=(ALL) ALLcomando na saída, você será solicitado a fornecer sua senha.

Se você criar muitos desses arquivos sudoers.d, talvez queira criá-los com o nome do usuário, para que sejam mais fáceis de visualizar. Lembre-se de que a ordem dos NOMES DE ARQUIVOS e das REGRAS no arquivo é muito importante; o ÚLTIMO carregado carrega, seja MAIS ou MENOS permissivo do que as entradas anteriores.

Você pode controlar a ordem dos nomes de arquivos usando um prefixo de 00-99 ou aa / bb / cc, mas lembre-se de que, se você tiver QUALQUER arquivo que não possua prefixo numérico, eles serão carregados após os arquivos numerados, substituindo as configurações. Isso ocorre porque, dependendo das configurações de seu idioma, a "classificação lexical" usada pelo shell classifica os números primeiro e, em seguida, pode intercalar maiúsculas e minúsculas ao classificar em ordem "crescente".

Tente executar printf '%s\n' {{0..99},{A-Z},{a-z}} | sorte printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortverifique se o seu idioma atual é impresso AaBbCcetc. ou ABCentão abcpara determinar qual o melhor prefixo de "última" letra a ser usado.

dragon788
fonte