2012-11-26 60 views
1

來源我有一個chroot環境有點問題,我希望你能幫助我:)用戶環境不chroot的

這裏是我的故事:

1 - 我創建了一個用戶演示(用類似家庭/home/demo)和我chroot的他由於腳本/bin/chrootshell這是如下:

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

2 - 常用的登錄認證是禁用此用戶,所以我必須用su - demo被記錄爲他

一切正常(像所有的chrooted系統命令或我的java配置)。但每次我成爲用戶演示時,似乎我的.bashrc或/ etc/profile都不是來源的......我不知道爲什麼。

但如果我啓動手動慶典它的工作原理,你可以在這裏看到:

[email protected]:~# 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)很好地在第二慶典設置,但我不事先知道爲什麼

謝謝你對我的問題:)

編輯任何線索:我其實不明白的是爲什麼SHELL=/bin/chrootshell?在我的chroot env我宣佈我的演示用戶/bin/bash外殼

回答

0

據我可以告訴你正在經歷的行爲是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 

這將使bash的閱讀.profile.bashrc如果開始作爲登錄shell,如果開始作爲唯一.bashrc讀非登錄shell。現在您可以將需要完成的東西(登錄時)放入.profile,並且每次都需要在.bashrc中完成。

+1

嗨@lesmana,謝謝你的回覆!不幸的是,我對你的建議有同樣的問題。我的感覺問題來自我的'su'命令,你怎麼看待它? – Labynocle

+0

su的手冊頁說:「使用時 - 必須指定爲最後的su選項。」。試試:'su demo -' – lesmana

+0

是的,你完全正確。但是如果你檢查語法:'su [options] [username]'這裏是我的最後一個選項。爲了確保我測試了你的建議並仍然遇到同樣的問題! :( – Labynocle