gpt4 book ai didi

linux - 用户环境不是来自 chroot

转载 作者:太空狗 更新时间:2023-10-29 12:35:09 27 4
gpt4 key购买 nike

我有一个 chroot 环境的小问题,我希望你能帮助我 :)

这是我的故事:

1 - 我创建了一个用户演示(有一个像/home/demo这样的家)并且我通过脚本/bin/chrootshell chroot了他,如下所示:

#!/bin/bash
exec -c /usr/sbin/chroot /home/$USER /bin/bash --login -i

2 - 此用户禁用了通常的登录身份验证,因此我必须使用 su - demo 以他的身份登录

一切正常(就像所有的 chrooted 系统命令或我的 java 配置)。但是每次我成为用户演示时,我的 .bashrc 或/etc/profile 似乎都没有来源......我不知道为什么。

但是如果我启动手动 bash,它会像你在这里看到的那样工作:

root@test:~# su - demo
bash-4.1$ env
PWD=/
SHELL=/bin/chrootshell
SHLVL=1
_=/bin/env
bash-4.1$ bash
bash-4.1$ env
PWD=/
SHLVL=2
SHELL=/bin/chrootshell
PLOP=export variable test
_=/bin/env

如您所见,我的$PLOP 变量(在/.bashrc ==/home/demo/.bashrc 中描述)在第二个bash 中设置得很好,但我不知道为什么

如果您对我的问题有任何线索,请提前致谢:)

编辑:我实际上不明白的是为什么 SHELL=/bin/chrootshell ?在我的 chroot 环境中,我使用 /bin/bash shell

声明我的演示用户

最佳答案

据我所知,您遇到的行为是 bash 按设计工作的。

简而言之:当 bash 作为登录 shell 启动时(即使用 --login 调用 bash 时发生的情况),它将读取 .profile 而不是 .bashrc。当 bash 作为非登录 shell 启动时,bash 将读取 .bashrc 而不是 .profile

阅读关于 startup files 的 bash 手册章节获取更多信息。

为了解决这个设计决策,我的建议是创建一个包含以下内容的 .bash_profile:

if [ -f "~/.profile" ]; then
source "~/.profile"
fi

if [ -f "~/.bashrc" ]; then
source "~/.bashrc"
fi

如果以登录 shell 启动,这将使 bash 读取 .profile.bashrc,如果以非登录方式启动,则只读 .bashrc壳。现在你可以把需要做一次(在登录期间)的东西放在.profile中,而每次需要做的东西放在.bashrc中。

关于linux - 用户环境不是来自 chroot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570558/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com