1. 程式人生 > >在linux中配置vsftpd 多使用者對應多目錄,使用虛擬使用者設定VSFTPD賬戶(無需資料庫工具)

在linux中配置vsftpd 多使用者對應多目錄,使用虛擬使用者設定VSFTPD賬戶(無需資料庫工具)

在ubuntu中配置vsftpd 多使用者對應多目錄,使用虛擬使用者設定VSFTPD賬戶(無需資料庫工具)

參考連線 我想在我的伺服器上安裝FTP伺服器,我在網上查資料後,發現VSFTPD是最安全的,所以我就開始安裝使用它。 我測試過很多教程,但找不到任何全面詳細的教程,所以決定寫我自己的方法。在我的個人伺服器上建立了VSFTPD服務,接下來跟著我的教程一步一步部署VSFTPD到我們的專用伺服器。

安裝VSFTPD概要

  • 安裝vsftpd、PAM庫 htpasswd
  • 編輯/etc/vsftpd.conf和/etc/pam.d/vsftpd檔案
  • 建立自定義使用者目錄(例如:/var/www/)
  • 使用 chmod 和 chown 設定正確的許可權和組目錄
  • 建立擁有完全訪問到伺服器的管理員使用者
  • 疑難解答

1. 安裝vsftpd(Very Secure FTP Deamon:非常安全的FTP守護程序)和 libpam-pwdfile 、apache2-utils 工具可以建立虛擬使用者

我想建立FTP使用者,但不想新增本地UNIX使用者(沒有shell訪問,沒有主目錄等)。一個PAM(Pluggable Authentication Modules將幫助您建立虛擬使用者。
sudo apt-get install vsftpd libpam
-pwdfile apache2-utils

2. 編輯vsftpd.conf

首先,你需要備份原始檔案

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

然後建立一個新的 vsftpd.conf 檔案

sudo vim /etc/vsftpd.conf

複製並貼上以下行。該檔案應該只包含這些行

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs
=YES guest_enable=YES user_sub_token=$USER local_root=/var/www/$USER chroot_local_user=YES hide_ids=YES guest_username=vsftpd # reserve TCP ports 2121-2142 for passive FTP pasv_min_port=2121 pasv_max_port=2142

3. 註冊虛擬使用者

(adsbygoogle = window.adsbygoogle || []).push({}); 註冊使用htpasswd的使用者。建立一個資料夾的vsftpd然後把配置檔案在裡面。
sudo mkdir /etc/vsftpd
然後
sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1
  • -c:如果檔案不存在,將自動建立檔案
  • -d:MD5 加密,你需要在Ubuntu 14.04中,該命令將提示輸入密碼。
如果你想以後新增新使用者,使用以下命令:
sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

4. 配置PAM在/etc/pam.d/vsftpd

同樣,你需要備份最初的檔案

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

並建立一個新的 vsftpd 檔案

sudo vim /etc/pam.d/vsftpd

複製並貼上這兩行程式碼(這個檔案中應該只包含這兩行內容)。

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

5. 建立沒有shell訪問的本地使用者


(adsbygoogle = window.adsbygoogle || []).push({});
sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
當用戶連線到FTP伺服器時,它們將被用於管理對應使用者名稱字的許可權目錄。

6. 重新啟動vsftpd

常見的方法是使用的init.d重啟守護程序,如下:
sudo /etc/init.d/vsftpd restart

或使用 service 命令重啟

sudo service vsftpd restart

7. 建立目錄


(adsbygoogle = window.adsbygoogle || []).push({});

根據配置的所有使用者將被放置到這個資料夾:/var/www/user1

您需要特別權利建立它們:根資料夾不能寫!

  • Folder / [root = /var/www/user1] => 555
    • Folder www [ /var/www/user1/www ] => 755
    • Folder docs [ /var/www/user1/docs ] => 755
注:在根目錄下的使用者**不能**建立檔案或資料夾。

在vsftpd.conf中,我們有chroot_local_user = YES,使使用者無法看到他的資料夾以外的任何東西。對他來說,伺服器看起來是這樣的:

登入FTP vsftpd的chroot環境

因此,只要執行這些命令:

sudo mkdir /var/www/user1
sudo chmod -w /var/www/user1
sudo mkdir -p /var/www/user1/www /var/www/user1/docs
sudo chmod -R 755 /var/www/user1/www /var/www/user1/docs
sudo chmod -w /var/www/user1/docs
sudo chown -R vsftpd:nogroup /var/www/user1

備註:如果需要目錄只有只讀許可權,使用chmod修改即可。

在 /var/www/user1 的資料夾已存在,或連線失敗。

現在,你可以嘗試用你的FTP客戶端連線,它一定會成功!如果沒有,你可以檢查排除故障部分。

8. 建立管理員使用者訪問整個伺服器

要建立一個管理員使用者,我們需要註冊htpasswd的新使用者。

在這樣做之前,我會建議您檢查到該定義被某些使用者在/etc/ftpusers檔案中未允許使用FTP連線。我認為這只是為本地使用者,而不是虛擬使用者,但以防萬一,不要選擇包含在此檔案的名稱。說實話,vsftpd是夠複雜!

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

建立 /etc/vsftpd.chroot_list 檔案,並把上邊使用者和密碼新增到這個檔案(第一行使用者名稱,第二行密碼):

theadmin
you_password

現在,我們需要在 /etc/vsftpd.conf檔案中新增一行,程式碼如下:

chroot_list_enable=YES

加入這個命令後,意味著在/etc/vsftpd.chroot_list 裡的使用者,你不必建立一個像/var/www/theadmin的資料夾,使用者將登入後應該顯示/home/vsftpd為主目錄。

重新啟動伺服器,你就大功告成了!

9. 匿名使用者訪問

修改 “/etc/vsftpd.conf” 檔案即可:

anonymous_enable=YES
anon_root=/var/www/anonymous #此目錄可以自己建立,訪問許可權也可以自定義

故障排除


(adsbygoogle = window.adsbygoogle || []).push({});

下面是我遇到了一些錯誤。

500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

你的根目錄是可寫的,這是不允許的。檢查第7部分檢視更多資訊,你需要建立一個555根,755子資料夾

500 OOPS: cannot change directory:/var/www/theadmin if the folder doesnt exist

在/var/www/$USER 資料夾不存在,用正確的許可權(不可寫)建立或新增使用者進入/etc/vsftpd.chroot_list(見第8部分)。不要忘了重新啟動伺服器。

htpasswd: cannot create file /etc/vsftpd/ftpd.passwd

在/etc/vsftpd/ 資料夾已存在,htpasswd不會建立它。

vsftpd restart or stop error: “restart: Unknown instance”

這意味著你不能啟動守護程序,即使你有/etc/init.d/vsftpd啟動成功訊息。它不會啟動,因為你的配置是錯誤的。再次檢視教程細節。

Error: Connection timed out after 20 seconds of inactivity

檢視是否開啟 21埠並開啟 2121 - 2142 埠。