更新
知道了!查看我的解决方案(第五条评论)
这是我的问题:
我创建了一个名为“jail”的小型二进制文件,并在 /etc/password 中将其设置为测试用户的默认 shell。
这是--简化的--源代码:
#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
文件放在用户的主目录中,它也会被忽略。
为什么bash会势利这些家伙?
--
一些精度,不一定相关,但要清除评论中提出的一些观点:
- 'jail' 二进制文件实际上是 suid,因此允许它成功 chroot()。
- 我已经使用 'ln' 来提供适当的二进制文件 - 我的牢房被很好地填充了 :)
- 问题似乎与 chrooting 用户无关……还有其他事情是疏忽的。