在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,使使用者無法看到他的資料夾以外的任何東西。對他來說,伺服器看起來是這樣的:
因此,只要執行這些命令:
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 埠。