首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >chroot + execvp + bash

chroot + execvp + bash
EN

Stack Overflow用户
提问于 2008-10-31 18:32:50
回答 5查看 1.5K关注 0票数 8

更新

明白了!见我的解决方案(第五条评论)

我的问题是:

我创建了一个名为“for”的小二进制文件,在/etc/password中,我将它作为测试用户的默认shell。

以下是简化的源代码:

代码语言:javascript
复制
#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文件放在用户的主目录中,它也将被忽略。

为什么要攻击这些家伙?

--

有些精确性,不一定相关,但为了澄清评论中提出的一些要点:

  • “监狱”二进制文件实际上是suid的,因此允许它成功地执行chroot()。
  • 我使用了“ln”来提供适当的二进制文件--我的监狱牢房被很好地填充了:)
  • 问题似乎不在于对user...something进行着色,否则就是疏忽。
EN

回答 5

Stack Overflow用户

发布于 2008-10-31 18:56:49

正如Jason所说,exec‘’ed shell不是交互式的。

他的解决方案将强制shell具有交互性,如果它接受-i意味着(而bash ):

代码语言:javascript
复制
char *shellargv[] = { SHELL, "-i", "-login", ... };
execvp(SHELL, shellargv);

不过,我想补充一点,传统上,如果ARGV[0]以破折号开头,shell将充当登录shell。

代码语言:javascript
复制
char *shellargv[] = {"-"SHELL, "-i", ...};
execvp(SHELL, shellargv);

不过,通常Bash会自动检测它是否应该以交互方式运行。在您的情况下,其失败可能是由于缺少/dev/*节点。

票数 4
EN

Stack Overflow用户

发布于 2008-10-31 18:36:24

外壳不具有交互性。尝试将-i添加到参数列表中。

票数 2
EN

Stack Overflow用户

发布于 2008-10-31 19:05:18

我可以认同自己想要这样做,但如果您还没有这样做,请查看监狱色度工程监牢,以获得一些用于创建监控程序的工具。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/254458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档