当前位置: 首页 > 图文教程 > 服务器 > FTP服务器 > 浅析在FreeBSD中建立chroot的FTP服务

FTP服务器
用SSL加密增强FTP服务器安全性
Windows下FTP服务器的安全管理
如何配置FTP服务器
FTP服务器快速架设全攻略
FTP服务器如何实现安全性 (上)
基于UNIX平台FTP服务器的建立(下)
Windows XP架设FTP服务器的方法教程
Linux系统架设VSFTP服务器实例解析
企业内部FTP服务器的架设
FTP服务器安全
Linux的ftp服务vsftp详细配置
Ubuntu自带的FTP服务器vsftpd技巧
在Linux下建立强大的FTP搜索引擎
用无线路由器构建FTP服务器
FTP服务中允许上传权限存在的问题
简单实用 Linux下的FTP服务器配置
FTP空间不足 Windows 系统性能监控来报警
如何启用Web服务器并运行FTP服务
FTP服务器架设的三方面安全因素
如何配置Linux操作系统下的FTP服务器

FTP服务器 中的 浅析在FreeBSD中建立chroot的FTP服务


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 42 ::
收藏到网摘: n/a

  1、准备基本的chroot环境

  在进入chroot环境之前要先准备好相应的设置,在本例中我们打算将ftpd chroot到/var/chroot目录中。

  因为系统自带的ftpd在/usr/libexec/目录,所以我们需要在/var/chroot中执行以下操作:
  
  matthew@bsd# mkdir -p /var/chroot/usr/libexec
  
  然后将ftpd复制到该目录中:
  
  matthew@bsd# install -C /usr/libexec/ftpd /var/chroot/usr/libexec
  
  接下来要做的就是将ftpd需要的库也复制到chroot目录中,我们可以使用ldd来检测ftpd运行时需要哪些库:
  
  matthew@bsd# ldd /usr/libexec/ftpd
  /usr/libexec/ftpd:
  libskey.so.2 => /usr/lib/libskey.so.2 (0x28074000)
  libmd.so.2 => /usr/lib/libmd.so.2 (0x2807b000)
  libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x28084000)
  libutil.so.3 => /usr/lib/libutil.so.3 (0x2809d000)
  libpam.so.1 => /usr/lib/libpam.so.1 (0x280a6000)
  libc.so.4 => /usr/lib/libc.so.4 (0x280af000)
  
  ldd的运行结果显示了ftpd运行时需要库,现在我们只要把这些库安装到我们的chroot的相应目录中便可:
  
  matthew@bsd# mkdir -p /var/chroot/usr/lib
  matthew@bsd# install -C /usr/lib/libskey.so.2 /var/chroot/usr/lib
  matthew@bsd# install -C /usr/lib/libmd.so.2 /var/chroot/usr/lib
  matthew@bsd# install -C /usr/lib/libcrypt.so.2 /var/chroot/usr/lib
  matthew@bsd# install -C /usr/lib/libutil.so.3 /var/chroot/usr/lib
  matthew@bsd# install -C /usr/lib/libpam.so.1 /var/chroot/usr/lib
  matthew@bsd# install -C /usr/lib/libc.so.4 /var/chroot/usr/lib
  
  2、第一次进入chroot环境

  现在我们可以试试看ftpd能不能在我们的chroot环境中运行:
  
  matthew@bsd# chroot /var/chroot /usr/libexec/ftpd
  ELF interpreter /usr/libexec/ld-elf.so.1 not found
  
  程序出错,根据提示在/usr/libexec中还缺少文件ld-elf.so.1,由于我们的ftpd是在chroot环境中运行,所以我们应该将ld-elf.so.1复制到我们的chroot环境中,即/var/chroot/usr/libexec中:
  
  matthew@bsd# install -C /usr/libexec/ld-elf.so.1 /var/chroot/usr/libexec
  
  现在我们再次试着进入我们的chroot环境:
  
  matthew@bsd# chroot /var/chroot /usr/libexec/ftpd
  
  这次没有任何提示说明我们的运行库已经准备好了,但是由于ftpd在不带-D参数的时候运行完后就会自动退出,所以现在我们还无法从远程登录ftp服务,那么我们试着在ftpd后面加上参数-D:
  
  matthew@bsd# chroot /var/chroot /usr/libexec/ftpd -D
  
  结果与上次一样,通过查阅chroot(8)的手册,我们可以看到chroot的语法是:chroot newroot [command]

  也就是说command后面不能带参数,即然这样我们就写一个简单的shell脚本来运行ftpd,这个脚本命名为ftpd.sh,存放于/var/chroot/usr/libexec中,内容为:
  
  #!/bin/sh
  /usr/libexec/ftpd -D -4
  
  由于我们不需要支持IPv6,所以这里加上了参数-4只对IPv4提供支持,当然你也可以加上一些其它参数。

  接下来为脚本加上执行权限: matthew@bsd# chmod a+x /var/chroot/usr/libexec/ftpd.sh

  为了要运行这个脚本程序,我们还需要将/bin/sh复制到我们的chroot环境中:
  
  matthew@bsd# mkdir /var/chroot/bin
  matthew@bsd# install -C /bin/sh /var/chroot/bin
  
  接下来我们就要为chroot环境准备/etc目录了。首先要复制的就是/etc/services文件,因为它定义了ftpd使用的端口号和协议:
  
  matthew@bsd# mkdir /var/chroot/etc
  matthew@bsd# cp /etc/services /var/chroot/etc
  
  因为需要验证用户,所以需要复制master.passwd和group:
  
  matthew@bsd# cp /etc/group /var/chroot/etc
  matthew@bsd# cp /etc/master.passwd /var/chroot/etc
  
  编辑/var/chroot/etc/master.passwd和/var/chroot/etc/group,删除不需要使用ftp的用户和不必要的组,注意,当更改了master.passwd后一定要使用pwd_mkdb来生成密码数据库,由于此时我们需要将密码数据库文件存放在/var/chroot/etc中,而不是默认/etc中,所以在pwd_mkdb后面加上-d参数来指定数据库存放位置:
  
  matthew@bsd# pwd_mkdb -d /var/chroot/etc /var/chroot/etc/master.passwd
  
  此时如果执行成功的话你将看到在/var/chroot/etc/目录中多了两个文件:pwd.db、spwd.db。

  让我们再次进入我们的chroot环境:
  
  matthew@bsd# chroot /var/chroot /usr/libexec/ftpd.sh
  
  现在我们便可以登录到我们的这个chroot的ftp服务器了。
  
  3、结尾工作

  为每一个用户建立home目录,注意是在建在/var/chroot/home之中。

  在/var/chroot/etc/中生成ftpusers文件,将禁止登录ftp的用户的用户名加入其中,以禁止部分用户登录。

  在/var/chroot/etc/中生成ftpchroot文件,它的作用是限制用户只能访问自己的home目录中的文件,而不能访问home外的任何内容。将你要限制的用户的用户名加入其中。

  在/var/chroot/etc/中生成ftpwelcome文件,它的作用是当用户连接上我们的服务器的时候显示欢迎信息。

  在/var/chroot/etc/中生成ftpmotd文件,它的作用是当用户登录进服务器的时候显示欢迎信息。
 
  请作者联系本站,及时附注您的姓名。联系邮箱:edu#ruanchen.com(把#改为@)。