所以,这是我无法理解的事情。我知道如何配置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
来打开或关闭它。readenv
1
0
看起来readenv=1
这一行负责运行/etc/environment
时的解析sudo
。事实上,将其设置为0
(或注释掉整行)会使sudo sh -c 'echo $FOO'
我的 Ubuntu 表现得像在 Debian 中一样。