当我在 /etc/sudoers 文件中指定“NOPASSWD”时,为什么系统会提示我输入 sudo 密码?

当我在 /etc/sudoers 文件中指定“NOPASSWD”时,为什么系统会提示我输入 sudo 密码?

我使用的是 Ubuntu 14.04。我的 /etc/sudoers 文件中有这个

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

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
%deployers ALL=(ALL) ALL

rails ALL = NOPASSWD: /usr/local/rvm/gems/ruby-2.3.0/bin/bundle, /usr/local/rvm/rubies/ruby-2.3.0/bin/ruby, /usr/local/rvm/gems/ruby-2.3.0/bin/rake, /usr/bin/service, /sbin/   restart

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

我认为包含上述命令(带有“NOPASSWD”的命令)可以防止提示输入密码,但在我重新启动系统并以“rails”用户身份登录后,请注意,在运行 sudo 时,我仍然被要求输入密码……

rails@mymachine:~$ sudo rake db:migrate
[sudo] password for rails: 
rails@mymachine:~$ which rake
/usr/local/rvm/gems/ruby-2.3.0/bin/rake

我需要做什么才能在运行“rake”命令(以及我列出的其他命令)时不会提示输入密码?

答案1

sudo默认情况下重置您的环境,因此它不会搜索您的$PATH.因此,它可能会尝试运行系统默认版本ruby而不是列出的版本。特别是您的文件中给出了$PATH所看到的:sudosudoers

secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

尝试使用sudo -E来保留您的环境或使用 的完全限定路径名,或者在给定的路径之前ruby添加到 , 的路径。secure_path

相关内容