追加すればいいと思います
if grep "\\<${USER}\\>" /etc/jailbirds > /dev/null
then
echo I am not a crook
else
exec chroot $CWD
endif
あなたの最後まで /etc/profile
あなたはあなたが求めているものを手に入れるかもしれませんが、それは私が気付いていないいくつかの副作用を持っているかもしれません(実行しているシェルを引き継ぐ /etc/profile
問題を引き起こす可能性があります)。この場合、あなたはファイルを作成する必要があるでしょう /etc/jailbirds
これはあなたがchrootしたいユーザーのリストでした。また、このファイルが存在することを確認し、他のユーザー(特にroot)がchrootによってロックされないようにするためにこのファイルにアクセスするときの対処方法を決定する必要があります。
さらに、これを行うのは難しいでしょう。ユーザーがアクセスできない /proc
これは多くのシェルユーティリティを作るでしょう(例えば ps
、 top
そして、他の多くの人はうまくいきません。ユーザーもアクセスできない /dev/null
多くのものを壊すでしょう。
ユーザーもアクセスできない /dev/tty
どちらが壊れる less
そして more
標準入力で使用した場合ユーザーのアプリケーションは、chrootの前からstdin、stdout、およびstderrオープンファイル記述子を継承しますが、/ dev / ttyをオープンすることによって、ユーザーからのキーストロークを取得してパイプからstdinをリダイレクトすることを処理できます。
また、多くのプログラムが使用するプログラム、共有ライブラリ、または/ etcの下にある多くのファイル(/ etc / protocolsなど)にアクセスすることもできません。
これらはすべて回避できるものですが、ユーザーの環境を使用可能にするためには、私が考えていたよりももっと多くの作業が必要になります。
あなたが私の提案を試してみるなら、私はあなたが非常に注意することを勧めます。それを誤解して物事を悪くするのは簡単です。ちなみに、私はこれをテストしていません。