Latest News

Home » Linux新手知識 » FTP檔案傳輸服務(Linux主機伺服器架設技術)

FTP檔案傳輸服務(Linux主機伺服器架設技術)

FTP檔案傳輸服務(Linux主機伺服器架設技術)

Linux sqz 上的檔案傳輸服務預設是使用 vsftp 套件,裝妥時的預設狀態如下:

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監聽,若要改成 IPv6 監聽,一定要修改/etc/rc.local內的 ip6tables 以及給予 fix 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
chroot_local_user=YES
write_enable=YES
local_umask=022

建立公用資料夾

如果學校希望使用者在登入 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-Linux.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

About

發佈留言