我已经用 chroot 到一个外部磁盘sudo chroot /mnt/disk,但几乎我所做的一切(登录、tab 完成、less输入文件,...)都会导致一个错误提到/dev/null: Permission denied,即使命令似乎有效。
/dev/null 具有正确的权限 (666),并file表示它是一个字符设备,所以它不像任何东西已经用常规文件覆盖它或更改了权限。
我能做些什么来解决这个问题?
以下是制表符补全(of ls /u)的结果:
$ ls /ubash: /dev/null: Permission denied
bash: _upvars: `-a2': invalid number specifier
bash: /dev/null: Permission denied
bash: _upvars: `-a0': invalid number specifier
Run Code Online (Sandbox Code Playgroud) 最近的 Linux 发行版如 Fedora 和 Ubuntu 都使用 chroot 环境进行构建。因为在构建的时候经常需要安装一些特殊的工具,并且安装到现有的系统上。使用 chroot 可以避免对主机系统进行任何更改。
搭建这样的构建环境,第一步就是制作一个chroot。我正在遵循https://wiki.debian.org/Schroot 上的设置指南
[wheezy-test]
description=Contains the SPICE program
aliases=test
type=directory
directory=/srv/chroot/test
users=jsmith
root-groups=root
script-config=desktop/config
personality=linux
preserve-environment=true
Run Code Online (Sandbox Code Playgroud)
在我设置的主机中,/home 位于 /dev/mapper 上。当进入 schroot 时,同一个 home 被绑定安装。有没有办法避免这种情况?我更喜欢在 chroot 中使用不同的 /home。
将类型从目录更改为普通时,不执行绑定。但是,这也会丢失 /proc、/sys 等。您必须手动绑定挂载它们。这似乎不是一个好的解决方案。
如果简单的配置更改不可用,您知道 type=directory 的脚本在哪里吗?可能我会手动修改脚本。
提前感谢您的任何答案或提示!
我想设置 Grub 菜单项来启动到 chroot 系统(安装 chroot 的 debootstrap 以避免过多接触现有系统)。
目前我做了以下事情来实现它:
在 chroot 环境中安装 linux-image 和朋友
手动重新管理 initramfs 以 chroot 到系统中,而不是通常的行为:
rootmnt=$rootmnt/root/squeeze
...
#exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
exec chroot ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
Run Code Online (Sandbox Code Playgroud)
3.. 将条目添加到/boot/grub.cfg:
menuentry 'Chrooted debian Squeeze' {
...
linux /root/squeeze/boot/vmlinuz root=... rw
initrd /root/squeeze/boot/initrd-chroot
}
Run Code Online (Sandbox Code Playgroud)
它可以工作,但设置起来并不容易,并且每次更改 initrd 时都需要手动修改。怎样才能做得更好呢?
我正在 Makefile 中的一些东西看起来像这样:
压缩包:
mkdir -p tmp/tarball/etc/service
mkdir -p tmp/tarball/usr/local
mkdir -p tmp/tarball/opt/myproject
cd 传感器数据;制作
cd 传感器隧道;制作设备名称
cp -r sensorservices tmp/tarball/etc/service
# 在这里制作一个 tarball,例如:
# chroot tmp/tarball;tar -czvf myproject.tar.gz 。
这个想法是,我将能够进入该./tmp/tarball目录,并创建一个 tarball,当在系统上解压缩时,它会将自身解压缩到/etc/service,/usr/local和/opt/myproject.
经典方法似乎是使用,tar -czvf -C tmp/tarball .但这会导致以 .tar 开头的条目的 tar 列表./。
我的灵感来自 Go 语言的包,这表明它应该安装:
tar -C /usr/local -xzf go1.0.3.linux-amd64.tar.gz
Run Code Online (Sandbox Code Playgroud)
这对我的用例来说是理想的,我希望能够做到:
tar -C / -xzf myproject.tar.gx
Run Code Online (Sandbox Code Playgroud)
这反过来会将最初的文件提取~/some-working-directory/tmp/tarball/_____到/_____,这意味着我可以简单地伪造安装结构。
当然,这可能会更好地通过类似fpm.
我偶然发现了fakechroot,这似乎很有希望,但并不令人惊讶,chroot 中不存在 tar,当我开始进入那个兔子洞时,我只是假设我做错了什么,应该寻求帮助。
我最近创建了一个 schroot(按照此处的说明),它方便地共享我的(主机)用户主目录。也就是说,/home/username在 chroot 中和在 chroot 之外是一样的。
这种行为在哪里配置?我怎样才能防止这种行为?
我使用的是 Ubuntu 桌面 12.04 64 位,并且 schroot 版本信息是
$ schroot --version
schroot (Debian sbuild) 1.4.25 (03 Feb 2012)
Run Code Online (Sandbox Code Playgroud) 我已经用 vsftpd 安装了 ubuntu 12.04。我需要创建只能访问像 /var/www/nameDirectory 这样的目录的 FTP 用户。我认为这是一个非常基本的功能,但似乎不是我尝试使用的,在 vsftpd.conf 中
chroot_local_user=YES
Run Code Online (Sandbox Code Playgroud)
但是(使用 adduser 创建用户 'test')'test' 仍然能够浏览文件系统。我设法将“test”(使用 usermod)的根目录更改为 /var/www/nameDirectory 但他仍然能够返回到 /var 或 /。
然后我试过了
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
Run Code Online (Sandbox Code Playgroud)
创建列表文件并将“测试”放入其中。也没有财运。
最后我什至试图遵循这个https://askubuntu.com/questions/575523/how-to-setup-virtual-users-for-vsftpd-with-access-to-a-specific-sub-directory 但没有不行。
我错过了一些东西。
问题是在 FileZilla 中,我可以使用用户“test”访问,该用户位于正确的目录中,但有权浏览所有内容。
这是我的 vsftpd.conf
listen=YES
anonymous_enable=YES
local_enable=YES
write_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
secure_chroot_dir=/var/run/vsftpd/empty
rsa_cert_file=/etc/ssl/private/vsftpd.pem
Run Code Online (Sandbox Code Playgroud)
编辑:只是为了玩,我试图在 /etc/vsftpd.conf 中将 local_enable 设置为 NO 或 write_enable 为 NO 但没有效果(仍然可以通过 FTP 访问,仍然可以使用用户“test”写入)。也许这是错误的conf文件?或者其他一些软件正在为我提供 FTP 服务?我怎么知道发生了什么?
编辑 2:停止 vsftpd(服务 vsftpd 停止)并且仍然能够连接到 FTP。我怎么知道是什么给了我 FTP 访问权限?
我在 Arch 系统上使用 debootstrap envs。\n我将主目录中的一些目录绑定挂载到 chroot fs 主目录中,即。/home/user/foo\xe2\x86\x92 /stretch/home/user/foo。我可以在两个地方看到来自主机 Arch 系统的内容,但是从 chroot 环境中登录时user,foo目录只是空的。
编辑:我不应该认为相同的设置曾经有效,但由于某种原因现在不起作用。我不知道任何相关配置已更改。
\n\n这怎么可能?
\n我在 chroot 环境中的 arm64 android 手机中安装了 debian stretch。我已经按照这里的这些步骤安装了 docker-ce 。
在启动泊坞窗时:: systemctl start docker
返回此错误:: Running in chroot, ignoring request.
使用service docker status节目 检查[FAIL] Docker is not running ... failed!
如果我运行 using dockerd,它会显示此错误::
INFO[2018-02-05T22:15:35.631735524+05:30] libcontainerd: started new docker-containerd process pid=23047
INFO[0000] starting containerd module=containerd revision=89623f28b87a6004d4b785663257362d1658a729 version=v1.0.0
INFO[0000] setting subreaper... module=containerd
INFO[0000] changing OOM score to -500 module=containerd
INFO[0000] loading plugin "io.containerd.content.v1.content"... module=containerd type=io.containerd.content.v1
INFO[0000] loading plugin "io.containerd.snapshotter.v1.btrfs"... module=containerd type=io.containerd.snapshotter.v1
WARN[0000] failed to load plugin …Run Code Online (Sandbox Code Playgroud) 如何允许用户在 chroot 用户上使用 SCREEN?
我已经尝试了一切,但我一直失败。
我需要用户在以 chroot 用户身份登录 bash 时能够使用 SCREEN。
我想知道是否有人能够在 OSX 上使用 chroot 来运行另一个操作系统(ubuntu、centos)。我知道它们非常不同,但是我想用它来做的几乎所有事情都不会关心内核级别的任何事情,所以希望有一种方法可以在不使用 VM 的情况下做到这一点。
根据我的谷歌搜索,我看到有人问了这个问题,但除了“尝试虚拟机”之外没有真正的答案。虽然真的很想在没有虚拟机的情况下做到这一点。