Por que minha configuração para nenhum prompt de senha em / etc / sudoers não funciona? [duplicado]

1

Minha versão do sudo é

$ sudo --version
Sudo version 1.8.16
Sudoers policy plugin version 1.8.16
Sudoers file grammar version 45
Sudoers I/O plugin version 1.8.16

$ which sudo
/usr/bin/sudo

$ whereis sudo
sudo: /usr/bin/sudo /usr/lib/sudo /usr/share/man/man8/sudo.8.gz

Adicionei uma linha a /etc/sudoers seguindo a linha de root :

# User privilege specification
root    ALL=(ALL:ALL) ALL
# my change for scaling down cpu freq
t       ALL=(ALL) NOPASSWD: /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh

Mas depois que eu reinicio o Ubuntu 16.04, eu ainda preciso fornecer uma senha ao executar o script com sudo :

$ sudo /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh  1600000
[sudo] password for t: 

Eu estava me perguntando por quê?

Observe que em /etc/sudoers

  • Noto que o separador entre root e ALL é uma guia e também separo t e ALL com uma guia e os outros separadores são espaços. Originalmente eu separei t e ALL com alguns espaços, o que não funcionou. O que o separador é importante?

  • /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh é o nome do caminho sem qualquer link simbólico e, originalmente, tentei um link simbólico, que não funcionou. Um link simbólico é importante ou não?

Obrigado.

Atualização:

Como a resposta de steve sugeriu, eu mudei a linha em /etc/sudoers para ser

t       ALL=(ALL) NOPASSWD: /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh *

adicionando * no final, mas não funciona.

Atualmente meu /etc/sudoers parece

#
# 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:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
# my change for scaling down cpu freq
# t     ALL=(ALL:ALL) NOPASSWD: /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh *
t ALL=(ALL:ALL) NOPASSWD: /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh *

# 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

Os grupos de t incluem admadm igual a admin ?) e sudo :

$ groups t
t : t adm cdrom sudo dip plugdev lpadmin sambashare

Os comandos permitidos para serem executados por t são:

$ sudo -l
Matching Defaults entries for t on ocean:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User t may run the following commands on ocean:
    (ALL : ALL) NOPASSWD:
        /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh *
    (ALL : ALL) ALL
    
por Tim 01.04.2018 / 21:50

2 respostas

2

Além do argumento, como @steve menciona, altere o ALL=(ALL) para ALL=(ALL:ALL) como:

t ALL=(ALL:ALL) NOPASSWD: /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh *

Se o usuário t pertence ao grupo sudo ou admin, você também tem que colocar essa linha após as regras genéricas para o grupo admin e sudo. Por man sudoers , a última linha que contempla uma condição ganha:

When multiple entries match for a user, they are applied in order.
Where there are multiple matches, the last match is used (which is not necessarily the most specific match).

Assim, se as condições mais restritivas forem atendidas na sua última linha, a diretiva NOPASSWD será aplicada e a senha não será mais solicitada.

    
por 01.04.2018 / 23:23
3

Talvez o fato de você estar passando um argumento esteja causando o problema.

Em vez de:

t       ALL=(ALL) NOPASSWD: /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh

tente isto:

t       ALL=(ALL) NOPASSWD: /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh *
    
por 01.04.2018 / 22:20

Tags