chroot execvp bash
更新
得到它了!看我的解决方案(第五条评论) 这是我的问题: 我创建了一个名为“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文件放在用户的主目录中,它也会被忽略. 为什么要打击这些家伙呢? – 一些精确,但不一定相关,但要澄清评论中提出的一些观点: >’jail’二进制文件实际上是suid,因此允许它成功地chroot().
正如Jason C所说,exec’ed shell不是交互式的.
他的解决方案将强制shell是交互式的,如果它接受-i表示(和bash): char *shellargv[] = { SHELL,"-i",... }; execvp(SHELL,shellargv); 我想补充一点,如果ARGV [0]以短划线开头,传统上shell将充当登录shell. char *shellargv[] = {"-"SHELL,...}; execvp(SHELL,shellargv); 但是,通常,Bash会自动检测它是否应该以交互方式运行.它在你的情况下失败可能是因为缺少/ dev / *节点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |