![“sudo su -” 与 “sudo -i” 和 /etc/environment](https://linux22.com/image/910831/%E2%80%9Csudo%20su%20-%E2%80%9D%20%E4%B8%8E%20%E2%80%9Csudo%20-i%E2%80%9D%20%E5%92%8C%20%2Fetc%2Fenvironment.png)
apt-get update
在我经常更新(随后)的 Ubuntu 14.04 主机上,apt-get full-upgrade
我有一个/etc/environment
包含一些关键变量的文件。
直到最近sudo -i -u fred env
才会显示在fred
登录环境中环境变量FOO
被设置为来自的值/etc/environment
。
在过去的几天里(可能是由于更新;我没有太注意)sudo -l -u fred env
不再有来自的变量/etc/environment
。但是,sudo su - fred -c env
显示确实su -
设置了这些变量。
这是怎么回事?应该不sudo -i
完全一样,sudo su -
但由于没有在组合中包含额外的程序,所以可能更可靠?
PAM 配置
所有各种/etc/pam.d/
文件的内容似乎与发行版中的内容没有明显变化,但很难完全确定这一点,尤其是在 16.04 主机上,我无法访问 etckeeper 日志。下面我提供了来自 Ubuntu 14.04 主机的信息,其中演示了问题,而 Ubuntu 16.04 和 18.04 主机没有演示问题。以下所有示例中的注释均已删除。
/etc/pam.d/sudo
在所有主机上都相同:
#%PAM-1.0
auth required pam_env.so readenv=1 user_readenv=0
auth required pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
@include common-auth
@include common-account
@include common-session-noninteractive
/etc/pam.d/common-auth
主机之间略有不同。14.04/18.04 版本如下;16.04 主机缺少最后pam_cap.so
一行:
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so
/etc/pam.d/common-account
在所有主机上都相同:
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
account requisite pam_deny.so
account required pam_permit.so
/etc/pam.d/common-session-noninteractive
在所有主机上都相同:
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session optional pam_umask.so
session required pam_unix.so