AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 438564
Accepted
sinecode
sinecode
Asked: 2018-04-19 09:38:34 +0800 CST2018-04-19 09:38:34 +0800 CST 2018-04-19 09:38:34 +0800 CST

Ubuntu 和 Debian 如何为具有 sudo 权限的用户管理 $HOME?

  • 772

我有一个myhome.sh只包含一行的 bash 脚本:

echo $HOME

脚本的所有者是用户:

$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh

在Ubuntu 16.04 和 17.10中,我得到:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

$ sudo bash myhome.sh
/home/user

在Debian Buster/Testing中,我得到:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ sudo bash myhome.sh
/root

我不明白为什么在 Debian 的脚本中,如果它是用 sudo 执行的,我总是$HOME=/root在 Ubuntu 中得到$HOME=/home/user. 有谁知道 Ubuntu 开发人员改变了什么?

bash debian
  • 1 1 个回答
  • 3478 Views

1 个回答

  • Voted
  1. Best Answer
    filbranden
    2018-04-19T09:51:28+08:002018-04-19T09:51:28+08:00

    Debian 和 Ubuntu 都提供了一个/etc/sudoers包含 的文件Defaults env_reset,它会重置环境变量。

    但是,将其行为从不触摸env_reset更改为将其重置为目标用户的家。$HOME

    在 19.04 之前的版本中,Ubuntu 已经修补了他们的版本sudo以保持以前的行为(不改变$HOME): https ://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140

    这在 19.10 中取消了,从那以后,Ubuntu 做了上游sudo和所有其他 Linux 发行版所做的事情,并更改$HOME了目标用户的内容。有关所有详细信息,请参阅 askubuntu.com 上的此问答:自 19.10 以来,sudo 如何以不同的方式处理 $HOME?. 早期版本没有进行逆转,因此 18.04 LTS 仍然具有特定于 Ubuntu 的行为。


    以下是此答案的旧文本,适用于 19.04 之前的 Ubuntu 版本,包括 18.04 LTS。

    Defaults always_set_home在 Ubuntu 中,为了将 $HOME 环境变量重置为目标用户,必须Defaults set_home在sudo -s其/etc/sudoers.

    Ubuntu tracker 上的这个 bug 有更多理由说明不在 sudo 中设置 $HOME: https ://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495

    见评论#4:

    如果 HOME 被删除,那么例如 vim、bash 等,将使用 /root/.vimrc、/root/.bashrc 等,而不是用户的 ~/.vimrc、~/.bashrc 等。虽然这是一个坏主意要通过 sudo 运行 X 客户端,它们也可能会在错误的位置查找配置文件,如果 X11 客户端针对错误的 .Xauthority 文件,它们甚至可能无法连接到 X11 服务器。

    这是 Ubuntu 开发人员有意识的决定。

    这个答案有更多关于 sudoers 选项的详细信息,例如always_set_home: https ://unix.stackexchange.com/a/91572/281844


    您的问题中还有第二个问题,sudo echo $HOME即使在 Debian 中,它仍然显示用户的家。

    发生这种情况是因为 shell在运行命令$HOME 之前正在扩展。sudo

    所以这:

    $ sudo echo $HOME
    

    首先由shell扩展为:

    $ sudo echo /home/user
    

    然后 sudoecho /home/user以 root 身份执行...

    这也应该证明差异:

    $ sudo bash -c 'echo $HOME'
    /root
    

    或者获取一个完整的 root shell 并在那里查看环境变量:

    $ sudo -s
    # echo $HOME
    /root
    
    • 68

相关问题

  • 虽然行读取保持转义空间?

  • Debian Stretch:libgs_plugin_systemd-updates.so 中的 gnome-software 段错误

  • `tee` 和 `bash` 进程替换顺序

  • 如何在拼音输入法中输入ü?

  • 运行一个非常慢的脚本直到它成功

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve