站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

FTP-利用內建的 Ftpd 來提供 FTP 服務

最後編輯

修改:

< * /etc/ftpchroot:針對特定個人或郡組

> * /etc/ftpchroot:針對特定個人或群組


前言

當 FreeBSD 裝好後,內建就已經有 ftpd ,但您若覺得內建的 ftpd 功能太陽春,可使用其它 ftpd 來取代,像 pure-ftpd 就是個功能強大又安全的 ftp 軟體,本文為介紹內建的 ftpd。

實作環境

安裝及設定

步驟1.由 inetd 來啟動 ftpd

由於 FreeBSD 中內建的 ftpd 服務是透過 inetd 這隻服務來啟動,因此我們修改 inetd 設定檔啟動 ftpd.

參數說明:

修改 inetd 設定檔並加入參數

 #vi /etc/inetd.conf             //修改 inetd.conf 內容如下
 ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -l -S  //把這行的 # 拿掉,並加上 -l -l -S參數

步驟2.設定 Chroot 功能

何謂 Chroot? 即 FTP Client 登入後只能在該使用者帳戶內自已的家目錄下活動稱之,要達成此方法我們可透過設定 ftpchroot 或 login.conf 設定檔來埃成。

步驟2-1./etc/ftpchroot (針對特定個人或群組套用 chroot)

修改 /etc/ftpchroot 針對特定個人群組套用 chroot

 #vi /etc/ftpchroot         //修改(新增)此檔內容如下
 weithenn                   //限制 user account weithenn 只能在家目錄活動
 @ftpuser                   //限制 ftpuser 群組只能在家目錄活動

步驟2-2./etc/login.conf (針對所有使用者帳戶套用 chroot)

修改 /etc/login.conf 針對所有使用者帳戶套用 chroot

 #vi /etc/login.conf                         //修改 login.conf 加入 :ftp-chroot:\ 
 default:\
              :ftp-chroot:\                  //加入此行後存檔離開
              :passwd_format=md5:\
              :copyright=/etc/COPYRIGHT:\
              :welcome=/etc/motd:\
 #cap_mkdb /etc/login.conf                   //重新載入設定檔 (更新至 login.conf.db 資料庫中)

步驟2-3.chroot 套用後仍可存取共享目錄

但問題來了,如果想要讓使用者只能在自己的家目錄活動 (chroot),但又要能進入公開的共享目錄要如何達成呢? 使用 ln -s 是無法通過 chroot 的限制,此時請使用 mount_nullfs 來達成此一目的,即可達成限制使用者於 chroot 中又可取得共享檔案 *:)*

如下指令為將 /home/share 的共享目錄利用 mount_nullfs 指令掛到 /home/weithenn/share 下

 #mount_nullfs /home/share /home/weithenn/share

不過當你機器重新開機後此 mount 便消失了,若想要重開機仍自動 mount_nullfs 請新增如下 shell script 至 /usr/local/etc/rc.d 內

 #vi /usr/local/etc/rc.d/ftpshare.sh             //建立 script
 #!/bin/sh                                       //內容
 mount_nullfs /home/share /home/weithenn/share
 #chmod 755 /usr/local/etc/rc.d/ftpshare.sh      //記得給予執行的權限否則無法自動執行

步驟3.提供匿名登入 FTP 服務

若您想提供匿名 (Anonymous) 使用者也可存取 FTP 服務的話,可依如下方式設定即可

  1. 輸入指令 /stand/sysinstall 進入管理畫面
  2. 選擇 Configure
  3. 選擇 Networking
  4. 選擇 Anon FTP 後
    1. 設定匿名 (Anonymous) 使用者帳戶及目錄後即可開始使用,/var/log/xferlog 可查看 ftp 連結相關資訊

步驟4.設定開機時自動執行 inetd 服務

修改 rc.conf 設定檔,以便下次機器重新開機時能自動啟動 inetd 服務

 #vi /etc/rc.conf               //修改 rc.conf 設定檔
 inetd_enable="YES"             //加入此行

步驟5.安全性設定

當您的 FTP 只是要提供給特定幾人時,可利用 tcp_wrappers 功能來限制只有特定 IP Address 才能連線的功能

 #vi /etc/hosts.allow                         //修改 hosts.allow 內容如下
 ftpd : 61.60.59.58/255.255.255.255: allow    //允許 61.60.59.58 才能登入 FTP
 ftpd : ALL : deny                            //拒絕其他 FTP 連線請求

步驟6.啟動 inetd 服務

相關完成後我們鍵入以下指令來啟動 inetd 服務

 #/etc/rc.d/inetd start               //啟動 inetd 服務
 #kill -HUP `cat /var/run/inetd.pid`  //重新啟動 inetd 服務 (重新載入 inetd.conf 設定檔內容)

檢查執行序 (process) 是否已有 inetd 服務

 #ps aux |grep inetd                   //查看 inetd 服務是否啟動

測試 FTP 功能

 #telnet localhost 21                 //測試 ftp 服務是否啟動
 Trying 127.0.0.1...                  //啟動成功
 Connected to localhost.
 Escape character is '^]'.
 220 dmz.weithenn.org FTP server (Version 6.00LS) ready.
 quit                                 //輸入 quit 離開
 221 Goodbye.
 Connection closed by foreign host.

補充1:只想讓帳號能 FTP 連線而無法 SSH 登入?

若只想讓該使用者帳號只能 FTP 連線至 FreeBSD 而無法 SSH (putty) 登入至 FreeBSD 該如何達成?

 #vi /etc/shells        //修改 shells
 /bin/sh                //預設值
 /bin/csh               //預設值
 /bin/tcsh              //預設值
 /usr/sbin/nologin      //加入此行

使用指令 vipw 修改使用者的 Shell 環境,將預設 /bin/tcsh 修改為 /usr/sbin/nologin 則該使用者帳戶便只可 FTP 連線登入而無法使用 putty 進行 SSH 登入至 FreeBSD.

 #vipw
 weithenn:$1$5XtAqwy7$A.TnRLjkQ2yqrMj32XszC/:1001:1001::0:0:User &:/home/user/weithenn:/bin/tcsh            //預設值
 weithenn:$1$5XtAqwy7$A.TnRLjkQ2yqrMj32XszC/:1001:1001::0:0:User &:/home/user/weithenn:/usr/sbin/nologin    //修改後

補充2:如何改變 FTP 預設上傳目錄及檔案權限?

為何需要更改呢?因為 ftpd 預設上傳目錄及檔案的權限為 umask 022

 umask:022  	//等於對檔案權限為 644 對目錄權限為 755

這樣當有許多帳號想要同時上傳到同一個目錄時,則會產生困擾因為 umask 為 022 ,所以上傳的檔案為 644 這樣當另一個人想上傳時便發生檔案無法寫入的問題,如何才能讓預設上傳的權限改為 664 呢?

 #vi /etc/login.conf
 :umask=022:                //預設值
 :umask=002:                //更改後對檔案權限為 664 對目錄權限為 775
 #cap_mkdb /etc/login.conf  //重新載入設定檔 (更新至 login.conf.db 資料庫中)

經過上述更改後 ftpd 上傳預設就變為 644 關於 umask 對應請參考[網路農夫 -- UNIX C Shell -- 3-8-1 umask 指令]

參考

[man page ftpd]

[雄的 FreeBSD 筆記 - FTP 架設]

[twbsd.org - 第十五章 FTP 伺服器]

[網路農夫 -- UNIX C Shell -- 3-8-1 umask 指令]

Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com