更新
这是我的问题:
我创建了一个名为“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().
>我使用’ln’来制作适当的二进制文件 – 我的jail单元很好地填充:)
>这个问题似乎与chrooting用户没有关系……其他东西是疏忽.
正如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 / *节点.
原文地址:https://www.jb51.cc/bash/384959.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。