私の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
# 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
他の区切り文字は空白であることがわかりました。もともと、いくつかのスペースを入れて別々に作成しましたが、うまくいきませんでした。区切り文字は重要ですか?t
ALL
t
ALL
/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
含まれます。adm
adm
admin
sudo
$ 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 *