真的真的好久沒寫部落格啦~~!還好最近一個視訊直播的項目上線了。惡心的調試,這個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參數控制的,也就是說如果這個參數打開,那麼就支援斷點續傳,但是這樣就多了可以删除和重命名權限,是以這裡隻能取一個,我就沒用斷點續傳功能。