用户环境不是来自 chroot



我对chroot环境有一点问题,希望你能帮我:)

这是我的故事:

1 - 我创建了一个用户演示(像/home/demo这样的家),我通过一个脚本/bin/chrootshell对他进行了追捧,如下所示:

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

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

一切运行良好(就像所有 chroot 系统命令或我的 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 环境中,我用 shell 声明/bin/bash演示用户

据我所知,您正在经历的行为是按设计工作。

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

有关详细信息,请阅读有关启动文件的 bash 手册章节。

我建议围绕此设计决策创建一个包含以下内容的.bash_profile

if [ -f "~/.profile" ]; then
    source "~/.profile"
fi
if [ -f "~/.bashrc" ]; then
    source "~/.bashrc"
fi
这将使 bash 读取.profile,如果作为登录

shell 启动,则.bashrc,如果作为非登录 shell 启动,则只读取.bashrc。现在你可以把需要做一次(登录期间)的事情放在.profile,每次需要做的事情放在.bashrc

我遇到了同样的问题,并找到了解决方案:似乎,如果你chroot非root用户,chrootbash仍然只寻找.bash_profile.bashrc和/或.profile,在chroot目录内寻找一个/root目录。把这些文件放在那里,它就会起作用。

相关内容

  • 没有找到相关文章

最新更新