歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 淺析在FreeBSD中建立chroot的FTP服務

淺析在FreeBSD中建立chroot的FTP服務

日期:2017/3/6 15:50:11   编辑:關於Unix
1、准備基本的chroot環境 在進入chroot環境之前要先准備好相應的設置,在本例中我們打算將ftpd chroot到/var/chroot目錄中。 因為系統自帶的ftpd在/usr/libexec/目錄,所以我們需要在/var/chroot中執行以下操作: matthew@bsd# mkdir -p /var/chroot/usr/lib
  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文件,它的作用是當用戶登錄進服務器的時候顯示歡迎信息。

Copyright © Linux教程網 All Rights Reserved