关于如何使用 chroot, 为程序设置新的执行环境chroot & schroot etc.(文件系统虚拟化)

文件系统的虚拟化

chroot example:

sudo chroot my_chroot_dir /bin/bash  # 预先建立 my_chroot_dir/{bin,lib} 目录,并拷贝相应的可执行程序bash和库,否则会提示没有 /bin/bash. 或者安装一个可运行环境:见 debootstrap

sudo chroot my_chroot_dir/ /bin/bash -c "echo 'aaa'; cd workspace; ls"  # 执行多条命令

关于使用 debootstrap 下载一个最小linux系统运行环境:

sudo debootstrap --variant=buildd --arch i386 trusty ~/my_chroot_dir http://archive.ubuntu.com/ubuntu  # 安装兼容的最小系统
# 或者 --arch amd64 安装64位(如果操作系统是64位的)

sudo chroot /my_chroot_dir apt-get install cmake  # 安装 cmake 软件包

如果 apt-get install 的时候出错:E: Unable to locate package,则表示你的 /etc/apt/sources.list 文件中没有包含所有的软件包。
复制主机文件 /etc/apt/sources.list 的到 chroot 环境中,并且执行 apt-get update 即可。

# 如果需要设置某些环境变量,可以这样启动(see LFS):
sudo chroot my_chroot_dir /usr/bin/env -i \
    HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin \
    /bin/bash --login +h

ref link:
http://www.linuxfromscratch.org/
http://robocomp.readthedocs.io/en/latest/How_To_Make_Chroot_Environment/
http://www.ubuntubuzz.com/2015/09/a-basic-chroot-example-in-ubuntu.html
http://www.binarytides.com/setup-chroot-ubuntu-debootstrap/

关于 chroot jail 获得外部目录:

mount --bind /var/www /home/chroot_dir/www  // 其中 /var/www 为 chroot 环境外的目录, /home/chroot_dir/www 为挂载点

// 取消monut
umount /home/chroot_dir/www  // see link: http://www.linfo.org/umount.html

schroot:免 sudo 运行 chroot
使用 schroot 需要预先配置一下

1 .创建文件:
sudo gedit /etc/schroot/chroot.d/my_chroot.conf

文件内容如下: ref link https://wiki.debian.org/Schroot

[my_chroot_env]
description=My first chroot env, Ubuntu trusty 14.04 for amd64
directory=/home/guowei/my_chroot_dir
root-users=guowei,root
type=directory
users=guowei,abc

2 . 保存后,可以使用 schroot -l 查看一下是否有输出: my_chroot_env

然后就可以免sudo执行命令了:

// sudo apt-get install schroot
schroot -c my_chroot_env -u guowei -- sh -c "cd foo && ls && export A=blabla"  // 免 sudo 执行 chroot 命令

# 如果需要设置环境变量,如下:
schroot -c my_chroot_env -- env MY_ENV_VAR=/home/guowei/robot sh -c "cd ~/workspace && make"

注意,该使用 env 设施的环境变量不是对当前的 sh -c 生效,是对子命令 make 生效,所以在 sh -c 中添加 echo $MY_ENV_VAR 是不会打印任何信息的,但是如果新生成一个bash,再在新的bash中 echo $MY_ENV_VAR 则可以打印该环境变量。同理, export 命令也是将 shell 的 local variable 变为子程序的环境变量,不能在当前的 shell 中生效。
see link: http://stackoverflow.com/questions/234742/setting-environment-variables-in-linux-using-bash

创建一个 session:

#!/bin/bash
schroot --begin-session --session-name=test -c my_chroot_env
schroot --run-session -c test -- sh -c "cd /workspace && ls && cd ~/foo/bar && make"
schroot --end-session -c test

#SESSION=$(schroot -b -c my_chroot_env)
#echo $SESSION
#schroot -r -c $SESSION -- uname -sr
#schroot -r -c $SESSION -- bash -c "ls && export A=3 && cd /abcd/.. && ls && export B=abcd; cd $B && ls"
#schroot -e -c $SESSION

see link:
http://linux.die.net/man/1/schroot
http://man.cx/schroot(1)
http://servertopic.com/topic/xaqb-run-commands-in-schroot-environment-from-chroot-host-outside-chroot

除了使用原始的 chroot, Vagrant, Docker, Ansible or Mock 等更高级的工具可能更适合你:

http://devo.ps/blog/vagrant-docker-and-ansible-wtf/
https://macyves.wordpress.com/2014/05/23/a-quick-primer-on-chroot-sbuild-mock-and-vagrant/

在 Ubuntu 22.04 中配置 vsftpd 的虚拟用户模式可以按照以下步骤进行: 1. 安装 vsftpd: ``` sudo apt update sudo apt install vsftpd ``` 2. 创建一个专门用于存储虚拟用户文件的目录,例如 `/home/ftpfiles`: ``` sudo mkdir /home/ftpfiles ``` 3. 创建一个的系统用户组和用户,用于虚拟用户: ``` sudo groupadd ftpusers sudo useradd -g ftpusers -d /home/ftpfiles -s /bin/false ftpuser ``` 4. 安装 db-util 工具,用于生成虚拟用户的认证数据库文件: ``` sudo apt install db-util ``` 5. 创建一个用于存储虚拟用户的认证数据库文件(例如 vsftpd-virtual-users.db): ``` sudo db5.3_util --header --empty vsftpd-virtual-users.db ``` 6. 添加虚拟用户到认证数据库文件中: ``` sudo db5.3_load -T -t hash -f /etc/vsftpd/vsftpd-virtual-users.db /etc/vsftpd/vsftpd-virtual-users.txt ``` 在这里,你需要创建一个用于存储虚拟用户的用户名和密码的文本文件 `/etc/vsftpd/vsftpd-virtual-users.txt`。每行包含一个用户名和密码,以空格分隔。 7. 配置 vsftpd 服务器: ``` sudo nano /etc/vsftpd.conf ``` 确保以下配置选项被启用或修改为以下值: ``` listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd guest_enable=YES guest_username=ftpuser user_sub_token=$USER local_root=/home/ftpfiles/$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd/vsftpd_user_conf ``` 8. 创建一个用于存储每个虚拟用户个性化配置文件的目录: ``` sudo mkdir /etc/vsftpd/vsftpd_user_conf ``` 9. 为每个虚拟用户创建个性化配置文件: ``` sudo nano /etc/vsftpd/vsftpd_user_conf/username ``` 将 `username` 替换为实际的虚拟用户名,然后添加以下内容: ``` write_enable=YES local_umask=022 ``` 10. 重启 vsftpd 服务以应用更改: ``` sudo systemctl restart vsftpd ``` 现在,你应该可以使用虚拟用户登录到 vsftpd 服务器,并在其各自的 `/home/ftpfiles/username` 目录中创建、修改和删除文件和目录了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值