1. 程式人生 > >ubuntu搭建ftp伺服器,並配置虛擬使用者許可權

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

大功告成!