chroot jail
注意,原标题是:Linux Virtualization using Chroot Jail,我实在不知道怎么翻译,所以,自作主张,选了chroot jail作为标题。原文地址
chroot jail是什么?
在unix/类unix操作系统上,默认的根目录都是‘/’,而chroot就是为改变正在运行的进程(程序)以及它的进程(子程序)的根目录而生。假设,某个程序的根目录从原先的默认的系统根目录‘/’,被你修改到/home目录下,这个/home目录就变成这个程序的逻辑根目录,那么,这个被修改了根目录环境的程序,就不能进入这个逻辑根目录以外的路径。本质上,这就是限制某个程序所能进入的目录树,所以,被称为chroot监狱。(即chroot jail)。
因此,这个程序的活动范围就从本来的整个系统"/",到后来的逻辑根“/home”。
建立方法
通过创建一个目录(树),并且将程序运行时所需要的系统文件复制/链接到这个目录树里,就可以为程序设定chroot jail。之后,通过chroot系统调用,将程序默认的系统根目录切换到你刚刚创建的,并且具有程序运行环境的目录树中。因为程序不能访问目录树(即上文提到的逻辑根)以外的路径,所以,这就起到了保护系统,防止别人修改你系统文件的作用。通常,被用在ftp和Nginx等服务器中。简单来说,chroot jail就是将你限制在某个路径中,你所能访问的最大范围就是这个路径,所以,逻辑上,这个路径,就是你的根目录。
那么现在有一个问题:
chroot jail技术与虚拟机制有什么不同?
Chroot Jail是操作系统级别(Operating-system-level)的虚拟化技术,通常被用于在主机系统上创建多个相互独立的实例( instances)。和工作在应用层的虚拟机(Virtual Machines)相比,它是内核级别的虚拟化,几乎不占用的系统开销,所以在相同的硬件上,它比用虚拟机来创建多个独立实例(isolated instances)要好得多。虚拟机(VM)则是机器的软件实现,它们经常利用所谓的硬件虚拟化来呈现正在工作的操作系统的虚拟映像。
使用方法
创建chroot jail最基本的命令是(当然,现在这些命令还不能使用,还得将命令运行所需要的系统文件复制到/path/to/new/root下才行):
chroot /path/to/new/root command
chroot /path/to/new/root /path/to/server
chroot [options] /path/to/new/root /path/to/server
注意:只有有权限/root用户才能使用这个命令
说了那么就,现在我们就来为bash和ls命令(程序/进程)创建一个小监狱(mini-jail):
- 为命令创建一个逻辑根目录并进入里面:
mkdir jailed
cd jailed
- 创建运行命令的所有必需目录:根据你的操作系统,所需的目录可能会更改。 逻辑上,我们创建所有这些目录来保存所需的库的副本。 要查看所需的所有目录,请参阅步骤4(根据步骤4,我的系统需要lib。bin这个是必须的就不用多说了吧?):
mkdir -p bin lib/
- 运行'which'命令:运行'which'命令查找ls和bash命令的位置。 运行该命令后,将这些二进制文件复制到我们的jailed的'bin'目录中。 确保你这些命令没有任何别名。
unalias ls
unalias bash
cp $(which ls) ./bin/
cp $(which bash) ./bin/
这一步中,如果你的命令有别名,那么恭喜你,会发生下列情况:
cp: unrecognized option `--color=tty''
Try `cp --help' for more information.
- 复制适当的库/对象(libraries/objects):为了我们的Jailed目录中的可执行文件工作,我们需要复制相应的库/对象到JAILED目录中。默认情况下,可执行文件从'/'开始查找这些库/对象。 为了找到依赖关系,我们使用命令'ldd'。
执行ldd $(which ls)
:
linux-gate.so.1 => (0x001f8000)
librt.so.1 => /lib/librt.so.1 (0x004bf000)
libacl.so.1 => /lib/libacl.so.1 (0x00464000)
libselinux.so.1 => /lib/libselinux.so.1 (0x004ca000)
libc.so.6 => /lib/libc.so.6 (0x00302000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0048f000)
/lib/ld-linux.so.2 (0x002de000)
libattr.so.1 => /lib/libattr.so.1 (0x007d4000)
libdl.so.2 => /lib/libdl.so.2 (0x0045d000)
libsepol.so.1 => /lib/libsepol.so.1 (0x004e4000)
执行ldd $(which bash)
:
linux-gate.so.1 => (0x0011a000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x0748a000)
libdl.so.2 => /lib/libdl.so.2 (0x0045d000)
libc.so.6 => /lib/libc.so.6 (0x00302000)
/lib/ld-linux.so.2 (0x002de000)
运行下面的命令来创建适当的目录(这里我演示bash命令,ls命令操作一样):
cp /lib/libtermcap.so.2 lib/
cp /lib/libdl.so.2 lib/
cp /lib/libc.so.6 lib/
cp /lib/ld-linux.so.2 lib/
此时,应有下列文件结构:
.
|-- bin
| |-- bash
| `-- ls
`-- lib
|-- ld-linux.so.2
|-- libacl.so.1
|-- libattr.so.1
|-- libc.so.6
|-- libdl.so.2
|-- libpthread.so.0
|-- librt.so.1
|-- libselinux.so.1
|-- libsepol.so.1
`-- libtermcap.so.2
运行命令
到了这里,就是测试你前面努力成果的时刻了!!!
先试一下最基础的命令:chroot /path/to/new/root command
:
再来,用chroot /root/jailed /bin/bash
来弹出一个新的bash,在这了bash中,根目录就是原先的/root/jailed/目录:
chroot jail的更多相关文章
- chroot 与 jail
所谓“监牢”就是指通过chroot机制来更改某个进程所能看到的根文件夹,即将某进程限制在指定文件夹中,保证该进程仅仅能对该文件夹及其子文件夹的文件有所动作,从而保证整个server的安全. 创建chr ...
- chroot详解
我是一个刚接触 Linux 和 Unix 的新手.我该如何改变一个命令的根目录?我要怎样改变一个进程的根目录呢,比如用 chroot 命令将web服务与文件系统隔离?我要如何使用 chroot 恢复密 ...
- ubuntu 14.04 下FTP服务器的搭建--锁定用户目录,解决vsftpd: refusing to run with writable root inside chroot()
FTP服务器的搭建,我要实现的需求是: 不允许匿名访问,因为我的机器不想让谁都能登录上来,随便获取文件, 需要锁定一个目录,因为在家里,我需要给媳妇下载一些电影 韩剧之类的东西,媳妇会来我机器下载,但 ...
- chroot 命令实例讲解
我是一个刚接触 Linux 和 Unix 的新手.我该如何改变一个命令的根目录?我要怎样改变一个进程的根目录呢,比如用 chroot 命令将web服务与文件系统隔离?我要如何使用 chroot 恢复密 ...
- How to Setup Chroot SFTP in Linux (Allow Only SFTP, not SSH)
1. Create a New Group Create a group called sftpusers. Only users who belong to this group will be a ...
- centos chroot使用
chroot命令用来在指定的根目录下运行指令.chroot,即 change root directory (更改 root 目录).在 linux 系统中,系统默认的目录结构都是以/,即是以根 (r ...
- 使用 chroot 建立沙盒环境
使用 chroot 建立沙盒环境 chroot 提供了更改当前进程及其子进程的可见根目录的操作,运行在此隔离环境中的应用程序无法访问新的目录树之外的文件和命令.这样的隔离环境称作 chroot 监狱( ...
- Stunnel服务端
Stunnel on Debian GNU/Linux 6 (squeeze) 传统的POP3, SMTP, Samba等服务,都是不加密的协议(即在网络上明文传输数据),通过stunnel,可以将访 ...
- linux运维中的命令梳理(四)
----------管理命令---------- ps命令:查看进程 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不 ...
随机推荐
- CDIF:基于JSON的SOA软件框架
通用设备互联框架(CDIF)是一个具备中美知识产权保护的,基于web的连接框架,目前有部分开源实现存放在: GitHub - out4b/cdif: Common device interconnec ...
- Dubbo配置方式详解
Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是阿里巴巴 SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次 ...
- 伸展树(Splay树)的简要操作
伸展树(splay树),是二叉排序树的一种.[两个月之前写过,今天突然想写个博客...] 伸展树和一般的二叉排序树不同的是,在每次执行完插入.查询.删除等操作后,都会自动平衡这棵树.(说是自动,也就是 ...
- Unity编译Android的原理解析和apk打包分析
作者介绍:张坤 最近由于想在Scene的脚本组件中,调用Android的Activity的相关接口,就需要弄明白Scene和Activity的实际对应关系,并对Unity调用Android的部分原理进 ...
- java基础之类与对象3
前面我的两篇文章主要介绍了将怎么将事物抽象为对象,以及对象的实例化(就是new一个对象).这篇文章里面我就讲下匿名对象... 还是就举之前的例子把,Car c = new Car();看到这个我们就知 ...
- java 基础知识九 类与对象
java 基础知识九 类与对象 1.OO(Object–Oriented )面向对象,OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应 ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- 1001. Exponentiation高精度运算总结
解题思路 这道题属于高精度乘法运算,要求输入一个实数R一个指数N,求实数R的N次方,由于R有5个数位,而N又特别大,因此用C++自带的数据类型放不下. 解题思路是通过数组储存每次乘积结果和底数的每一位 ...
- 配置WampServer以及搭建WordPress的一些问题,持续总结。
这里用的版本是Wampserver2.4-x64. Wamp的安装就不赘述了,一路点通过就可以了. #注意:(最好别改,省的麻烦) 80端口是Apache 的默认端口,在httpd.conf文件中配置 ...
- 图文详解linux如何搭建lamp服务环境
企业网站建设必然离不开服务器运维,一个稳定高效的服务器环境是保证网站正常运行的重要前提.本文小编将会详细讲解Linux系统上如何搭建配置高效的lamp服务环境,并在lamp环境中搭建起企业自己的网站. ...