簡單來說 vsftpd 就是一個軟件,經過安裝和配置,就能實現把一個普通服務器看成文件服務器,而後咱們能夠經過 ftp 協議去訪問文件服務器,而且能夠實現安全傳輸。下面是 百度百科 的說法:html
vsftpd 是「very secure FTP daemon」的縮寫,安全性是它的一個最大的特色。vsftpd 是一個 UNIX 類操做系統上運行的服務器的名字,它能夠運行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個徹底免費的、開放源代碼的ftp服務器軟件,支持不少其餘的 FTP 服務器所不支持的特徵。好比:很是高的安全性需求、帶寬限制、良好的可伸縮性、可建立虛擬用戶、支持IPv六、速率高等。安全
要想真正把 vsftpd 用起來,好比控制用戶的訪問權限等等,仍是須要詳細瞭解下 vsftpd 的工做機制的, 下面的介紹能夠簡單瞭解下,有個印象,用的時候能夠再回過頭來看。服務器
控制鏈接session
TCP 21 (命令信道)app
用戶收發 FTP 命令tcp
數據鏈接ide
TCP 20 (數據信道)操作系統
用於上傳和下載數據開放源代碼
主動模式調試
FTP 客戶端首先和服務器的 TCP 21 端口創建鏈接,用來發送命令,客戶端須要接收數據的時候在這個通道上發送 PORT 命令。 PORT 命令包含了客戶端用什麼端口接收數據。在傳輸數據的時候,服務器經過本身的 TCP 20端口鏈接至客戶端的指定端口發送數據。FTP server 必須和客戶端創建一個新的鏈接用來傳送數據。
被動模式
FTP 客戶端首先和服務器的 TCP 21 端口創建鏈接,用來創建控制通道發送命令,但創建鏈接後客戶端發送 Pasv 命令。服務器收到 Pasv 命令後,打開一個臨時端口(端口大於 1023 小於 65535)而且通知客戶端在這個端口上傳數據的請求,客戶端鏈接 FTP 服務器的臨時端口,而後 FTP 服務器將經過這個端口傳輸數據。
Binary 模式
不對數據進行任何處理,適合進行可執行文件,壓縮文件,圖片等
ASCII 模式
進行文本傳輸時,自動適應目標操做系統的結束符,如回車符等
匿名用戶驗證
用戶帳號:ftp 或 anonymous
用戶密碼:無密碼
工做目錄:/var/ftp
默認權限: 可下載,不可上傳(可是能夠配置修改)
本地用戶驗證
用戶帳號:本地用戶(/etc/passwd包含的)
用戶密碼:(/etc/shadow)
工做目錄:登陸用戶的宿主目錄
默認權限:d rwx --- ---
虛擬用戶驗證
自身感受用的很少,須要的請自行搜索。
操做系統: CentOS 7
軟件安裝包: vsftpd-3.0.2-25.el7.src.rpm (這個版本會有一個坑,稍後會說到)
安裝
yum -y install vsftpd
啓動
systemctl start vsftpd
上面講了 vsftpd 的工做模式,傳輸方式以及登陸驗證方式等等,這些都是經過 vsftpd 的 配置文件配置項來實現的。
經過 yum 方式安裝,配置文件是存放在: /etc/vsftpd/vsftpd.conf 路徑下的
建立一個用戶(用戶名: ftpuser)
useradd ftpuser
如下須要修改配置文件 /etc/vsftpd/vsftpd.conf
不容許全部用戶隨意切換目錄
chroot_local_user=YES # 將用戶禁錮在主目錄
容許部分用戶能夠隨意切換目錄
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
配置文件 :/etc/vsftpd/ftpusers 的做用
全部寫入該文件內的用戶名都不容許登陸 ftp
3.0.2 版本的 vsftpd ,當你配置了, chroot_local_user=YES 時,用戶是沒法登錄成功的!
解決辦法
在配置文件中添加以下配置
allow_writeable_chroot=YES
https://www.cnblogs.com/acpp/archive/2010/02/08/1666054.html
1>容許匿名用戶和本地用戶登錄。 anonymous_enable=YES local_enable=YES 2>匿名用戶使用的登錄名爲ftp或anonymous,口令爲空;匿名用戶不能離開匿名 用戶家目錄/var/ftp,且只能下載不能上傳。 3>本地用戶的登陸名爲本地用戶名,口令爲此本地用戶的口令;本地用戶能夠在本身家目錄中進行讀寫操做;本地用戶能夠離開自家目錄切換至有權限訪問的其餘目錄,並在權限容許的狀況下進行上傳/下載。 write_enable=YES 4>寫在文件/etc/vsftpd.ftpusers中的本地用戶禁止登錄。 2.配置文件格式: vsftpd.conf 的內容很是單純,每一行即爲一項設定。如果空白行或是開頭爲#的一行,將會被忽略。內容的格式只有一種,以下所示 option=value 要注意的是,等號兩邊不能加空白。 3.匿名用戶(anonymous)設置 anonymous_enable=YES/NO(YES) 控制是否容許匿名用戶登入,YES 爲容許匿名登入,NO 爲不容許。默認值爲YES。 write_enable=YES/NO(YES) 是否容許登錄用戶有寫權限。屬於全局設置,默認值爲YES。 no_anon_password=YES/NO(NO) 如果啓動這項功能,則使用匿名登入時,不會詢問密碼。默認值爲NO。 ftp_username=ftp 定義匿名登入的使用者名稱。默認值爲ftp。 anon_root=/var/ftp 使用匿名登入時,所登入的目錄。默認值爲/var/ftp。注意ftp目錄不能是777的權限屬性,即匿名用戶的家目錄不能有777的權限。 anon_upload_enable=YES/NO(NO) 若是設爲YES,則容許匿名登入者有上傳文件(非目錄)的權限,只有在write_enable=YES時,此項纔有效。固然,匿名用戶必需要有對上層目錄的寫入權。默認值爲NO。 anon_world_readable_only=YES/NO(YES) 若是設爲YES,則容許匿名登入者下載可閱讀的檔案(能夠下載到本機閱讀,不能直接在FTP服務器中打開閱讀)。默認值爲YES。 anon_mkdir_write_enable=YES/NO(NO) 若是設爲YES,則容許匿名登入者有新增目錄的權限,只有在write_enable=YES時,此項纔有效。固然,匿名用戶必需要有對上層目錄的寫入權。默認值爲NO。 anon_other_write_enable=YES/NO(NO) 如 果設爲YES,則容許匿名登入者更多於上傳或者創建目錄以外的權限,譬如刪除或者重命名。(若是anon_upload_enable=NO,則匿名用戶 不能上傳文件,但能夠刪除或者重命名已經存在的文件;若是anon_mkdir_write_enable=NO,則匿名用戶不能上傳或者新建文件夾,但 能夠刪除或者重命名已經存在的文件夾。)默認值爲NO。 chown_uploads=YES/NO(NO) 設置是否改變匿名用戶上傳文件(非目錄)的屬主。默認值爲NO。 chown_username=username 設置匿名用戶上傳文件(非目錄)的屬主名。建議不要設置爲root。 anon_umask=077 設置匿名登入者新增或上傳檔案時的umask 值。默認值爲077,則新建檔案的對應權限爲700。 deny_email_enable=YES/NO(NO) 如果啓動這項功能,則必須提供一個檔案/etc/vsftpd/banner_emails,內容爲email address。如果使用匿名登入,則會要求輸入email address,若輸入的email address 在此檔案內,則不容許進入。默認值爲NO。 banned_email_file=/etc/vsftpd/banner_emails 此文件用來輸入email address,只有在deny_email_enable=YES時,纔會使用到此檔案。如果使用匿名登入,則會要求輸入email address,若輸入的email address 在此檔案內,則不容許進入。 4.本地用戶設置 local_enable=YES/NO(YES) 控制是否容許本地用戶登入,YES 爲容許本地用戶登入,NO爲不容許。默認值爲YES。 local_root=/home/username 當本地用戶登入時,將被更換到定義的目錄下。默認值爲各用戶的家目錄。 write_enable=YES/NO(YES) 是否容許登錄用戶有寫權限。屬於全局設置,默認值爲YES。 local_umask=022 本地用戶新增檔案時的umask 值。默認值爲077。 file_open_mode=0755 本地用戶上傳檔案後的檔案權限,與chmod 所使用的數值相同。默認值爲0666。 5.歡迎語設置 dirmessage_enable=YES/NO(YES) 若是啓動這個選項,那麼使用者第一次進入一個目錄時,會檢查該目錄下是否有.message這個檔案,若是有,則會出現此檔案的內容,一般這個檔案會放置歡迎話語,或是對該目錄的說明。默認值爲開啓。 message_file=.message 設置目錄消息文件,可將要顯示的信息寫入該文件。默認值爲.message。 banner_file=/etc/vsftpd/banner 當使用者登入時,會顯示此設定所在的檔案內容,一般爲歡迎話語或是說明。默認值爲無。若是歡迎信息較多,則使用該配置項。 ftpd_banner=Welcome to BOB's FTP server 這裏用來定義歡迎話語的字符串,banner_file是檔案的形式,而ftpd_banner 則是字符串的形式。預設爲無。 6.控制用戶是否容許切換到上級目錄 在默認配置下,本地用戶登入FTP後可使用cd命令切換到其餘目錄,這樣會對系統帶來安全隱患。能夠經過如下三條配置文件來控制用戶切換目錄。 chroot_list_enable=YES/NO(NO) 設置是否啓用chroot_list_file配置項指定的用戶列表文件。默認值爲NO。 chroot_list_file=/etc/vsftpd.chroot_list 用於指定用戶列表文件,該文件用於控制哪些用戶能夠切換到用戶家目錄的上級目錄。 chroot_local_user=YES/NO(NO) 用於指定用戶列表文件中的用戶是否容許切換到上級目錄。默認值爲NO。 經過搭配能實現如下幾種效果: ①當chroot_list_enable=YES,chroot_local_user=YES時,在/etc/vsftpd.chroot_list文件中列出的用戶,能夠切換到其餘目錄;未在文件中列出的用戶,不能切換到其餘目錄。 ②當chroot_list_enable=YES,chroot_local_user=NO時,在/etc/vsftpd.chroot_list文件中列出的用戶,不能切換到其餘目錄;未在文件中列出的用戶,能夠切換到其餘目錄。 ③當chroot_list_enable=NO,chroot_local_user=YES時,全部的用戶均不能切換到其餘目錄。 ④當chroot_list_enable=NO,chroot_local_user=NO時,全部的用戶都可以切換到其餘目錄。 7.數據傳輸模式設置 FTP在傳輸數據時,可使用二進制方式,也可使用ASCII模式來上傳或下載數據。 ascii_upload_enable=YES/NO(NO) 設置是否啓用ASCII 模式上傳數據。默認值爲NO。 ascii_download_enable=YES/NO(NO) 設置是否啓用ASCII 模式下載數據。默認值爲NO。 8.訪問控制設置 兩種控制方式:一種控制主機訪問,另外一種控制用戶訪問。 ①控制主機訪問: tcp_wrappers=YES/NO(YES) 設 置vsftpd是否與tcp wrapper相結合來進行主機的訪問控制。默認值爲YES。若是啓用,則vsftpd服務器會檢查/etc/hosts.allow 和/etc/hosts.deny 中的設置,來決定請求鏈接的主機,是否容許訪問該FTP服務器。這兩個文件能夠起到簡易的防火牆功能。 好比:若要僅容許192.168.0.1—192.168.0.254的用戶能夠鏈接FTP服務器,則在/etc/hosts.allow文件中添加如下內容: vsftpd:192.168.0. :allow all:all :deny ②控制用戶訪問: 對於用戶的訪問控制能夠經過/etc目錄下的vsftpd.user_list和ftpusers文件來實現。 userlist_file=/etc/vsftpd.user_list 控制用戶訪問FTP的文件,裏面寫着用戶名稱。一個用戶名稱一行。 userlist_enable=YES/NO(NO) 是否啓用vsftpd.user_list文件。 userlist_deny=YES/NO(YES) 決定vsftpd.user_list文件中的用戶是否可以訪問FTP服務器。若設置爲YES,則vsftpd.user_list文件中的用戶不容許訪問FTP,若設置爲NO,則只有vsftpd.user_list文件中的用戶才能訪問FTP。 /etc /vsftpd/ftpusers文件專門用於定義不容許訪問FTP服務器的用戶列表(注意:若是 userlist_enable=YES,userlist_deny=NO,此時若是在vsftpd.user_list和ftpusers中都有某個 用戶時,那麼這個用戶是不可以訪問FTP的,即ftpusers的優先級要高)。默認狀況下vsftpd.user_list和ftpusers,這兩個 文件已經預設置了一些不容許訪問FTP服務器的系統內部帳戶。若是系統沒有這兩個文件,那麼新建這兩個文件,將用戶添加進去便可。 9.訪問速率設置 anon_max_rate=0 設置匿名登入者使用的最大傳輸速度,單位爲B/s,0 表示不限制速度。默認值爲0。 local_max_rate=0 本地用戶使用的最大傳輸速度,單位爲B/s,0 表示不限制速度。預設值爲0。 10.超時時間設置 accept_timeout=60 設置創建FTP鏈接的超時時間,單位爲秒。默認值爲60。 connect_timeout=60 PORT 方式下創建數據鏈接的超時時間,單位爲秒。默認值爲60。 data_connection_timeout=120 設置創建FTP數據鏈接的超時時間,單位爲秒。默認值爲120。 idle_session_timeout=300 設置多長時間不對FTP服務器進行任何操做,則斷開該FTP鏈接,單位爲秒。默認值爲300 。 11.日誌文件設置 xferlog_enable= YES/NO(YES) 是否啓用上傳/下載日誌記錄。若是啓用,則上傳與下載的信息將被完整紀錄在xferlog_file 所定義的檔案中。預設爲開啓。 xferlog_file=/var/log/vsftpd.log 設置日誌文件名和路徑,默認值爲/var/log/vsftpd.log。 xferlog_std_format=YES/NO(NO) 若是啓用,則日誌文件將會寫成xferlog的標準格式,如同wu-ftpd 通常。默認值爲關閉。 log_ftp_protocol=YES|NO(NO) 若是啓用此選項,全部的FTP請求和響應都會被記錄到日誌中,默認日誌文件在/var/log/vsftpd.log。啓用此選項時,xferlog_std_format不能被激活。這個選項有助於調試。默認值爲NO。 12.定義用戶配置文件 在vsftpd中,能夠經過定義用戶配置文件來實現不一樣的用戶使用不一樣的配置。 user_config_dir=/etc/vsftpd/userconf 設置用戶配置文件所在的目錄。當設置了該配置項後,用戶登錄服務器後,系統就會到/etc/vsftpd/userconf目錄下,讀取與當前用戶名相同的文件,並根據文件中的配置命令,對當前用戶進行更進一步的配置。 例 如:定義user_config_dir=/etc/vsftpd/userconf,且主機上有使用者 test1,test2,那麼咱們就在user_config_dir 的目錄新增文件名爲test1和test2兩個文件。如果test1 登入,則會讀取user_config_dir 下的test1 這個檔案內的設定。默認值爲無。利用用戶配置文件,能夠實現對不一樣用戶進行訪問速度的控制,在各用戶配置文件中定義local_max_rate=XX, 便可。 13.FTP的工做方式與端口設置 FTP有兩種工做方式:PORT FTP(主動模式)和PASV FTP(被動模式) listen_port=21 設置FTP服務器創建鏈接所監聽的端口,默認值爲21。 connect_from_port_20=YES/NO 指定FTP使用20端口進行數據傳輸,默認值爲YES。 ftp_data_port=20 設置在PORT方式下,FTP數據鏈接使用的端口,默認值爲20。 pasv_enable=YES/NO(YES) 若設置爲YES,則使用PASV工做模式;若設置爲NO,則使用PORT模式。默認值爲YES,即便用PASV工做模式。 pasv_max_port=0 在PASV工做模式下,數據鏈接可使用的端口範圍的最大端口,0 表示任意端口。默認值爲0。 pasv_min_port=0 在PASV工做模式下,數據鏈接可使用的端口範圍的最小端口,0 表示任意端口。默認值爲0。 14.與鏈接相關的設置 listen=YES/NO(YES) 設 置vsftpd服務器是否以standalone模式運行。以standalone模式運行是一種較好的方式,此時listen必須設置爲YES,此爲默 認值。建議不要更改,有不少與服務器運行相關的配置命令,須要在此模式下才有效。若設置爲NO,則vsftpd不是以獨立的服務運行,要受到xinetd 服務的管控,功能上會受到限制。 max_clients=0 設置vsftpd容許的最大鏈接數,默認值爲0,表示不受限制。若設置爲100時,則同時容許有100個鏈接,超出的將被拒絕。只有在standalone模式運行纔有效。 max_per_ip=0 設置每一個IP容許與FTP服務器同時創建鏈接的數目。默認值爲0,表示不受限制。只有在standalone模式運行纔有效。 listen_address=IP地址 設置FTP服務器在指定的IP地址上偵聽用戶的FTP請求。若不設置,則對服務器綁定的全部IP地址進行偵聽。只有在standalone模式運行纔有效。 setproctitle_enable=YES/NO(NO) 設置每一個與FTP服務器的鏈接,是否以不一樣的進程表現出來。默認值爲NO,此時使用ps aux |grep ftp只會有一個vsftpd的進程。若設置爲YES,則每一個鏈接都會有一個vsftpd的進程。 15.虛擬用戶設置 虛擬用戶使用PAM認證方式。 pam_service_name=vsftpd 設置PAM使用的名稱,默認值爲/etc/pam.d/vsftpd。 guest_enable= YES/NO(NO) 啓用虛擬用戶。默認值爲NO。 guest_username=ftp 這裏用來映射虛擬用戶。默認值爲ftp。 virtual_use_local_privs=YES/NO(NO) 當該參數激活(YES)時,虛擬用戶使用與本地用戶相同的權限。當此參數關閉(NO)時,虛擬用戶使用與匿名用戶相同的權限。默認狀況下此參數是關閉的(NO)。 16.其餘設置 text_userdb_names= YES/NO(NO) 設置在執行ls –la之類的命令時,是顯示UID、GID仍是顯示出具體的用戶名和組名。默認值爲NO,即以UID和GID方式顯示。若但願顯示用戶名和組名,則設置爲YES。 ls_recurse_enable=YES/NO(NO) 如果啓用此功能,則容許登入者使用ls –R(能夠查看當前目錄下子目錄中的文件)這個指令。默認值爲NO。 hide_ids=YES/NO(NO) 若是啓用此功能,全部檔案的擁有者與羣組都爲ftp,也就是使用者登入使用ls -al之類的指令,所看到的檔案擁有者跟羣組均爲ftp。默認值爲關閉。 download_enable=YES/NO(YES) 若是設置爲NO,全部的文件都不能下載到本地,文件夾不受影響。默認值爲YES。