目錄
一、安裝並啓動ftp服務端程序vsftpd
sudo apt-get install vsftpd
安裝過程中會自動創建一個叫做ftp的用戶組。
安裝成功之後輸入以下指令重啓ftp服務,理論上到此爲止客戶端就可以訪問ftp服務了:
sudo /etc/init.d/vsftpd restart
二、客戶端測試連接ftp
在Windows隨便打開一個文件窗口,或者打開瀏覽器,地址欄輸入ftp://你的服務器IP地址,比如我的服務器應該輸入ftp://192.168.0.187,會提示輸入用戶名和密碼,這時即使不輸入用戶名和密碼也可以訪問服務器文件(當然輸入Ubuntu服務器上的用戶名和密碼也可訪問服務器文件);
三、增加安全性配置
以上的訪問方式太過簡單,我們把這種訪問方式稱爲“匿名用戶訪問方式”,爲了讓ftp文件訪問不這麼隨便,我們嘗試採取兩步防護措施(這種方式其實後來證明沒卵用,最後再說):
1、專門新建一個Ubuntu用戶專門用於客戶端ftp訪問
將來客戶端通過輸入這個用戶的用戶名和密碼訪問服務器文件,當然這一步並不是必需的,你想用現有的用戶也行,新建的用戶最好位於ftp用戶組下,假如我新建的用戶名叫做ftpuser(你可以起其它名字,不一樣也行):
sudo mkdir /home/ftpuser #ftpuser是我自己起的用戶名,你可以換成你喜歡的名字
sudo adduser -d /home/ftpuser -g ftp -s /bin/bash ftpuser
這樣就新建了一個叫做ftpuser的用戶,並且指定這個用戶的用戶組爲ftp,當然你不想指定用戶組也行,去掉-g ftp就行了。
2、爲新建的用戶設置密碼
sudo passwd ftpuser # ftpuser是我起的用戶名,你要換成你的,跟上邊創建用戶時一致
輸入以上命令後就會提示你設置密碼。
3、設置ftp目錄用戶權限(可選)
sudo chown ftpuser:ftp /home/ftpuser
其中ftpuser是用戶名,冒號後邊的ftp是用戶組,空格後邊的/home/ftpuser是用戶的home目錄
4、配置vsftpd.conf文件限制匿名用戶訪問
先備份原文件
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
然後新建一個配置文件
sudo vi /etc/vsftpd.conf
粘貼以下內容:
listen=NO
listen_ipv6=YES
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO # 訪問限制:不允許以匿名方式訪問ftp服務
# Uncomment this to allow local users to log in.
local_enable=YES #允許使用本地用戶名和密碼登錄ftp服務器
# Uncomment this to enable any form of FTP write command.
write_enable=YES
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# If enabled, vsftpd will display directory listings with the time
# in your local time zone. The default is to display GMT. The
# times returned by the MDTM FTP command are also affected by this
# option.
use_localtime=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES
# You may fully customise the login banner string:
ftpd_banner=Welcome to FTP service.
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES # 允許讓本地用戶成爲訪問限制的例外
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list # 在/etc/vsftpd.chroot_list文件中指定可以用來訪問ftp的用戶名
local_root=/my_share_dir # 客戶端登錄後看到的第一個文件夾,你應該改成你希望用戶看到的目錄
force_dot_files=YES # 設置客戶端能不能看到以點開頭的隱藏文件,YES表示客戶端將來可以看到以點開頭命名的目錄,默認爲NO
# This option should be the name of a directory which is empty. Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd/empty
#
# This string is the name of the PAM service vsftpd will use.
# pam_service_name=vsftpd
pam_service_name=ftp
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
#
# Uncomment this to indicate that vsftpd use a utf8 filesystem.
utf8_filesystem=YES # 是否以utf-8編碼形式向客戶端提供文件,建議設爲YES,否則將來客戶端看到的以中文命名的目錄會變成亂碼
其中重要的內容我已經在註釋中說明了,這裏補充幾點:
- “匿名訪問”指的是將來客戶端不需要輸入用戶名和密碼就可以訪問ftp服務器;
- “本地用戶訪問”方式指的是將來客戶端需要輸入用戶名和密碼訪問ftp服務器,我們前邊新建ftpuser這個用戶就是爲了實現本地訪問,ftpuser就叫做“本地用戶”;
- chroot_local_user=YES 、chroot_list_enable=YES、chroot_list_file=/etc/vsftpd.chroot_list這三句是配套一起使用的,其中chroot_list_file所定義的這個文件中指明瞭將來客戶端能輸入哪個本地用戶的用戶名來訪問ftp,後邊的/etc/vsftpd.chroot_list是我自己選擇的路徑和文件名,你也可以不用這個目錄和文件名,換成你自己定義的文件名和路徑也行;
- local_root選項是設置將來客戶端登錄ftp服務器之後能看到的第一個目錄,你換成你喜歡的目錄即可;
- pam_service_name原來的默認值是vsftpd,因爲我們使用的是Ubuntu系統,所以要改成ftp,具體什麼原因網上沒人知道,咱也不敢問
- force_dot_files=YES允許客戶端訪問ftp服務器上的隱藏文件,即以.開頭的文件,默認是NO,如果不加這項將來客戶端訪問ftp服務器時看不到隱藏文件
5、新建/etc/vsftpd.chroot_list文件
這個文件具體叫什麼名字,在哪個路徑下,取決於你上面/etc/vsftpd.conf中配置的路徑,並不是固定的。
這個文件中只寫用戶名即可,啥都不用寫,例如我們上面新建的Ubuntu用戶名叫做ftpuser,只需要寫一個ftpuser即可,然後保存退出,再啥都不用寫,例如我的文件全部內容是:
ftpuser
以上內容要保證用戶名拼寫正確,別寫錯,我就因爲把ftpuser錯寫成fptuser導致調試了兩個小時沒試出來,太坑了。
四、正式開始用客戶端訪問
1、在Windows中訪問ftp
在Windows中訪問ftp看似簡單,實則有坑,最簡單的方式的是在瀏覽器或任意一個文件夾中輸入ftp://你的服務器IP地址 就可以訪問,例如ftp://192.168.0.187,用戶名和密碼輸我們上面新建的用戶名和密碼。但是這種方式訪問ftp有些文件無法傳輸,會報錯,比如我傳普通的txt和mp4文件都沒問題,但是傳mkv文件就不行了,所以就要用到第三方軟件來訪問。
我用的第三方軟件是FileZilla,網上有免費下載的,還有中文版,打開軟件之後點“文件->站點管理器”,在打開的窗口中點“New site”,按提示輸入服務器IP地址,要以ftp://開頭,ftp://這個前綴不能省,用戶名和密碼輸我們上面新建的用戶名和密碼,端口號可以不填,在“字符集”選項卡中選“強制UTF-8”,否則中文目錄名會顯示亂碼,點“連接”即可;
2、在安卓手機中訪問ftp服務器
下載ES文件瀏覽器,選“我的網絡”,點右上角三個點,選“新建->ftp”,服務器一欄填入ftp服務器地址,不需要加ftp://前綴,端口號默認21不用改,模式“被動”也不用改,用戶名和密碼輸入我們上邊新建的用戶名和密碼,例如我的用戶叫做ftpuser,編碼選“Unicode(UTF-8)”,點確定即可。
此時我們可以看到,通過安卓手機上的ES文件瀏覽器可以看到ftp服務器上所有用戶的所有目錄,這尼瑪上邊設置的安全性限制都白設了呀。
參考文獻
Ubuntu Server 16.04.1 LTS 64位使用vsftpd搭建ftp服務器
Linux(Ubuntu 16.04)搭建ftp服務器(最簡單版)