当不使用绝对路径时,为什么 /etc/sudoers 会失败?

当不使用绝对路径时,为什么 /etc/sudoers 会失败?

我想给我的账户novasudo 权限,所以我将此配置添加到 /etc/sudoers

Defaults:nova !requiretty

nova ALL = (root) NOPASSWD: /openstack/bin/nova-rootwrap 
/etc/nova/rootwrap.conf *
nova ALL = (root) NOPASSWD: /usr/bin/privsep-helper *

然后我切换到nova:

su - nova

问题是:当我执行 时sudo /openstack/bin/nova-rootwrap,它可以工作,但是当我执行 时sudo nova-rootwrap,系统会要求我输入密码。似乎不起作用NOPASSWD

我已经添加/openstack/bin到我的环境路径中。系统是CentOS7.4。

为什么会发生这种情况?我怎样才能不使用密码执行它?

答案1

我首先想到的是,有人可以更改路径,并让 nova-rootwrap 充满一些恶意代码。

关于这个话题有很多很好的讨论 ->https://stackoverflow.com/questions/257616/sudo-changes-path-why

答案2

切换用户的命令不会更新环境,而是保留之前用户的环境。使用登录 shell 而不是仅使用“-”可以更彻底地实现此目的。

也就是说,如果您想要一个全新的环境,您应该这样做:

su --login nova

这也有效:

sudo -i nova

答案3

这是出于安全原因,因为给予没有完整路径的 sudo 或者给予非特权用户拥有的脚本 sudo 确实是个坏主意,因为您在那一刻授予他们 root 权限。

相关内容