Debian 和 Ubuntu 中的 sudo 和环境变量的作用不同

Debian 和 Ubuntu 中的 sudo 和环境变量的作用不同

所以,这是我无法理解的事情。我知道如何配置sudo以保持所有环境完好无损,但现在我不明白是什么导致了 Ubuntu 和 Debian 上的不同行为。

因此在 Debian 中我配置了 sudoers

~# cat /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"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(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

我在 设置了一些变量/etc/environment,重新登录并测试:

~# sudo sh -c 'echo $FOO'


环境不存在,因为它不应该存在(至少据我所知),因为 sudoers 已配置为重置环境。

在 Ubuntu 上做同样的事情:

~# cat /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

# 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

注意:它具有相同的env_reset设置。但是:

~# sudo sh -c 'echo $FOO'
bar

所以让我困惑的问题是:为什么即使设置env_reset了,而我的 Ubuntu 或 Debian 配置都没有任何env_keep设置,它仍然可以在 Ubuntu 上运行?

答案1

man 5 sudoers说:

默认情况下,此env_reset选项处于启用状态。这将导致使用新的最小环境执行命令。在 AIX(以及没有 PAM 的 Linux 系统)上,使用文件的内容初始化环境/etc/environment

所以聚丙烯酰胺很重要。让我们检查/etc/pam.d/sudo一下这两个系统。Ubuntu 上有这行,但是不是在 Debian 上:

session    required   pam_env.so readenv=1 user_readenv=0

然后这是man 8 pam_env说:

此模块还可以解析KEY=VAL在单独行上使用简单对的文件(/etc/environment默认情况下)。您可以使用标志更改要解析的默认文件,并通过将标志分别设置为或envfile来打开或关闭它。readenv10

看起来readenv=1这一行负责运行/etc/environment时的解析sudo。事实上,将其设置为0(或注释掉整行)会使sudo sh -c 'echo $FOO'我的 Ubuntu 表现得像在 Debian 中一样。

相关内容