Fedora:使用 sudo 找不到命令

Fedora:使用 sudo 找不到命令

我知道 中的 --preserve-env 或 -E 标志sudo,但是,这个标志似乎导致 sudo 在 Fedora 中表现得很奇怪。

我安装了rangerLinuxBrew以下是我which ranger以非 root 用户身份输入时得到的结果:

$ which ranger
/home/linuxbrew/.linuxbrew/bin/ranger

如果我 sudo,

$ sudo -E which ranger
which: no ranger in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)

$ sudo -E echo $PATH
/usr/lib64/qt-3.3/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/david/bin:/home/david/.gem/ruby/2.6.0:/home/david/prog/flutter/bin:/home/david/go/bin:/home/linuxbrew/.linuxbrew/bin:/home/david/.local/bin:/snap/bin:/var/lib/snapd/snap/bin:/home/david/.gem/ruby/2.6.0:/home/david/go/bin:/home/linuxbrew/.linuxbrew/bin:/home/david/.local/bin:/snap/bin:/home/david/prog/flutter/bin

$ sudo -E ranger
sudo: ranger: command not found

但事情变得更奇怪了:

sudo --preserve-env=PATH which ranger
/home/linuxbrew/.linuxbrew/bin/ranger

$ sudo --preserve-env=PATH ranger
sudo: ranger: command not found

谁能解释一下这里到底发生了什么?

任何帮助将不胜感激!

答案1

这是 sudo 的一项安全功能。在您的/etc/sudoers文件中,您应该有一行,例如:

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

该选项的含义secure_path在手册页中给出sudoers

安全路径:从 sudo 运行的每个命令所使用的路径。如果您不相信运行 sudo 的人有一个正常的 PATH 环境变量,您可能需要使用它。另一个用途是如果您希望将“根路径”与“用户路径”分开。 except_group 选项指定的组中的用户不受 secure_path 的影响。默认情况下未设置此选项。

如果您想避免这种行为,您可以在其中定义您的用户的exempt_group选项。/etc/sudoers例如:

Defaults exempt_group+=jo

在一些旧的 RHEL 发行版上,您必须为此创建一个系统组:请参阅https://access.redhat.com/solutions/150783

相关内容