问题标签 [chroot]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1736 浏览

eclipse-cdt - 如何使用 Eclipse CDT 构建到 chroot?

我有一个 chroot 环境,其中包含使用 make 构建复杂 C++ 项目所需的一切(它适用于特定的 Linux 发行版)。

我想在这个项目中使用 Eclipse CDT(在 chroot 环境之外),但是让 Eclipse 在构建时进入 chroot 环境并在那里构建。

是否可以?

0 投票
3 回答
1739 浏览

php - 在 PHP 中调用 chroot

出于安全原因,某些应用程序被隔离在 chroot 环境中。我需要通过 PHP 脚本调用这个应用程序。类似的东西:

我需要root使用chroot. PHP 手册中有一个chroot(),但这个函数也需要 root 权限。

那么,如何chroot在 PHP 中使用 ed 命令呢?

0 投票
1 回答
1992 浏览

android - 在三星 Galaxy s2 上使用 adb shell(在 Windows 上)进入超级用户模式

我试图在我的手机上安装 chroot ubuntu,但在我的 Galaxy s2(股票内核,支持循环设备)上没有成功。我认为问题在于 adb shell 没有被授予超级用户权限(我的手机是 root 并且安装了超级用户)。当我在 adb shell 中输入 su 时,我手机上的超级用户应用程序不会通知我任何事情。

0 投票
1 回答
327 浏览

python - 调试在chroot环境中执行的python脚本

有没有办法调试安装在我的机器上的 eclipse 在 chroot 中执行的 python 脚本,而 chroot 看不到它?我不允许在 chroot 中安装 eclipse。

0 投票
2 回答
875 浏览

c - C : system() 在 chroot 中调用

我有一个用 C 编写的程序,它在监狱中运行 chroot,它会进行一些系统调用,例如system ( "ls" ). 问题是当我在监狱中运行程序时,它没有执行系统调用。我已经包含了可执行文件的所有必要库(使用lddbash 命令找到它们),以及 bash 可执行文件(/bin/bash),以及它的库(也可以使用 找到ldd)。似乎缺少了什么。有人对此有想法吗?

0 投票
1 回答
148 浏览

windows - Windows - 特定环境的私有主机文件

我有一个在开发服务器上运行的应用程序,并连接到托管 oracle 实例的 dev-db。

现在我在 prod/prod-db 机器上部署

由于 dev-db url 在 java 代码中是硬编码的,所以刚刚复制的二进制文件仍然指向 dev-db。作为快速解决方法,我在 prod 上的 Windows 主机文件中添加了一行,以便 dev-db 现在指向 prod-db IP 地址。这是工作,但我对这个全球范围的解决方案不太满意。

我想知道是否退出一种使主机文件对于某些环境“私有”的方法,即。仅在我正在运行的应用程序范围内有效

0 投票
1 回答
5204 浏览

c - 使用 LD_PRELOAD 覆盖从另一个 libc 函数调用的 libc 函数

我有一个项目旨在运行 php-cgi chrooted用于大规模虚拟主机(超过 10k 虚拟主机),每个虚拟主机都有自己的 chroot,在 Ubuntu Lucid x86_64 下。

我想避免在每个 chroot 中为 /dev/null、/dev/zero、语言环境、图标等创建必要的环境,以及认为它们在 chroot 之外运行的 php 模块可能需要的任何东西。

目标是让 php-cgi 在 chroot 内运行,但允许他访问 chroot 之外的文件,只要这些文件(对于大多数文件)以只读模式打开,并且在允许的列表(/dev/日志、/dev/zero、/dev/null、语言环境的路径...)

显而易见的方法似乎是创建(或使用如果存在)一个内核模块,该模块可以在 chroot 之外挂钩和重定向受信任的 open() 路径。但我认为这不是最简单的方法:

  • 我从来没有做过内核模块,所以我没有正确估计难度。
  • 似乎有多个系统调用来挂钩文件“打开”(打开,连接,mmap ...),但我想与文件打开相关的所有事情都有一个通用的内核函数。

我确实想尽量减少 php 或其模块的补丁数量,以尽量减少每次将我们的平台更新到最新的稳定 PHP 版本时所需的工作量(因此更频繁、更快速地从上游 PHP 版本更新),所以我发现从外部修补 PHP 的行为更好(因为我们有一个特定的设置,所以修补 PHP 并建议向上游修补是不相关的)。

相反,我目前正在尝试一种用户态解决方案:使用 LD_PRELOAD 挂钩 libc 函数,它在大多数情况下运行良好并且实现起来非常快,但我遇到了一个我无法单独解决的问题。(想法是与在 chroot 之外运行的守护进程对话,并使用 ioctl SENDFD 和 RECVFD 从中获取文件描述符)。

当我调用 syslog() (首先没有 openlog() )时, syslog()调用 connect() 来打开一个文件

例子:

到目前为止一切顺利,我试图挂钩 libc 的 connect() 函数,但没有成功。我还尝试在我的预加载库的 _init() 函数中为 dlopen() 放置一些标志,以测试其中一些标志是否可以使其工作,但没有成功

这是我的预加载库的相关代码:

但是 libc 的 connect() 函数仍然优先于我的:

查看 syslog() 的代码(apt-get source libc6,glibc-2.13/misc/syslog.c),它似乎调用了 openlog_internal,而后者又调用了 __connect(),位于 misc/syslog.c 第 386 行:

好吧,objdump 显示了 libc 的动态符号表中的 connect 和 __connect:

但是动态重定位条目中没有连接符号,所以我想它解释了为什么我无法成功覆盖 openlog_internal() 使用的 connect(),它可能不使用动态符号重定位,并且可能具有 __connect() 的地址硬功能(相对的-fPIC偏移?)。

connect 是 __connect 的弱别名:

gdb 仍然能够在 libc 的 libc 连接符号上设置断点:

当然,我可以通过自己执行 openlog() 来完全跳过这个特定问题,但我想我会在使用其他一些函数时遇到相同类型的问题。

我真的不明白为什么 openlog_internal 不使用动态符号重定位来调用 __connect(),以及是否可以通过使用简单的 LD_PRELOAD 机制来挂钩这个 __connect() 调用。

我看到如何做到的其他方式:

  • 使用 dlopen 从 LD_PRELOAD 加载 libc.so,使用 dlsym() 获取 libc 的 __connect 的地址,然后修补函数(ASM 明智)以使钩子工作。这似乎真的矫枉过正并且容易出错。
  • 使用修改后的 PHP 自定义 libc 直接在源头修复这些问题(打开/连接/mmap 函数...)
  • 编写 LKM 代码,将文件访问重定向到我想要的位置。优点:不需要 ioctl(SENDFD),也不需要 chroot 之外的守护进程。

如果可能的话,我真的很感激学习如何仍然挂钩对 openlog_internal 发出的 __connect() 的调用、建议或与系统调用挂钩和重定向相关的内核文档的链接。

我与“hook syscalls”相关的谷歌搜索发现了很多对LSM的引用,但它似乎只允许 ACL 回答“是”或“否”,但不允许重定向 open() 路径。

谢谢阅读。

0 投票
5 回答
2928 浏览

linux - 如何在 perl 脚本中退出 chroot?

在编写一个旨在完全自动化虚拟机(Xen pv)设置的 perl 脚本时,我遇到了一个可能非常简单的小问题。

使用 perl 的chroot 函数,我在来宾文件系统上做我的事情,然后我需要回到我最初的真实根目录。我到底是怎么做到的?

脚本示例:

我试过退出;但显然退出整个脚本。

在寻找退出 chroot 的方法时,我发现了许多旨在退出设置的 chroot(权限提升)的脚本。由于我在这里执行 chroot,因此这些方法不适用。

尝试了一些疯狂的事情,例如:

但是不行。

更新 需要考虑的几点:

  • 我无法将脚本拆分为多个文件。(愚蠢的原因,但真的,我不能)
  • chroot 部分涉及使用脚本之前(在 chroot 之前)收集的大量数据,从而强制不需要在 chroot 内启动另一个脚本。
  • 使用 open、system 或反引号不好,我需要运行命令并根据输出(不是退出代码,实际输出)做其他事情。
  • chroot 之后的步骤取决于 chroot 内部所做的事情,因此我需要在内部和外部拥有我定义或更改的所有变量。
  • Fork 是可能的,但我不知道正确处理与孩子之间的信息传递的好方法。
0 投票
1 回答
1725 浏览

php - PHP 无法连接到我的 chrooted MySQL 套接字?

所以我在 CentOS 上设置了一个 MySQL chroot。MySQL 被有效地限制在 /opt/chroot/mysql/ 中,我已经修改了 /etc/init.d/mysqld 文件,以便一切运行正常。我可以(以 root 身份)通过发出以下命令连接到套接字:

目前,为简单起见,MySQL root 用户没有密码。

但是,由于某种原因,PHP(在 Apache 中运行)无法连接到同一个套接字。我尝试更新 php.ini 中的 MySQL 默认套接字变量,以及在建立连接时引用完整的套接字路径,但我总是得到同样的错误:

无法通过套接字'/opt/chroot/mysql/var/lib/mysql/mysql.sock'连接到本地MySQL服务器(13)

有任何想法吗?

更新:自己找到了解决方案。SELinux 已启用并阻止 Apache 的所有连接。

0 投票
1 回答
2765 浏览

ubuntu - chroot 如何影响动态链接?

这是我遇到的情况:

我创建了一个 debootstrap ubuntu 特立独行(64 位)环境。我把它/env/mav/放在我的 ubuntu(64 位)Lucid 系统上。我可以chroot进入/env/mav并且可以完美地利用一个特立独行的系统。

我什至可以在 chrooted 环境之外使用 lucid 程序。那就是/env/mav/bin/ls会运行。

但是,我注意到如果我修改LD_LIBRARY_PATH/env/mav/lib[1] [2]

我运行的每个程序(清晰和特立独行)都会立即崩溃。(例如 ls 导致段错误)。kern.log 显示:

但是,很明显,如果我chroot进入/env/mav,每个程序都运行良好。不是所有的图书馆都只是从被监禁的 ( /env/mav)中读取的/lib吗?那么在这种情况下chroot修改和修改有什么区别呢?LD_LIBRARY_PATH

此外,如果我:

然后chroot /env再设置LD_LIBRARY_PATH/env/mav/lib,一切仍然运行良好。

我对这里的内部情况不知所措。是否有一些 ld 内部存储在某处?chroot 会做一些神奇的事情吗?

[1] 用例是运行从maverick 环境正确绑定到maverick 监狱外的maverick 动态链接库的程序。

[2] 这只是一个删节的例子。在现实/usr/lib中,等等都包括在内。包括特立独行的环境的 /lib “毒药”一切;使用其他特立独行的库目录没有问题。