アップデート
とった!私の解決策を参照してください(5番目のコメント)
これが私の問題です:
「jail」と呼ばれる小さなバイナリを作成し、/etc/password でテスト ユーザーのデフォルト シェルにしました。
-- 単純化された -- ソース コードは次のとおりです。
#define HOME "/home/user"
#define SHELL "/bin/bash"
...
if(chdir(HOME) || chroot(HOME)) return -1;
...
char *shellargv[] = { SHELL, "-login", "-rcfile", "/bin/myscript", 0 };
execvp(SHELL, shellargv);
まあ、どんなに頑張っても、テスト ユーザーがログインしたときに、/bin/myscriptが読み込まれないようです。同様に、.bashrc
ユーザーのホーム ディレクトリにファイルをドロップすると、それも無視されます。
なぜこれらの人をスノッブするのですか?
--
必ずしも関連するわけではありませんが、コメントで指摘されたいくつかの点を明確にするために、いくつかの精度を示します。
- 「jail」バイナリは実際には suid であるため、chroot() を正常に実行できます。
- 'ln' を使用して、適切なバイナリを利用できるようにしました - 私の独房はうまく埋められています :)
- 問題は、ユーザーを chroot することではないようです...何か他のものが見落とされています。