标签: chroot

轻量级隔离linux环境

我想要在我的计算机上有一个独立的(来宾)Linux 环境,我可以在不担心主机的情况下搞砸。例如,在没有包管理的情况下从源代码安装很多东西,污染环境环境变量等,然后在旧客户变得过于混乱时产生另一个客户环境。

我在使用 Virtualbox 和 Tinycore linux 时获得了一些乐趣,但至少我使用它的方式,我认为 Virtualbox 开销不是完全必要的。一方面,如果可能的话,我想使用与我的主机相同的内核。

此外,当我浏览了 Linux From Scratch 教程时,我对 有了一些了解chroot,这似乎是我正在寻找的东西。不过说实话,在 LFS 中有很多我并不真正理解的东西,chroot 就是其中之一。chroot如果我不是很害怕它可能会破坏我当前的环境,我会尝试玩弄。

所以我正在寻找一个虚拟化程序,它利用我在 linuxbox 上的事实(我正在使用 PinguyOS btw)来加速虚拟化,或者关于如何将 chroot 用作隔离操场的参考。

linux chroot virtual-machine

17
推荐指数
2
解决办法
9621
查看次数

如何使用 Linux 命名空间执行 chroot?

在阅读了 Linux 命名空间之后,我的印象是,在许多其他功能中,它们是 chroot 的替代品。例如,在这篇文章中:

[名称空间] 的其他用途包括 [...] chroot() 式将进程隔离到单个目录层次结构的一部分。

但是,当我克隆 mount 命名空间时,例如使用以下命令,我仍然看到整个原始根树。

unshare --mount -- /bin/bash
Run Code Online (Sandbox Code Playgroud)

我知道我现在能够在不与原始命名空间共享的新命名空间中执行额外的挂载,因此这提供了隔离,但它仍然是同一个根,例如/etc两个命名空间仍然相同。我还需要chroot更改根目录还是有其他选择?

我期待这个问题会提供答案,但答案chroot再次仅使用, 。

编辑#1

有一条现已删除的评论提到pivot_root。由于这实际上是 的一部分linux/fs/namespace.c,因此它实际上是名称空间实现的一部分。这表明仅使用unshare和更改根目录mount是不可能的,但命名空间提供了一个自己的——更聪明的—— chroot. chroot即使在阅读源代码之后(例如在安全性或更好的隔离的意义上),我仍然不明白这种方法的主要思想,这使得它与 根本不同。

编辑#2

这不是这个问题的重复。执行完答案中的所有命令后,我有单独的 /tmp/tmp.vyM9IwnKuY(或类似的),但根目录仍然相同!

chroot namespace

16
推荐指数
1
解决办法
5549
查看次数

启动到 chroot?

我在硬盘上安装了 Linux (Debian Jessie)。驱动器 - sda1、 ext4fs 和sda2- 交换

我有一个/chroot文件夹。在/chroot文件夹中安装了另一个系统。

题:

如何告诉引导管理器,不引导主系统(主系统,Debian Jessie),而是引导/chroot 中的系统?可能,改变/menu.lst和/chroot/etc/fstab?(vmlinuz root=/dev/sda1/chroot?)

或者问题的另一个变体:是否有可能将 linux 安装在分区的根目录中而不是安装在文件夹中?( /another_linux/bin, /another_linux/home, /another_linux/etc, ...)

startup chroot directory

15
推荐指数
3
解决办法
7036
查看次数

如果我的应用程序可以从一开始就在较低级别运行,为什么我要使用 chroot 进行沙箱化以确保安全?

我正在用 C 编写一个 HTTP 服务器守护进程(有原因),用 systemd 单元文件管理它。

我正在重写一个 20 年前设计的应用程序,大约在 1995 年。他们使用的系统是 chroot,然后是 setuid,以及标准程序。

现在在我之前的工作中,通常的策略是永远不要以 root 身份运行任何进程。您为它创建一个用户/组并从那里运行。当然,系统确实以root身份运行了一些东西,但是我们可以不以root身份完成所有业务逻辑处理。

现在对于 HTTP 守护进程,如果我不在应用程序中 chroot,我可以在没有 root 的情况下运行它。那么应用程序永远不会以 root 身份运行不是更安全吗?

从一开始就以 mydaemon-user 身份运行它不是更安全吗?不是用 root 启动它,chrooting,然后 setuid 到 mydaemon-user?

chroot daemon

15
推荐指数
2
解决办法
1783
查看次数

从分区上的子目录启动 Linux 系统?

我想尝试设置一台计算机,以便在同一个文件系统中安装多个 Linux。例如,filesytem将有3个文件夹:/Ubuntu_Precise,/Ubuntu_Oneiric,和/Ubuntu_Natty。

(我知道你可以用 BTRFS 和子卷来做到这一点,但我想使用 EXT4 来提高速度)。

我曾经使用 BTRFS 设置了多个不同发行版的安装,并且从运行开始,我知道 Grub 在从“非标准”路径启动 vmlinuz 和 initrd 映像方面做得很好。但是当我在做 BTRFS 的事情时,有rootflags=subvol=@<subvolume_name>一个告诉内核将该子卷挂载为文件系统中的 / 。是否有任何参数可以通过内核使其绑定挂载分区中的子文件夹作为 / 然后启动?

我认为对于其他部分,我相当接近。我知道如何在/etc/fstab. 此外,从我在 BTRFS 子卷中设置多个 linux 安装的系统时,我习惯于在 VM 中安装发行版,然后使用 rsync 迁移它,所以我不太担心我需要做什么获得正确的配置,我只是想找出正确的配置是什么。一旦我知道这一点,我应该能够轻松地迁移到子文件夹和文件编辑。

我已经了解虚拟化和分区,但这不是我要找的。目标计算机没有足够的能力进行虚拟化,并且分区不共享可用空间。我希望建立一个双/三/四/等引导Linux发行版的系统,但它是用一个文件系统完成的,因此不会出现“我有可用空间,但它在错误的分区中!”的情况。

如果有人建议如何编辑我的问题或其标题更清晰,我会全力以赴。

linux filesystems chroot boot

13
推荐指数
1
解决办法
6198
查看次数

使用 unshare 模拟 chroot

我正在尝试为最小的源代码 linux 发行版编写引导程序。

我想在一个类似 chroot 的环境中构建。这应该简化包装。在这一点上,我不关心安全性。引导程序不应需要任何非标准的第三方命令。如果不需要 root 那就太好了。

这就是为什么 fakechroot(1) fakeroot(1) chroot(1) 不是我正在寻找的。

是否可以伪造 / 使用 unshare(1) 和 /bin/sh?

chroot not-root-user namespace unshare

13
推荐指数
2
解决办法
5460
查看次数

如何使用/测试pivot_root?

我想测试将pivot_root当前进程的根文件系统移动到目录put_old并创建new_root新的根文件系统的命令。

但我总是收到以下错误:

pivot_root: failed to change root from .' toold-root/': Invalid argument
Run Code Online (Sandbox Code Playgroud)

我使用 Fedora 作为基本根,我的主文件夹中有一个 Archlinux

[root@localhost arch-root]# ls
bin boot dev etc home lib lib64 mnt old-root 
opt proc root run sbin srv sys tmp usr var
[root@localhost arch-root]# pivot_root . old-root/
pivot_root: failed to change root from .' toold-root/': Invalid argument
Run Code Online (Sandbox Code Playgroud)

我也尝试调用 linux 函数pivot_root("/chroot_test", "/chroot_test/old-root");得到同样的错误。

关于这个的任何想法?

更新 #1

我也尝试pivot_root在 Docker 中进行测试。我将这个 arch-root 挂载到 Docker 容器中。但得到以下错误:Operation not permitted …

linux chroot docker

13
推荐指数
2
解决办法
1万
查看次数

当进程作为特定组运行时,Linux 权限如何工作?

这是我无法找到太多信息的事情,因此将不胜感激。

我的理解是这样的。获取以下文件:

-rw-r-----  1 root        adm   69524 May 21 17:31 debug.1
Run Code Online (Sandbox Code Playgroud)

用户phil无法访问此文件:

phil@server:/var/log$ head -n 1 debug.1
cat: debug.1: Permission denied
Run Code Online (Sandbox Code Playgroud)

如果phil被添加到adm组中,它可以:

root@server:~# adduser phil adm
Adding user `phil' to group `adm' ...
Adding user phil to group adm
Done.
phil@server:/var/log$ head -n 1 debug.1
May 21 11:23:15 server kernel: [    0.000000] DMI: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5.1-0-g8936dbb-20141113_115728-nilsson.home.kraxel.org 04/01/2014
Run Code Online (Sandbox Code Playgroud)

然而,如果一个进程开始,同时明确地设置user:group到phil:phil它无法读取该文件。过程是这样开始的:

nice -n 19 chroot --userspec phil:phil …
Run Code Online (Sandbox Code Playgroud)

linux process chroot permissions chmod

13
推荐指数
2
解决办法
2万
查看次数

为什么我需要使用 chroot

这个问题chroot-jail-what-is-it-and-how-do-i-use-it指的是什么以及如何使用chroot.

我不明白的是为什么我需要使用chroot. 我明白它的作用,但我想不出需要使用它的情况,因为它不是安全机制或沙箱,正如答案指出的那样“你不应该将它chroot用作安全防止程序修改模拟文件系统之外的文件的措施”。

具体来说,为什么某个进程需要映射一个子目录作为rootfilesystem?

chroot

13
推荐指数
1
解决办法
5014
查看次数

ldd 在箭头后没有显示位置;系统上不存在库

我想创建一个 chroot 环境,它可以访问精心挑选的程序,但与系统的其余部分完全隔离。

我在这个 chroot 文件夹中创建了三个文件夹:bin, lib, lib64. 然后我复制了一个可执行文件,在这种情况下复制/bin/bash到bin. ldd /bin/bash显示此输出:

linux-vdso.so.1 =>  (0x00007ffff01f6000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f35ed501000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f35ed2fd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f35ecf33000)
/lib64/ld-linux-x86-64.so.2 (0x00007f35ed72a000)
Run Code Online (Sandbox Code Playgroud)

我可以复制所有这些库,除了linux-vdso.so.1. 如果我sudo find / -name "linux-vdso.so.1"没有输出。

我现在该怎么办?

linux chroot ubuntu find shared-library

12
推荐指数
2
解决办法
1万
查看次数