alx*_*lxs 45 ubuntu sudo environment-variables
在 Ubuntu 12.04 上,当我sudo -s的 $HOME 变量没有改变时,如果我的普通用户是regularuser,情况是这样的:
$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser
Run Code Online (Sandbox Code Playgroud)
我很久以前就放弃了 Ubuntu,所以我不能确定,但我认为这是默认行为。所以,我的问题是:
一季度。这是怎么做的?配置在哪里?
Q2。如何禁用它?
编辑: 感谢您的回答,这使事情澄清了一点,但我想我必须添加几个问题,以获得我正在寻找的答案。
Q3。在 Debian 中sudo -s,将 $HOME 变量更改为/root. 从我从答案中得到的信息和man sudoshell 运行的sudo -s是 中给出的那个/etc/passwd,对吗?
第 4 季度。但是,在 Ubuntu 和 Debian 上,/etc/passwd为 root提供的 shell都是/bin/bash. 在任一系统中,就 $HOME 而言,我找不到.profile或.bashrc文件的差异在哪里,因此行为sudo -s不同。这有什么帮助吗?
Gil*_*il' 62
Sudo 有许多编译时配置选项。您可以使用 列出您版本中的设置sudo -V。Debian wheezy 和 Ubuntu 12.04 中配置的区别之一是HOME环境变量在 Ubuntu 中保留,但在 Debian 中不保留;两个发行版都会删除所有环境变量,除了一些明确标记为可以安全保存的变量。因此在 Ubuntu 上sudo -s保留HOME,而在 Debian 上HOME被删除,sudo然后将其设置为目标用户的主目录。
您可以在sudoers文件中覆盖此行为。运行visudo以编辑sudoers文件。有几个相关的选项:
env_keep确定保留哪些环境变量。使用Defaults env_keep += "HOME"保留调用者的HOME环境变量或Defaults env_keep -= "HOME"将其删除(和目标用户的主目录替换)。env_reset确定是否完全重置环境变量。允许运行特定命令的规则通常需要重置环境变量,但对于允许运行任意命令的规则没有直接的安全优势。always_set_home, 如果设置,HOME即使由于env_reset被禁用或HOME在env_keep列表中而被保留,也会导致被覆盖。如果HOME无论如何都没有保留,则此选项无效。set_home类似于always_set_home,但仅适用于sudo -s,不适sudo用于使用显式命令调用时。可以为给定的源用户、给定的目标用户或给定的命令设置这些选项;sudoers有关详细信息,请参阅手册。
您始终可以通过传递选项HOME来选择覆盖给定的调用。sudo-H
shell 永远不会覆盖 的值HOME。(HOME如果未设置,它将设置,但sudo总是以HOME一种或另一种方式设置。)
如果运行sudo -i,则sudo模拟初始登录。这包括设置HOME到目标用户的主目录和调用登录 shell。
小智 17
使用sudo -H -i而不是sudo -s获取交互式登录 root shell:
sudo -H -i
cd
pwd -P # /private/var/root (on Mac OS X 10.6.8)
Run Code Online (Sandbox Code Playgroud)
来自man sudo:
-H The -H (HOME) option sets the HOME environment variable to
the homedir of the target user (root by default) as
specified in passwd(5). By default, sudo does not modify
HOME (see set_home and always_set_home in sudoers(5)).
Run Code Online (Sandbox Code Playgroud)
这与sudo“登录外壳”和“非登录外壳”之间的区别几乎没有关系,但有很大关系。快速修复是
$ sudo -i
Run Code Online (Sandbox Code Playgroud)
可以看出:
$ sudo -s
# id
uid=0(root) gid=0(root) groups=0(root)
# echo $HOME
/home/msw
# exit
$ sudo -i
# echo $HOME
/root
# pwd
/root
Run Code Online (Sandbox Code Playgroud)
如 sudo 手册中所述:
-i(模拟初始登录)选项运行由目标用户的密码数据库条目指定的 shell 作为登录 shell。这意味着 shell 将读取特定于登录名的资源文件,例如 .profile 或 .login。如果指定了命令,则会通过 shell 的 -c 选项将其传递给 shell 以执行。如果未指定命令,则执行交互式 shell。
| 归档时间: |
|
| 查看次数: |
41100 次 |
| 最近记录: |