以下內容主要是參考這個和這個的。
- 安裝 vsftpd
sudo install vsftpd
- 建立一個新 User,所有 vritual users 會以此 users 作登入
# Don't use -m (--create-home) option. This avoids creating a home # directory based on /etc/skel (.bash* and .profile files). sudo useradd -d /home/work workers sudo mkdir /home/work sudo chown workers /home/work
- 建立 virutal users 的 config directory
sudo mkdir /etc/vsftpd sudo mkdir /etc/vsftpd/vusers
- 開以修改 vsftpd 的設定。修改 /etc/vsftpd.conf 文件
sudo vi /etc/vsftpd.conf
- 修改以下的設定,如原 file 沒有的便加上去
# Disable anonymous_enable is optional. anonymous_enable=NO ... local_enable=YES ... pam_service_name=vsftpd # Enable (only) guests. guest_enable=YES # This is not needed, it's the default. Just here for clarity. guest_username=ftp # Where the guests (virtual) usernames are set. user_config_dir=/etc/vsftpd/vusers
- 建立 virtual user 的設定,為方便管理,會將各 users 的設定以 symbolic link 的形式連結到一共同的檔案上。建立設定檔。
sudo vi /etc/vsftpd/workers
- 輸入以下內容
write_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES anon_upload_enable=YES local_root=/home/work chroot_local_user=YES dirlist_enable=YES download_enable=YES guest_username=workers
- 為每個 virtual users 建立 symbolic link,如有 mike 和 sarah,則
sudo ln -s /etc/vsftpd/workers /etc/vsftpd/vusers/mike sudo ln -s /etc/vsftpd/workers /etc/vsftpd/vusers/sarah
- 我們用 PAM 來儲存 virtual users 的密碼,所以要修改 /etc/pam.d/vsftpd
sudo vi /etc/pam.d/vsftpd
- 將裏面的 code 改成
其他的可以 comment 掉。@include common-session auth required pam_pwdfile.so pwdfile /etc/vsftpd/passwd account required pam_permit.so
(這個 file 花了我很多時間,試過跟著別人的 config 來設定 Server 會直接 close connection,看 syslog 說 vsftpd segfault,丈八金鋼摸不著頭腦。還以為要用 32 bits library,安裝後還是一樣,最後發覺 @include common-session 不能 comment 掉!) - 為 virtual users 建立密碼
perl -e '$salt=q($1$).int(rand(1e8)); print "password: "; chomp($passwd=<STDIN>); print crypt($passwd,$salt),"n"'
執行後複製密碼
(用 pam_pwdfile 要用以上方式產生密碼,用 htpasswd generate 出來的不行,又費了我幾天時間!) - 將複製了的密碼貼上 /etc/vsftpd/passwd 的檔案裏,一行為一個 user,用以下的格式
username1:password1 username2:password2
- 重啟 vsftpd
sudo service vsftpd restart
- 用 ftp client 試試看吧。
Troubleshoot:
- 如出現 server closed the connection ,可能是 /etc/pam.d/vsftpd 出現問題。
- 如出現 500 OOPS: vsftpd: refusing to run with writable root inside chroot() ,則是沒有在 /etc/vsftpd/vusers/ 下建立 user 的設定檔。
- 如出現 login incorrect 錯誤,則是 passwd 檔錯誤。記緊若用 pam_pwdfile 的話不要用 htpasswd 來建立密碼,要用上面的 script 呀!