通過 yum 線上安裝了一個 vsftp 後,發現不太會用,就按照網上的教程東搞西搞。最後發現無法上傳檔案了,就給我操作了一把。
用 SecureCRT 遠端登入後,我做了如下檢查:
①、打開了 vsftp 配置檔案(/etc/vsftpd/vsftpd.conf)檢查 write_enable 狀态,發現正常:
Shell
1 2 3 4 | [ root @ VM_72_108_centos / ] # cat /etc/vsftpd/vsftpd.conf | grep write_enable write_enable = YES #anon_mkdir_write_enable=YES [ root @ VM_72_108_centos / ] # |
②、檢視 ftp 使用者是否具備目錄的讀寫權限,發現也是可行的 775 狀态(www 組)。
Shell
1 2 3 4 | [ root @ VM_72_108_centos wwwroot ] # ll total 8 drwxrwxr - x 3 www www 4096 Jun 12 12 : 34 default drwxrwxr - x 9 www www 4096 Jun 12 14 : 54 weixin .weightwl .com |
③、在指令提示符 CMD 中使用 ftp,可擷取到一些 explore 看不到的報錯資訊,便于資料搜尋:

于是在百度搜尋了下如下報錯資訊:
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.
最終,在一個 linux 論壇才找到了如下解決辦法:
作者說這個問題在 Centos 上才會出現,Redhat 就沒有,難怪我在公司都沒見過這問題。
解決辦法:
①、檢視 ftp 的 Selinux 狀态:sestatus -b | grep ftp
②、在結果中可以看到: ftp_home_dir off
③、将狀态改為 on:setsebool -P ftp_home_dir on
④、重新開機 vsftp 服務:service vsftpd restart
有點納悶的是,他的伺服器根本就沒開 selinux,是以第②步根本沒結果,理論上,這個解決辦法應該沒效果才對,可實際上,全部執行完成之後,發現可以上傳檔案和建立檔案夾了。我去,還真是詭異,總之解決了問題就好。
張戈額外補充一條 VPS 常用的新增 FTP 帳号的指令行,友善定義不同的 ftp 帳号:
Shell
1 2 3 4 5 6 7 | useradd - g www - d / home / www / zhangge .net - s / sbin / nologin username # -g 表示所屬使用者組,請根據實際選擇 # -d 表示登入後的工作目錄,請指定所要指向的網站根目錄即可。 # -s /sbin/nologin 表示設定此賬号僅用于ftp,不允許登入到系統。 #username 新增的使用者名,請自定義。 passwd username #如上使用passwd 設定ftp使用者的密碼。 |
下面附上 vsftp.conf 的詳細的配置參數說明:
Shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | 1.預設配置: 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。 ftpftp_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。 |