/etc/sudoersに設定したパスワードのないプロンプトが機能しないのはなぜですか? [コピー]

/etc/sudoersに設定したパスワードのないプロンプトが機能しないのはなぜですか? [コピー]

私の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

/etc/sudoers行の後に行を追加しました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

しかし、Ubuntu 16.04を再起動した後でも、スクリプトを実行してもパスワードを入力する必要がありましたsudo

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

理由を知りたいです。

ご注意/etc/sudoersください

  • rootとの間の区切り文字はタブで、合計もタブで区切られ、ALL他の区切り文字は空白であることがわかりました。もともと、いくつかのスペースを入れて別々に作成しましたが、うまくいきませんでした。区切り文字は重要ですか?tALLtALL

  • /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.shはシンボリックリンクのないパス名です。最初はシンボリックリンクを試しましたが、うまくいきませんでした。シンボリックリンクが重要ではないか?

ありがとうございます。


修正する:

Steveの回答で提案されているように、行を/etc/sudoers次のように変更しました。

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

最後に追加しましたが、*動作しません。

今私の/etc/sudoers姿

#
# 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

グループには(?と一緒に)と次のものがt含まれます。admadmadminsudo

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

実行が許可されるコマンドはt次のとおりです。

$ 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

答え1

@steveが述べたパラメータに加えて、ALL=(ALL)forをALL=(ALL:ALL)次のように変更します。

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

ユーザーtがsudoまたはadminグループに属している場合は、この行も変更する必要があります。後ろにadmin および sudo グループの一般規則。 Per man sudoers、条件を考慮した最後の行が勝ちます。

複数の項目がユーザーと一致する場合は、順次適用されます。
一致する項目が複数ある場合は、最後の項目が使用されます(最も具体的なものである必要はありません)。

したがって、最後の行がより厳しい条件を満たしている場合、NOPASSWDディレクティブが適用され、パスワードを再度要求されません。

答え2

たぶん議論を伝えるという事実は、この問題を引き起こすかもしれません。

変える:

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

この試み:

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

関連情報