Adicionando NOPASSWD em / etc / sudoers não funciona

36

Em 14.04 aqui. Eu SSHed em minha máquina, adicionei a seguinte linha a /etc/sudoers :

myuser   ALL=NOPASSWD: ALL

Em seguida, tentei executar:

sudo mkdir /etc/blah

... e estou pedindo minha senha. Por quê?!?

Eu faço não quero ser perguntado pela minha senha ao fazer esta operação. Por favor, note que quando eu corro ls -ltr / eu recebo:

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

Mas eu não acho que isso seja importante porque eu me posicionei como um "sudoer", certo?

Mais importante, o que preciso fazer para que eu possa executar sudo mkdir /etc/blah como meu usuário atual ( myuser ) sem precisar da senha?

Este é o meu arquivo /etc/sudoers 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
    
por Zac 30.07.2014 / 19:31

4 respostas

56

É a sequência / ordenação das regras que causaram isso. A última regra tem preferência.

Para corrigir seu problema, basta mover suas linhas,

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

do arquivo sudoers para

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

Esta é uma abordagem melhor do que editar o arquivo sudoers 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 comando groups , verá que seu usuário pertence a esses grupos.

    
por Lety 30.07.2014 / 19:56
18

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 o primeiro.

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

Portanto, 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 -l para verificar quais permissões myuser tem.

    
por Kostyantyn 07.05.2015 / 11:45
10

Se várias entradas coincidirem com um usuário, o último será usado. Portanto, se fizzbuzz e chadmin forem membros dos grupos admin ou sudo , eles ainda receberão uma senha.

Coloque as duas linhas no final do arquivo sudoers depois da linha #includedir .

    
por Florian Diesch 30.07.2014 / 19:56
0

Idealmente, se você estiver personalizando quais comandos podem ser executados via sudo , você deve fazer essas alterações em um arquivo separado em /etc/sudoers.d/ , em vez de editar o arquivo sudoers diretamente. Você também deve sempre usar visudo para editar o (s) arquivo (s). Você NUNCA deve conceder os comandos NOPASSWD on ALL .

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

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

Em seguida, salve e saia e visudo avisará se você tiver erros de sintaxe.

Você pode executar sudo -l para ver as permissões concedidas a seu usuário, se qualquer um dos comandos NOPASSWD específicos do usuário aparecer ANTES de qualquer comando %groupyouarein ALL=(ALL) ALL na saída, será solicitada sua senha.

Se você estiver criando muitos desses arquivos sudoers.d, talvez queira criá-los com nomes por usuário, para que sejam mais fáceis de visualizar. Tenha em mente que a ordenação dos NOMES DE ARQUIVO e das REGRAS dentro do arquivo é muito importante, o ÚLTIMO carregado carrega, seja MAIS ou MENOS permissivo que as entradas anteriores.

  

Você pode controlar a ordenação de nomes de arquivos usando um prefixo de 00-99 ou aa / bb / cc, mas lembre-se de que, se tiver ALGUNS arquivos que não tenham prefixo numérico, eles serão carregados após o número arquivos, sobrescrevendo as configurações. Isso ocorre porque, dependendo das configurações de idioma, a "ordenação lexical" do shell usa os primeiros tipos de classificação 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}} | sort e printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort para ver se o seu idioma atual imprime AaBbCc etc ou ABC then abc para determinar qual seria o melhor prefixo de letra "último" a usar.

    
por dragon788 22.05.2017 / 23:05