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

來源:互聯網
上載者:User

  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#chinaz.com(把#改為@)。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。