原連接:https://help.ubuntu.com/lts/serverguide/ftp-server.htmlhtml
FTP, File Transfer Protocol, 文件傳輸協議是一種用於在計算機之間下載文件的 TCP 協議。之前 FTP 協議 也用於上傳,但因爲該協議不使用加密,明文的用戶憑證和數據很容易被截獲。若是想要找一種能夠安全上傳下載文件的方式,能夠參閱 遠程管理 中的 OpenSSH 部分。shell
FTP 以 客戶端/服務端
模式運做。服務端組件被稱爲 FTP 守護進程(FTP daemon),它會持續監聽來自客戶端的FTP請求。在收到請求時,它會驗證登陸並設置鏈接。在會話期間,它會執行FTP客戶端發送的任何命令。ubuntu
能夠設置兩種 FTP 服務器的訪問方式:安全
在匿名模式下,客戶端可使用名爲 anonymous
或 ftp
的默認帳戶訪問FTP服務器,使用郵件地址做爲密碼。在認證模式下,用戶必須有帳戶和密碼。認證模式實際很不安全(憑證和數據明文傳輸),除非狀況特殊,不然不該該使用。若是想要安全傳輸文件,能夠參閱 OpenSSH-Server 中的 SFTP。用戶對 FTP 服務器目錄和文件的訪問權限取決於登陸時的賬戶擁有的權限。一般狀況下,FTP 守護進程將隱藏 FTP 服務器的根目錄,轉而使用 FTP 主目錄。這樣能夠在遠程會話中隱藏文件系統的其他部分。bash
vsftpd 是 Ubuntu 中經常使用的 FTP 守護進程,很容易安裝、設置和維護。要安裝 vsftpd,能夠運行如下命令:服務器
sudo apt install vsftpd
默認狀況下,vsftpd 配置爲不容許匿名下載。若是要啓用匿名下載,能夠編輯 /etc/vsftpd.conf
:ionic
anonymous_enable=Yes
在 vsftpd 安裝過程當中,會建立一個名爲 ftp
的用戶,該用戶的主目錄爲 /srv/ftp
,這是默認的 FTP 目錄。
若是要修改默認 FTP 目錄,好比說改爲 /srv/files/ftp
,只須要建立這個目錄並更改 ftp 用戶的主目錄:ide
sudo mkdir /srv/files/ftp sudo usermod -d /srv/files/ftp ftp
修改以後重啓 vsftpd 使配置生效:網站
sudo systemctl restart vsftpd.service
如今,就能夠把想要分享的任何文件或文件夾複製到 ftp 用戶的主目錄下,小夥伴們就能夠經過匿名 FTP 訪問了。ui
默認狀況下,vsftpd 配置爲用戶通過身份驗證才能夠下載文件。若是但願用戶可以上傳文件,能夠編輯 /etc/vsftpd.conf
:
write_enable=YES
須要重啓 vsftpd 使配置生效:
sudo systemctl restart vsftpd.service
如今,當用戶登陸到 FTP 時,就能夠在他們的主目錄中作下載、上傳、建立目錄等操做了。
默認狀況下,vsftpd 不容許匿名用戶將文件上傳到 FTP 服務器。要修改該設置,應取消註釋配置文件中的如下行,並從新啓動vsftpd:
anon_upload_enable=YES
容許匿名 FTP 上傳會有很大的安全風險。若是服務器能夠直接從 Internet 訪問,最好不要啓用匿名上傳。
配置文件包含不少配置參數。每一個參數的相關信息在配置文件中都有說明。也能夠查詢 man page,man 5 vsftpd.conf
,瞭解每一個參數的詳細信息。
/etc/vsftpd.conf
配置文件中有一些選項可讓 vsftpd 更安全。例如,能夠經過取消如下行的註釋來限制用戶只能訪問主目錄:
chroot_local_user=YES
還能夠限制特定用戶列表只能訪問其主目錄:
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
取消上述兩行的註釋後,建立一個 /etc/vsftpd.chroot_list
文件,每行寫一個用戶名,而後從新啓動 vsftpd:
sudo systemctl restart vsftpd.service
此外, /etc/ftpusers
文件能夠記錄不容許訪問 FTP 的用戶列表。默認列表包括 root
、daemon
、nobody
等。要禁用其餘用戶的 FTP 訪問權限,只需將它們添加到列表中。
FTP 也可使用 FTPS 進行加密。與 SFTP 不一樣,FTPS 是基於安全套接字層 (SSL,Secure Socket Layer)的 FTP。SFTP 所指的 FTP 像一個創建在加密SSH鏈接上的會話。一個主要區別是 SFTP 的用戶須要在系統上具備一個shell賬戶,而不是 nologin shell。向全部用戶提供 shell 可能不是某些環境(如共享 Web 主機)的理想選擇。不過,仍是能夠將此類賬戶限制爲僅 SFTP 並禁用 shell 交互的,有關詳細信息,能夠參閱 OpenSSH-Server。
要配置FTPS,能夠編輯 /etc/vsftpd.conf
,在末尾添加:
ssl_enable=Yes
還須要添加證書和密鑰相關的選項:
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
默認狀況下,這些選項會被設置爲 ssl-cert 包提供的證書和密鑰。在生產環境中,這些證書應替換爲爲特定主機生成的證書和密鑰。有關證書的詳細信息,能夠參閱 證書。
如今從新啓動 vsftpd,非匿名用戶將被強制使用 FTPS:
sudo systemctl restart vsftpd.service
爲了容許具備 /usr/sbin/nologin
shell 的用戶訪問 FTP,但不容許訪問 shell,能夠編輯 /etc/shells
添加 nologin shell:
# /etc/shells: valid login shells /bin/csh /bin/sh /usr/bin/es /usr/bin/ksh /bin/ksh /usr/bin/rc /usr/bin/tcsh /bin/tcsh /usr/bin/esh /bin/dash /bin/bash /bin/rbash /usr/bin/screen /usr/sbin/nologin
這是必需的,由於默認狀況下,vsftpd 使用 PAM 進行身份驗證,而且 /etc/pam.d/vsftpd
配置文件包含:
auth required pam_shells.so
shells PAM 模塊會限制對 /etc/shell
文件中列出的 shell 的訪問。
大多數流行的 FTP 客戶端能夠配置爲使用 FTPS 進行鏈接。lftp命令行 FTP 客戶端也可以使用 FTPS。