動作

Ob2d Vsftp

出自 Itsmw

簡介

 本文同時適用 OB2D sqz 及 Ubuntu Linux 上的檔案傳輸服務伺服器 vsFTPd 套件,依本文的設定教學後,預設狀態如下:

  1. 使用 stand alone 方式提供服務
  2. 任何合法使用者皆可以登入,並存取自己家目錄底下的檔案
  3. 關閉 anonymous
  4. 基於安全因素使用登入後,其家目錄就是根目錄 (chroot_local_user=YES ),因此無法在「第三地」建立「公用資料夾」後,以 link 的方式給各使用者存取。


安裝

  • 安裝
    root@dns:~# apt-get update
    root@dns:~# apt-get install vsftpd



設定檢查

  • 請檢查 /etc/vsftpd.conf 內的設定值是否與下面所列一致
#情況一:在IPv4監聽

listen=YES
#listen_ipv6=YES


#***--------------------------------------------
# 情況二:同時在 v4 及 v6 監聽, 網卡務必要有 ipv6 address

#listen=YES
listen_ipv6=YES



#不允許anonymous公共下載區
anonymous_enable=NO

#列出資料夾內檔案詳細列表
dirmessage_enable=YES

#使用本機時間
use_localtime=YES

#使用記錄檔
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

#啟動主動式傳輸
connect_from_port_20=YES

#一些安全性設定
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem

#啟用本機 User
local_enable=YES
write_enable=YES
local_umask=022
#把 /home/user 轉成根目錄,並禁止一般使用者切換到其他資料夾
chroot_local_user=YES

#本機使用速度限制:0→不設限;n→計量單位為KBytes/sec
local_max_rate=0

Ubuntu 12.04 須修正項目

  • 緣由:
    本版的 vsftpd 是 2.3.5 ,它為解決 glibc 的軟體弱點,所做的安全性修正,會導致啟用 chroot_local_user=YES 參數後,在使用者連線時出現 " 500 OOPS: vsftpd: refusing to run with writable root inside chroot () " 錯誤訊息。
    詳細說明,請見 https://security.appspot.com/vsftpd.html#download 內 2.3.5 版的說明文字。
  • 修改方式:編輯 /etc/vsftpd.conf ,在 chroot_local_user=YES 之下新增一行設定
    local_root=/home
  • 此做法會把 root 資料夾導到 /home ,再由使用者點進入自己的家目錄。筆者認為這不是最佳解,但也無可奈何,只能期待未來 vsftpd 3.0 包入新的 ubuntu 時才可完整解套。



將來有 vsFTPd 3.0 可用時

  • 未來的 ubuntu 若可以包入 vsftpd 3.0 版,同樣 chroot_local_user=YES 問題解決方案如下
    • 編輯 /etc/vsftpd.conf ,在 chroot_local_user=YES 之下新增一行設定
      allow_writeable_chroot=YES
    • 注意:不要再加 12.04 時所加的 local_root=/home 這一行




建立公用資料夾

 如果學校希望使用者在登入 FTP 服務後,只能存取「自己的家目錄」及「共用區」,而看不到別人的資料夾。筆者以 /home/ftp/pub 為公用區為例,其作法如下:

  1. 公用資料夾建在在 /home/ftp/pub 底下
    root@dns:~# mkdir /home/ftp/pub
  2. 檔案權限開成 1777,使共用區內每個人皆可上傳修改自己的東西,但不得互改他人的
    root@dns:~# chmod 1777 /home/ftp/pub
  3. 接著,在每個 user 的家目錄下執行以下兩個動作(以 root 身份),便可以達成「共用區」的建立。
    • 每個 User也須建立 pub 資料夾(若已建立,不必再做)
      root@dns:~# mkdir /home/user/pub
    • 把 /home/ftp/pub 掛載至 /home/user 底下(每次重開機,必須執行一次)
      root@dns:~# mount --bind /home/ftp/pub /home/user/pub
    • 下 mount 指令檢視
      root@dns:~# mount


 做完之後,大家所存進 pub 資料夾的檔案,實際上是放在 /home/ftp/pub,而且由於 1777 的作用,大家不可互相刪改對方的。只是,還有兩個問題尚待解決:

  1. 每個帳號都要執行一次這樣的指令,著實麻煩。
  2. 下次開機要再 key in 一次這樣的指令



一次把掛進所有使用者

 筆者為解決上述的問題,已寫一支 shell script 在此: 檔案:Pubfolder.zip。本方案,會把所輸入的「共用資料夾」建在 /home/ftp 底下。以下是本程式之使用注意事項:

  • 要共用時
    root@dns:~# pubfolder.sh -m 共用資料夾名稱
    若 /home/ftp 底下無此資料夾,會以 1777 權限自動建立
  • 要解除共用時
    root@dns:~# pubfolder.sh -u 共用資料夾名稱
  • 下次開機也能自動掛載時,請在 rc.local 的底下, exit 0 之上,加上
    root@dns:~# vi /etc/rc.local
......

pubfolder.sh -m 共用資料夾名稱

exit 0
  • 使用「root@dns:~# mount」指令來檢視掛載狀態,若有以下字串,代表共用區已掛載
...
/home/ftp/public on /home/tnc01/public type none (rw,bind)
/home/ftp/public on /home/tnc02/public type none (rw,bind)
/home/ftp/public on /home/tnc03/public type none (rw,bind)
...
  • 註1:若 「/home/ftp/共用資料夾」未事先建立,而產生此一錯誤訊息,可以不理會「special device /home/ftp/xxxx does not exist」
  • 註2:預設所建立的共用資料夾權限為 1777 , 若想改為 777 請自行修改原始碼(把唯一有 1777 的地方改掉)
  • 註3:mount 指令的運用,本來就是兩地都要有實體資料夾,意即本工具會在 /home/ftp 底下建一個真正的存放區,也會在各個 User 底下建一個同名「空的」的資料夾,供 mount --bind 用。
  • 註4:延續註3 所提,在使用 pubfolder.sh -u 解除共用區之後,並不會把各家目錄底下的那個「空的」同名資料夾刪除,可能會造成您覺得共用區並沒刪除的假像。



此機制下rSync備份注意事項

 由於我們把 /home/ftp/pub 掛載至 /home/user/pub ,因此,事實上所有資料檔案是在 /home/ftp/pub 底下,但 rsync 程式並不知道這件事,在備份執行時,會把每個人的 pub 皆複製一份,造成 pub 重覆備份的現象。解決方法如下:

  • 修改 /root/bk-b2d.sh,在執行 rsync 指令的前面先缷載再掛載,舉例如下:
#! /bin/sh

/root/pubfolder.sh -u pub

/usr/bin/rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets /var/lib/mysql my_backup@163.26.x.x::mybk
/usr/bin/rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets /var/www yh_backup@163.26.x.x::mybk
...

/root/pubfolder.sh -m pub



本文小檔案

題名: Title::VsFTP 檔案伺服器
作者: Creator::itsmw作者群
主題/關鍵詞: Subject::ftp,vsftp,檔案伺服器
簡述: Description::OB2D 上的檔案伺服器簡介
出版者: Publisher::台南縣教網中心 itsmw 計畫
其他參與者: Contributor::itsmw作者群
日期: Date::2011-2-14
文件類型: Type::08伺服器軟體
資料格式: Format::text/html
文件識別代號: Identifier::http://myip.tw/itsmw/index.php?title=Ob2d_Vsftp
來源: Source::http://myip.tw/itsmw/index.php?title=Ob2d_Vsftp
語言: Language::zh-TW
相關資源: Relation::http://wiki.ubuntu.org.cn/Vsftpd
文件涵蓋範圍: Coverage::Linux平台
版權規範: Rights::GNU Free Documentation License 1.2