1. 程式人生 > >Debian9.5 系統配置FTP

Debian9.5 系統配置FTP

FTP 是File Transfer Protocol(檔案傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制檔案的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的作業系統有不同的FTP應用程式,而所有這些應用程式都遵守同一種協議以傳輸檔案。在FTP的使用當中,使用者經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"檔案就是從遠端主機拷貝檔案至自己的計算機上;"上傳"檔案就是將檔案從自己的計算機中拷貝至遠端主機上。 一、工作方式 FTP支援兩種模式,一種方式叫做Standard (也就是 PORT方式,主動方式),一種是 Passive(也就是PASV,被動方式)。 Standard模式 FTP的客戶端傳送 PORT 命令到FTP伺服器。Passive模式FTP的客戶端傳送 PASV命令到 FTP Server。預設情況下FTP協議使用TCP埠中的 20和21這兩個埠,其中20用於傳輸資料,21用於傳輸控制資訊。但是,是否使用20作為傳輸資料的埠與FTP使用的傳輸模式有關,如果採用主動模式,那麼資料傳輸埠就是20;如果採用被動模式,則具體最終使用哪個埠要伺服器端和客戶端協商決定。 下面介紹一個這兩種方式的工作原理: Port FTP 客戶端首先和FTP伺服器的TCP 21埠建立連線,通過這個通道傳送命令,客戶端需要接收資料的時候在這個通道上傳送PORT命令。 PORT命令包含了客戶端用什麼埠接收資料。在傳送資料的時候,伺服器端通過自己的TCP 20埠連線至客戶端的指定埠傳送資料。 FTP server必須和客戶端建立一個新的連線用來傳送資料。 Passive 在建立控制通道的時候和Standard模式類似,但建立連線後傳送的不是Port命令,而是Pasv命令。FTP伺服器收到Pasv命令後,隨機開啟一個高階埠(埠號大於1024)並且通知客戶端在這個埠上傳送資料的請求,客戶端連線FTP伺服器此埠,然後FTP伺服器將通過這個埠進行資料的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連線。 被動還是主動都是由客戶端通知FTP伺服器的,很多防火牆在設定的時候都是不允許接受外部發起的連線的,所以許多位於防火牆後或內網的FTP伺服器不支援PASV模式,因為客戶端無法穿過防火牆開啟FTP伺服器的高階埠;而許多內網的客戶端不能用PORT模式登陸FTP伺服器,因為從伺服器的TCP 20無法和內部網路的客戶端建立一個新的連線,造成無法工作。 二、FTP的兩種傳輸方式:ASCII、二進位制。 1、ASCII傳輸方式: 假定使用者正在拷貝的檔案包含的簡單ASCII碼文字,如果在遠端機器上執行的不是UNIX,當檔案傳輸時ftp通常會自動地調整檔案的內容以便於把檔案解釋成另外那臺計算機儲存文字檔案的格式。但是常常有這樣的情況,使用者正在傳輸的檔案包含的不是文字檔案,它們可能是程式,資料庫,字處理檔案或者壓縮檔案。在拷貝任何非文字檔案之前,用binary 命令告訴ftp逐字拷貝。 2、二進位制傳輸模式: 在二進位制傳輸中,儲存檔案的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的檔案是沒意義的。例如,macintosh以二進位制方式傳送可執行檔案到Windows系統,在對方系統上,此檔案不能執行。如在ASCII方式下傳輸二進位制檔案,即使不需要也仍會轉譯。這會損壞資料。(ASCII方式一般假設每一字元的第一有效位無意義,因為ASCII字元組合不使用它。如果傳輸二進位制檔案,所有的位都是重要的。) 更詳細的區別可以看這個連結

https://www.cnblogs.com/mickole/articles/3643819.html 三、FTP伺服器訪問的使用者模式 匿名使用者訪問模式(anonymous)、本地使用者訪問模式(local user)、虛擬使用者訪問模式(訪客 guest)。 四、安裝FTP服務管理軟體 FTP服務管理軟體選擇Linux下最常用的vsftpd,vsftpd 是“very secure FTP daemon”的縮寫,安全性是它的一個最大的特點。它可以執行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個完全免費的、開放原始碼的ftp伺服器軟體,支援很多其他的 FTP 伺服器所不支援的特徵。比如:非常高的安全性需求、頻寬限制、良好的可伸縮性、可建立虛擬使用者、支援IPv6、速率高、小巧輕快,安全易用等。在開源作業系統中常用的FTPD套件主要還有ProFTPD、PureFTPd和wuftpd等 通過命令安裝:
[email protected]
:~# apt install vsftpd 五、安裝完上面的軟體會生成/etc/vsftpd.conf,/etc/ftpusers兩個檔案,下面對兩個檔案進行說明 1、vsftpd有很多的選項設定,而所有的配置都是基於/etc/vsftpd.conf這個配置檔案的。 vsftpd.conf 的格式非常簡單,每行要麼是一個註釋,要麼是一個指令。註釋行以#開始並被忽略掉。指令行格式如下: 配置項=引數值 很重要的一點是,這個格式裡不存在任何空格。 預設的,每一個配置項在配置檔案裡都佔一編輯行,可以被修改。 配置檔案有三種選項型別: 布林選項 - 可以是YES或NO; 數字選項 - 例如以秒為單位的時間,埠號 字串選項 - 目錄或檔案 檔案相關選項設定說明 ================================================================================================== listen=NO      設定vsftpd服務是否以獨立程序的模式執行。如果啟用,vsftpd將以獨立模式執行。這意味著vsftpd不能從某種型別的inetd(超級守護程序)執行, 而是由vsftpd自己監聽和處理IPv4埠的連線請求,如果請求比較大就選擇獨立模式 ,如果設定成YES那麼listen_ipv6就要設定成NO 預設值:NO =================================================================================================== listen_ipv6=YES 類似於listen引數的功能,但有一點不同,啟用後vsftpd會去監聽IPV6套接字而不是IPV4的。這個設定和listen的設定互相排斥。 如要同時監聽IPv4和IPv6埠,則必須執行兩套vsftpd,採用兩套配置檔案,同時確保其中有一個監聽選項是被註釋掉的,不要不是兩套,在同一套 中都設定成了YES,啟動vsftpd就會錯誤。 預設值:YES =================================================================================================== anonymous_enable=NO 控制是否允許匿名使用者登入。如果允許,使用者可使用使用者名稱ftp或anonymous進行ftp登入,都將被視為“anonymous"而允許登入。 預設值:NO =================================================================================================== local_enable=YES 控制是否允許本地登入。如果啟用,則可以使用/etc/passwd中的普通使用者帳戶(或PAM配置引用的任何位置)登入。 必須啟用此功能才能使任何非匿名登入工作,包括虛擬使用者。 預設值:YES =================================================================================================== write_enable=YES 是否允許本地使用者對FTP伺服器檔案具有寫許可權(上傳檔案或目錄),預設這個選項被#註釋掉 =================================================================================================== local_umask=022 掩碼,本地使用者預設掩碼為077你可以設定本地使用者的檔案掩碼為預設022,也可根據個人喜好將其設定為其他值,預設這個選項被#註釋掉 =================================================================================================== anon_upload_enable=YES 如果設定為YES,則允許匿名使用者在特定條件下上載檔案。為此,必須設定選項write_enable為YES,並且匿名ftp使用者在系統中必須具有所需上傳目錄的寫入許可權。 虛擬使用者上傳也需要此設定; 預設情況下,虛擬使用者使用匿名(即最大限制)許可權進行處理。預設這個選項被#註釋掉 ===================================================================================================

anon_mkdir_write_enable=YES 如果設定為YES,則允許匿名使用者在特定條件下建立新目錄。為此, 必須設定選項write_enable為YES,並且匿名ftp使用者必須具有父目錄的寫許可權,預設這個選項被#註釋掉

=================================================================================================== dirmessage_enable=YES 是否啟用目錄歡迎資訊功能,當用戶用CMD模式首次訪問伺服器上某個目錄時,FTP伺服器將顯示歡迎資訊預設情況下, 歡迎資訊是通過該目錄下的.message檔案獲得的此檔案儲存自定義的歡迎資訊,由使用者自己建立, 預設值:YES =================================================================================================== use_localtime=YES 如果啟用,vsftpd將使用本地時間。預設為GMT(格林尼治時間)時間。所以FTP內的時間預設會比北京時間少8個小時,建業設定成YES,預設值:YES =================================================================================================== xferlog_enable=YES 如果啟用,將保留日誌檔案,詳細說明上傳和下載。預設情況下,此檔案將放在/var/log/vsftpd.log中,但可以使用配置設定vsftpd_log_file覆蓋此位置 預設值:YES =================================================================================================== connect_from_port_20=YES 這用來控制伺服器是否使用20埠號來做資料傳輸(ftp-data),控制資料是21埠。 預設值:YES =================================================================================================== chown_uploads=YES 如果啟用,則所有匿名上載的檔案都將更改為設定chown_username中指定的使用者。從管理(可能是安全性)的角度來看,這很有用。預設這個選項被#註釋掉 =================================================================================================== chown_username=whoever 改變匿名使用者上傳的檔案的所有者。僅當設定了另一個選項chown_uploads時,此選項才有意義 。預設這個選項被#註釋掉 =================================================================================================== xferlog_file=/var/log/vsftpd.log 這個設定是設定生成wu-ftpd格式的log的檔名。只有啟用了xferlog_enable和xferlog_std_format後才能生效。 但不能和dual_log_enable同時啟用。 預設這個選項被#註釋掉 =================================================================================================== xferlog_std_format=YES 如果啟用,log檔案將以標準的xferlog格式寫入(wu-ftpd使用的格式),以便於你用現有的統計分析工具進行分析。但預設的格式具有更好的可讀性。 預設情況下,log檔案是在/var/log/xferlog。但是,你可以通過修改xferlog_file來指定新路徑。預設這個選項被#註釋掉 =================================================================================================== idle_session_timeout=600 超時時間。單位:秒。設定遠端客戶端在兩次輸入FTP命令的最大時間間隔。時間一到,遠端客戶將被斷開連線。預設這個選項被#註釋掉 =================================================================================================== data_connection_timeout=120 超時時間,單位:秒。設定資料傳輸延遲的最大時間。時間一到,遠端使用者將被斷開連線。預設這個選項被#註釋掉 ===================================================================================================  nopriv_user=ftpsecure 這是vsftpd做為完全無特權的使用者的名字。這是一個專門的使用者,比nobody更甚。使用者nobody往往用來在一些機器上做一些重要的事情。預設這個選項被#註釋掉 =================================================================================================== async_abor_enable=YES 啟用時,一個特殊的FTP命令"async ABOR”將允許使用。只有不正常的FTP客戶端要使用這一點。而且,這個功能又難於操作,所以,預設是把它關閉了。 但是,有些客戶端在取消一個傳送的時候會被掛死(估計是客戶端無響應了),那你只有啟用這個功能才能避免這種情況。 預設這個選項被#註釋掉 =================================================================================================== ascii_upload_enable=YES 啟用時,使用者上傳時將以ASCII模式傳送檔案。 預設這個選項被#註釋掉 =================================================================================================== ascii_download_enable=YES 啟用時,使用者下載時將以ASCII模式傳送檔案。預設這個選項被#註釋掉 =================================================================================================== ftpd_banner=Welcome to blah FTP service. 當一個連線首次接入時將現實一個歡迎介面。預設這個選項被#註釋掉 =================================================================================================== deny_email_enable=YES 如果啟用,你要提供一個關於匿名使用者的密碼E-MAIL表(我們都知道,匿名使用者是用郵件地址做密碼的)以阻止以這些密碼登入的匿名使用者。 預設情況下,這個列表檔案是/etc/vsftpd.banner_emails,但你也可以通過設定banned_email_file來改變預設值。預設這個選項被#註釋掉 =================================================================================================== banned_email_file=/etc/vsftpd.banned_emails deny_email_enable啟動後,匿名使用者如果使用這個檔案裡指定的E-MAIL密碼登入將被拒絕。 預設這個選項被#註釋掉 =================================================================================================== chroot_local_user=YES 如果設為YES,本地使用者登入後將被(預設地)鎖定在虛根下,這個虛根實際就是他的home目錄。也就是說即使使用者cd /實際也是在他的home目錄下, 預設這個選項被#註釋掉 =================================================================================================== chroot_list_enable=YES 如果啟用,你要提供一個使用者列表,表內的使用者將在登入後被放在其home目錄,鎖定在虛根下(進入FTP後,PWD一下,可以看到當前目錄是"/",這就是虛根。是FTP的根目錄, 並非FTP伺服器系統的根目錄)。如果chroot_local_user設為YES後,其含義會發生一點變化。 在這種情況下,這個列表內的使用者將不被鎖定在虛根下。 預設情況下, 這個列表檔案是/etc/vsftpd.chroot_list, 但你也可以通過修改chroot_list_file來改變預設值。預設這個選項被#註釋掉 =================================================================================================== chroot_list_file=/etc/vsftpd.chroot_list 這個項提供了一個本地使用者列表,表內的使用者登入後將被放在虛根下,並鎖定在home目錄。這需要chroot_list_enable項被啟用。 如果chroot_local_user項被啟用,這個列表就變成一個不將列表裡的使用者鎖定在虛根下的使用者列表了。 預設這個選項被#註釋掉 =================================================================================================== ls_recurse_enable=YES 啟用後,此設定將允許使用“ls -R”。這是一個較小的安全風險,因為大型站點頂層的ls -R可能會消耗大量資源。預設這個選項被#註釋掉 =================================================================================================== secure_chroot_dir=/var/run/vsftpd/empty 這個設定指定了一個空目錄,這個目錄不允許ftp user寫入。在vsftpd不希望檔案系統被訪問時,目錄為安全的虛根所使用。預設這個選項被#註釋掉 =================================================================================================== pam_service_name=vsftpd 設定vsftpd將要用到的PAM服務的名字。 =================================================================================================== rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem 此選項指定用於SSL加密連線的RSA證書的位置。 =================================================================================================== rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key 此選項指定用於SSL加密連線的RSA私鑰的位置。如果未設定此選項,則預期私鑰與證書位於同一檔案中。 =================================================================================================== ssl_enable=NO 如果啟用,vsftpd將啟用openSSL,通過SSL支援安全連線。這個設定用來控制連線(包括登入)和資料線路。同時,你的客戶端也要支援SSL才行。 注意:小心啟用此項.VSFTPD不保證OpenSSL庫的安全性。啟用此項,你必須確信你安裝的OpenSSL庫是安全的。 預設值:NO =================================================================================================== utf8_filesystem=YES 如果啟用,vsftpd將使用utf8檔案系統。 =================================================================================================== 還有更多的選項請檢視下面的連結。https://manpages.debian.org/stretch/vsftpd/vsftpd.conf.5.en.htmlhttps://www.cnblogs.com/bj-xy/p/5632561.html =================================================================================================== 2、限制使用者訪問的檔案/etc/ftpusers 禁止使用vsftpd的使用者列表檔案。記錄不允許訪問FTP伺服器的使用者名稱單,管理員可以把一些對系統安全有威脅的使用者賬號記錄在此檔案中, 以免使用者從FTP登入後獲得大於上傳下載操作的權利,而對系統造成損壞。每一行記錄一個使用者,預設root使用者在檔案裡,禁止root使用者訪問FTP伺服器。 六、設定本地普通使用者訪問 1、備份自動生成的/etc/vsftpd.conf檔案: [email protected]:~# mv -v /etc/vsftpd.conf /etc/vsftpd.conf.backup 2、新建符合自己要求的/etc/vsftpd.con檔案,預設的規則很多,設定也不一定符合我們的應用,我們可以有選擇的新增選項。 ==================================================================== [email protected]:~# vim.tiny /etc/vsftpd.conf            listen=YES listen_ipv6=NO anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES allow_writeable_chroot=YES ==================================================================== 上面是我需要的規則 vsftpd從2.3.5之後,vsftpd增強了安全檢查,如果使用者被限定在了其主目錄下,則該使用者的主目錄不能再具有寫許可權了!如果檢查發現還有寫許可權, 就會報這個錯誤,500 OOPS: vsftpd: refusing to run with writable root inside chroot() 。 解決的辦法: 方法一:可以用命令去除使用者主目錄的寫許可權,如:chmod a-w /home/user 方法二:可以在vsftpd的配置檔案中新增一行配置:allow_writeable_chroot=YES 注意:修改完vsftpd的配置檔案後,需要重啟才會生效 預設 2、如果需要訪問的使用者的使用者名稱在/etc/ftpusers檔案中,刪除他 3、設定上面的重啟vsftpd服務 [email protected]:~# systemctl start vsftpd.service 4、檢視vsftpd服務是否正常啟動,如果服務啟動失敗可能是/etc/vsftpd.conf內的格式有問題。 [email protected]:~# systemctl status vsftpd.service 5、vsftpd服務預設是開機啟動的,可以通過下面的命令關閉 [email protected]:~# systemctl disable vsftpd.service