更新
明白了!见我的解决方案(第五条评论)
我的问题是:
我创建了一个名为“for”的小二进制文件,在/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文件放在用户的主目录中,它也将被忽略。
为什么要攻击这些家伙?
--
有些精确性,不一定相关,但为了澄清评论中提出的一些要点:
发布于 2008-10-31 18:56:49
正如Jason所说,exec‘’ed shell不是交互式的。
他的解决方案将强制shell具有交互性,如果它接受-i意味着(而bash ):
char *shellargv[] = { SHELL, "-i", "-login", ... };
execvp(SHELL, shellargv);不过,我想补充一点,传统上,如果ARGV[0]以破折号开头,shell将充当登录shell。
char *shellargv[] = {"-"SHELL, "-i", ...};
execvp(SHELL, shellargv);不过,通常Bash会自动检测它是否应该以交互方式运行。在您的情况下,其失败可能是由于缺少/dev/*节点。
发布于 2008-10-31 18:36:24
外壳不具有交互性。尝试将-i添加到参数列表中。
发布于 2008-10-31 19:05:18
我可以认同自己想要这样做,但如果您还没有这样做,请查看监狱色度工程和监牢,以获得一些用于创建监控程序的工具。
https://stackoverflow.com/questions/254458
复制相似问题