3

chroot 環境に少し問題があります。助けていただければ幸いです :)

これが私の話です:

1 - ユーザー デモを作成し (ホームは のように/home/demo)、次のようなスクリプトのおかげで彼を chroot しました/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 で記述) は 2 番目の bash で適切に設定されていますが、その理由はわかりません。

私の問題について手がかりがあれば、事前に感謝します:)

編集:私が実際に理解していないのはなぜSHELL=/bin/chrootshellですか? 私のchroot環境で、デモユーザーを/bin/bashシェルで宣言します

4

1 に答える 1

2

私が知る限り、あなたが経験している振る舞いは、設計どおりに動作しているbashです。

つまり、bashがログインシェルとして開始されると(--loginを指定してbashを呼び出すと発生します)、読み取りは行われますが、は読み取れ.profileません.bashrc。bashが非ログインシェルとして開始されると、bashは読み取ります.bashrcが、読み取りは行いません.profile

詳細については、スタートアップファイルに関するbashマニュアルの章をお読みください。

この設計上の決定を回避するための私の提案は.bash_profile、次のコンテンツでを作成することです。

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

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

これにより、bashが読み取り可能.profileになり、ログインシェルとして開始された場合は読み取り、非ログインシェルとして開始された場合.bashrcにのみ読み取りが行われます。.bashrcこれで、(ログイン中に)一度実行する必要があるものをに入れ、.profile毎回実行する必要があるものをに入れることができます.bashrc

于 2012-11-27T12:03:01.107 に答える