chroot

1. 简介

chroot是在unix系统的一个操作,针对正在运作的软件进程和它的子进程,改变它外显的根目录。一个运行在这个环境下,经由chroot设置根目录的程序,它不能够对这个指定根目录之外的文件进行访问动作,不能读取,也不能更改它的内容。chroot这一特殊表达可能指chroot(2)系统调用或chroot(8)前端程序。默认情况下我们指的是chroot(8)前端程序。

由chroot创造出的那个根目录,叫做“chroot监狱”(chroot jail,或chroot prison)。

2. 功能

Linux官方MAN手册对chroot命令的定义是: run command or interactive shell with special root directory,即运行命令或者具有指定根目录的交互式shell。基本在所有支持该命令的linux系统中,都需要以超级管理员的权限才可以执行该命令。

3. 常见应用领域

  • 系统修复
  • 系统启动时切换根目录,引导系统启动
  • 特权分离

4. 发展

chroot从1979年诞生至今,已经发展成为支持docker这样的容器的底层技术之一了。
docker约等于chroot+namespace+other。

5. 问题

在openssh的sftp中可能会经常碰到的问题就是用户认证都通过了,但是最终还是会登录失败。在ubuntu系统的auth.log日志中我们能看到类似bad ownership or modes for chroot directory xxx这样的内容,这个就是因为我们把chroot的目录所属的用户设置错了。
/etc/ssh/sshd_config目录中ChrootDirectory后面所接的路径的根目录属主必须是root用户。
当时就是因为这个目录属主设置错误耽误了我两天时间,一直摸不着头脑,从google的很多答案来说都有点儿不匹配,但是看到很多提到了chroot,然后就去看了下chroot的知识,然后做了上述修改后就成功了。

参考链接

  1. http://man7.org/linux/man-pages/man2/chroot.2.html
  2. https://www.ibm.com/developerworks/cn/linux/l-cn-chroot
  3. http://www.gnu.org/software/coreutils/manual/html_node/chroot-invocation.html#chroot-invocation
  4. https://zh.wikipedia.org/wiki/Chroot

你可能感兴趣的:(chroot)