ubuntu搭建ftp伺服器,並配置虛擬使用者許可權
安裝並啟動 FTP 服務
安裝 VSFTPD
使用 apt-get 安裝 [vsftpd]:
sudo apt-get install vsftpd -y
vsftpd 是在 Linux 上被廣泛使用的 FTP 伺服器,根據其官網介紹,它可能是 UNIX-like 系統下最安全和快速的 FTP 伺服器軟體。
啟動 VSFTPD
安裝完成後 VSFTPD 會自動啟動,通過 netstat 命令可以看到系統已經[監聽了 21 埠]:
sudo netstat -nltp | grep 21
如果沒有啟動,可以手動開啟 VSFTPD 服務:
sudo systemctl start vsftpd.service
FTP 協議預設使用 21 埠作為服務埠
配置使用者訪問目錄
新建使用者主目錄
sudo mkdir /home/uftp
執行完後,在這裡 /home/uftp [?] 就能看到新建的資料夾 uftp 了。
建立登入歡迎檔案 [?]:
sudo touch /home/uftp/welcome.txt
方便使用者登入後可以看到歡迎資訊,並且確定使用者確實登入到了主目錄上。
使用者的主目錄是使用者通過 FTP 登入後看到的根目錄
新建使用者 uftp 並設定密碼
建立一個使用者 uftp [?]:
sudo useradd -d /home/uftp -s /bin/bash uftp
為使用者 uftp 設定密碼 [?]:
sudo passwd uftp
刪除掉 pam.d 中 vsftpd,因為該配置檔案會導致使用使用者名稱登入 ftp 失敗:
sudo rm /etc/pam.d/vsftpd
為了方便後面的實驗步驟,不建議使用其它的使用者名稱
請記住設定的密碼以用於後續步驟
限制該使用者僅能通過 FTP 訪問
限制使用者 uftp 只能通過 FTP 訪問伺服器,而不能直接登入伺服器:
sudo usermod -s /sbin/nologin uftp
修改 vsftpd 配置
sudo chmod a+w /etc/vsftpd.conf
修改 /etc/vsftpd.conf 檔案中的配置(直接將如下配置新增到配置檔案最下方):
# 限制使用者對主目錄以外目錄訪問
chroot_local_user=YES
# 指定一個 userlist 存放允許訪問 ftp 的使用者列表
userlist_deny=NO
userlist_enable=YES
# 記錄允許訪問 ftp 使用者列表
userlist_file=/etc/vsftpd.user_list
# 不配置可能導致莫名的530問題
seccomp_sandbox=NO
# 允許檔案上傳
write_enable=YES
# 使用utf8編碼
utf8_filesystem=YES
新建檔案 /etc/vsftpd.user_list,用於存放允許訪問 ftp 的使用者:
sudo touch /etc/vsftpd.user_list
sudo chmod a+w /etc/vsftpd.user_list
修改 /etc/vsftpd.user_list ,加入剛剛建立的使用者:
示例程式碼:/etc/vsftpd.user_list
uftp
設定訪問許可權
設定主目錄訪問許可權(只讀):
sudo chmod a-w /home/uftp
新建公共目錄,並設定許可權(讀寫):
sudo mkdir /home/uftp/public && sudo chmod 777 -R /home/uftp/public
重啟vsftpd 服務:
sudo systemctl restart vsftpd.service
訪問 FTP 服務
FTP 服務已安裝並配置完成,下面我們來使用該 FTP 服務
訪問 FTP 服務
根據您個人的工作環境,選擇一種方式來訪問已經搭建的 FTP 服務
通過 FTP 客戶端工具訪問
FTP 客戶端工具眾多,下面推薦兩個常用的:
FileZilla - 跨平臺的 FTP 客戶端,支援 Windows 和 Mac
WinSCP - Windows 下的 FTP 和 SFTP 連線客戶端
下載和安裝 FTP 客戶端後,使用下面的憑據進行連線即可:
[主機]:
<您的 CVM IP 地址>
使用者:
uftp
輸入密碼後,如果能夠正常連線,那麼大功告成,您可以開始使用屬於您自己的 FTP 伺服器了!
接下來,請上傳任意一張圖片到您的 FTP 伺服器上的 uftp 的 public 目錄下,然後,就可以在/home/uftp/public 中看到了。
通過 Windows 資源管理器訪問
Windows 使用者可以複製下面的[連結]到資源管理器的位址列訪問:
ftp://uftp:你的密碼@<您的 CVM IP 地址>
如果您申請了域名,可以將Ip 地址替換為對應的域名作為訪問憑據
如果您申請了域名,可以將連結中的 Ip 地址替換為對應的域名訪問 FTP 服務
大功告成
恭喜!您已經成功完成了搭建 FTP 伺服器的實驗任務。
阿里雲被動模式配置
如果vsftp是部署在阿里雲上,無法在windows資源管理器上開啟,這是阿里雲的網路環境引起的。這裡需要理解下ftp的被動模式,被動模式下,客戶端請求ftp伺服器後,ftp伺服器告訴客戶端獲取資料的地址和埠,但是阿里雲服務上的網絡卡都是內網地址。參考:https://blog.csdn.net/ridicuturing/article/details/80308053
所以完成上面的部署後,我們需要再修改,最後配置內容:
#以下三項要修改,關閉ipv6,指定外網IP,未測試配置之後內網是否可以說訪問
listen=YES
listen_ipv6=NO
pasv_address=47.52.234.212
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
#配置被動模式埠
pasv_enable=YES
pasv_min_port=9000
pasv_max_port=9045
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
chroot_local_user=YES
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
seccomp_sandbox=NO
write_enable=YES
utf8_filesystem=YES
ps: pasv_address 此選項為一個數字IP地址,作為PASV命令的響應。預設值為none,即地址是從呼入的連線套接字(incoming connectd socket)中獲取。
pasv_min_port=port number
pasv_max_port=port number
設定在PASV模式下,建立資料傳輸所可以使用port範圍的下界和上界,0 表示任意。預設值為0。把埠範圍設在比較高的一段範圍內,比如50000-60000,將有助於安全性的提高。顯示阿里雲服務是不可能讓它隨意安排埠,必需指定使用我為它開放的埠如9000~9045
配置虛擬使用者
在通過以上配置,客戶端可以登入uftp賬號連線ftp,但是這種賬號是使用了系統賬號,這是一種並不安全的方案,雖然我們禁了uftp通過ssh2連線系統。更安全的做法是配置虛擬ftp使用者,這裡虛擬ftp使用者可以是基於檔案,也可以基於資料庫,這裡介紹基於檔案的虛擬使用者,基於資料的虛擬使用者配置參考:https://blog.csdn.net/qq_18863573/article/details/52296554
1.建立一個文字檔案,將使用者名稱密碼逐行填寫到裡面,如:
sudo mkdir /etc/vsftp
cd /etc/vsftp
sudo touch loguser.txt
sudo vim loguser.txt
將使用者名稱、密碼一行一行地填寫,比如建立兩個使用者名稱和密碼相同的teacher和student,那麼,loguser.txt的內容是:
teacher
teacher
student
student
2.根據loguser.txt檔案建立虛擬使用者資料庫:
sudo apt-get install db-util
sudo db_load -T -t hash -f loguser.txt /etc/vsftp/vsftpd_login.db
3.賦予虛擬使用者資料庫檔案合適的許可權:
sudo chmod 600 vsftpd_login.db
4.建立新的vsftpd認證配置檔案:
sudo touch /etc/pam.d/vsftpd.vu
sudo vim /etc/pam.d/vsftpd.vu
配置剛才生成的資料庫檔案
auth sufficient pam_userdb.so db=/etc/vsftp/vsftpd_login
account sufficient pam_userdb.so db=/etc/vsftp/vsftpd_login
5.修改vsftpd配置檔案,內容如下(可以將原來的備份,就只配置如下的配置,注意pasv_address對應雲伺服器外網IP):
listen=YES
listen_ipv6=NO
pasv_address=47.52.234.212
anonymous_enable=YES
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
pasv_enable=YES
pasv_min_port=9000
pasv_max_port=9045
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd.vu
chroot_local_user=YES
# 不配置可能導致莫名的530問題
seccomp_sandbox=NO
write_enable=YES
utf8_filesystem=YES
allow_writeable_chroot=YES
guest_enable=YES
guest_username=uftp
user_config_dir=/etc/vsftp/vsftpd_user_conf
#新建的目錄 許可權是755,檔案的許可權是 644
umask = 022
anon_umask=022
banner_file=/home/uftp/welcome.txt
6.建立虛擬使用者配置目錄,併為使用者teacher,student建立配置檔案:
sudo touch teacher
sudo touch student
指定teacher工作目錄並配置可寫許可權,teacher配置:
local_root=/home/uftp/teacher
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
指定student與teacher使用者相同工作目錄,但只有讀的許可權,student配置:
local_root=/home/uftp/teacher
anon_world_readable_only=NO
7.建立teacher和students的工作目錄,並修改目錄所屬使用者和使用者組:
sudo mkdir /home/uftp/teacher
sudo chown uftp:uftp /home/uftp/teacher
8.重啟vsftud:
sudo mkdir /home/uftp/teacher
sudo chown uftp:uftp /home/uftp/teacher
大功告成!