加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

chroot execvp bash

发布时间:2020-12-16 01:15:53 所属栏目:安全 来源:网络整理
导读:更新 得到它了!看我的解决方案(第五条评论) 这是我的问题: 我创建了一个名为“jail”的小二进制文件,在/ etc / password中我将它作为测试用户的默认shell. 这是 – 简化 – 源代码: #define HOME "/home/user"#define SHELL "/bin/bash"...if(chdir(HOME)
更新

得到它了!看我的解决方案(第五条评论)

这是我的问题:

我创建了一个名为“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 / *节点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读