用户环境不是来自chroot

问题描述 投票:2回答:1

我有一个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 env中,我用/bin/bash shell声明我的演示用户

linux bash chroot .bash-profile
1个回答
1
投票

据我所知,你所遇到的行为是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,如果作为非登录shell启动,则只读取.bashrc。现在你可以把需要在.profile中完成一次(登录时)的东西,以及每次需要在.bashrc中完成的东西。

© www.soinside.com 2019 - 2024. All rights reserved.