天天看點

vsftp需求

真的真的好久沒寫部落格啦~~!還好最近一個視訊直播的項目上線了。惡心的調試,這個vsftp需求更惡心了我!

下面是産品的需求:

1、總部人員需要通過ftp上傳課件到伺服器上。權限隻能是建立目錄、上傳檔案、禁止下載下傳檔案、删除檔案、重命名檔案。分中心則通過ftp下載下傳課件。權限隻能是下載下傳,禁止建立目錄、上傳檔案、删除檔案、重命名檔案。

2、總部人員需要通過ftp将資料上傳到伺服器上。權限隻能是建立目錄、上傳檔案、下載下傳檔案、支援斷點續傳功能、删除檔案、重命名檔案。分中心則通過http下載下傳課件,權限隻能是下載下傳。

3、分中心人員需要通過ftp将視訊上傳到伺服器上。權限隻能是建立目錄、上傳檔案、禁止下載下傳檔案、删除檔案、重命名檔案。總部則通過ftp下載下傳課件。權限隻能是下載下傳,禁止建立目錄、上傳檔案、删除檔案、重命名檔案。

看到這三個需求我一片茫然,因為ftp了解不是很深,剛剛開始我準備依靠檔案屬性來控制,但是因為權限設定的太細,是以不得不要使用虛拟使用者來配置。這裡感謝一位QQ好友,他至少提供了一個關于vsftpd虛拟使用者配置的連結,真的很感謝!綜上所述,我決定3個需要需要使用5個虛拟使用者。一個nginx下載下傳使用者。

環境:CentOS6.3(64位)

1、首先安裝vaftpd需要的元件,pam、db4、vsftpd。

yum install -y pam* db4 vsftpd

2、建立虛拟使用者。(使用者和密碼,一行一個)

vi /etc/vsftpd/account.txt

abc              =====>建立目錄、上傳檔案、禁止下載下傳、删除、重命名檔案。

密碼

bcd              =====>隻能下載下傳

cde              =====>建立目錄、上傳檔案、斷點續傳、删除檔案、下載下傳檔案、重命名檔案。

def               =====>建立目錄、上傳檔案、禁止下載下傳、删除、重命名檔案。

efg               =====>隻能下載下傳

3、生成虛拟使用者密碼密碼檔案

db_load -T -t hash -f /etc/vsftpd/account.txt /etc/vsftpd/account.db

為了安全生成完後可以把明文的賬戶檔案account.txt删除。不過還是要自己記清楚哈!

4、編輯vsftpd的pam認證,32位系統的就别寫/lib64了。

vi /etc/pam.d/vsftpd.vu

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/account

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/account

5、建立本地映射使用者,不知道的參數上網自己查。

useradd -d /home/ftp virtual_user -s /sbin/nologin

6、下面是vsftpd.conf主配置檔案

# Example config file /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

local_enable=YES

write_enable=YES

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

pam_service_name=vsftpd.vu

tcp_wrappers=YES

guest_enable=YES

user_config_dir=/etc/vsftpd/account

guest_username=virtual_user

7、下面是每個虛拟使用者的權限,記得下面的虛拟使用者的檔案名必須和上述account.txt裡面的檔案名一樣。

vi /etc/vsftpd/account/abc

write_enable=YES                             ====>允許在檔案系統寫入權限

anon_upload_enable=YES                   ====>允許上傳檔案

anon_mkdir_write_enable=YES            ====>允許建立檔案夾

anon_world_readable_only=NO            ====>允許匿名使用者浏覽器整個伺服器的檔案系統

download_enable=NO                         ====>不允許下載下傳檔案

anon_umask=022                               ====>這個就不多說了,記得虛拟使用者寫anon_umask,本地賬戶寫local_umask。我就為這個問題惡心過!

local_root=/home/ftp/courseware         ====>abc使用者登入後的目錄,不指定就登入到家目錄了。

vi /etc/vsftpd/account/bcd

anon_world_readable_only=NO             ====>bcd使用者隻允許下載下傳

local_root=/home/ftp/courseware         ====>bcd使用者登入後的目錄

建立這個指定後的目錄

mkdir /home/ftp/courseware

chown virtual_user.virtual_user /home/ftp/courseware

vi /etc/vsftpd/account/cde

write_enable=YES                              ====>cde使用者允許寫入

anon_world_readable_only=NO            ====>cde使用者允許下載下傳

anon_upload_enable=YES                   ====>cde使用者允許上傳

anon_mkdir_write_enable=YES            ====>開放建立目錄的權限 

anon_other_write_enable=YES            ====>支援斷點續傳功能

anon_umask=022

local_root=/data

mkdir /data

chown virtual_user.virtual_user /data

nginx配置檔案比較簡單了,這裡我就随便寫一點

  location / {

  autoindex on;

  autoindex_exact_size off;

  autoindex_localtime on;

  root /data;

  }

vi /etc/vsftpd/account/def

anon_umask=022                               ====>這個就不多說了,記得虛拟使用者寫anon_umask,本地賬戶寫local_umask。

local_root=/home/ftp/video         ====>abc使用者登入後的目錄,不指定就登入到家目錄了。

vi /etc/vsftpd/account/efg

anon_world_readable_only=NO             ====>efg使用者隻允許下載下傳

local_root=/home/ftp/video                  ====>efg使用者登入後的目錄

mkdir /home/ftp/video

chown virtual_user.virtual_user /home/ftp/video

8、增加ip_nat_ftp子產品

在/etc/sysconfig/iptables-config檔案最後面加入這兩行

IPTABLES_MODULES="ip_nat_ftp"

IPTABLES_MODULES="ip_conntrack_ftp"

在/etc/sysconfig/iptables檔案最後面加入這兩行

-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

重新開機iptables服務

/etc/init.d/iptables restart

modprobe ip_nat_ftp    (記得以後寫個腳本,開機自動運作加載這個子產品,不然用ftp工具連接配接會報套接字什麼錯誤)

10、下面可以盡情的測試了!有問題歡迎留言!

我遇到的三個問題:

1、作業系統字元集為zh_CN.UTF-8,用ftp工具上傳帶有中文名的檔案,或者建立中文名的檔案夾,在linux上檢視顯示為亂碼。

解決辦法:

修改系統字元集為LANG=zh_CN.GB18030,重新開機。然後重新上傳即可!看到的正常。但是第二個需求通過浏覽器去下載下傳課件看到的是亂碼,修改nginx住配置檔案的字元集為GB2132,重新開機nginx即可看到網頁的編碼自動會選擇GB2132!

2、ftp上傳的檔案權限為600,nginx下載下傳報403無權通路,還好後來找到一篇文章看到是寫anon_umask解決!

3、需要增加上傳檔案的斷點續傳功能,這個是anon_other_write_enable=YES參數控制的,也就是說如果這個參數打開,那麼就支援斷點續傳,但是這樣就多了可以删除和重命名權限,是以這裡隻能取一個,我就沒用斷點續傳功能。

繼續閱讀