第一次架 ftp server 就看這兩篇, 很快就可以架好
https://help.ubuntu.com/12.04/serverguide/ftp-server.html
http://manpages.ubuntu.com/manpages/precise/en/man5/vsftpd.conf.5.html
如果想要用 virtual user 來搭配 ftp server, 而不是用 server 上的帳號, 那就看這篇
http://sigerr.org/linux/setup-vsftpd-custom-multiple-directories-users-accounts-ubuntu-step-by-step
Package Installation
總共要裝三個東西, 一個是 vsftpd, 一個是 PAM Pluggable Authentication Modules), 用來建立虛擬帳號以及認証, 最後是 apache 裡的一個小工具, 在建立帳號時會使用到root@ubuntu:~$ apt-get install vsftpd libpam-pwdfile apache2-utils
Configuration
/etc/pam.d/vsftpd-virtual
建立一個認証的機制, 我們將密碼存在 /nfsroot/ftp/ftpd.passwd 之中# Customized login using htpasswd file auth required pam_pwdfile.so pwdfile /nfsroot/ftp/ftpd.passwd account required pam_permit.so
/etc/vsftpd.conf
前面幾項都是原來的設定檔有的, 我就沒有拿掉, 因為我只是要開放一個 ftp 站供人下載東西, 而不支援上傳, 所以我沒有把 write_enable 打開.listen=YES # 改成 NO anonymous_enable=NO # 改成 YES local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES # 改成 YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty # 使用另一個 PAM 設定檔 pam_service_name=vsftpd-virtual rsa_cert_file=/etc/ssl/private/vsftpd.pem # 讓所有的虛擬帳號都改用 guest 登入 guest_enable=YES # 讓所有的虛擬帳號都有各自的目錄, 互相不影響 user_sub_token=$USER local_root=/nfsroot/ftp/$USER # 讓檔案擁有者顯示成 ftp hide_ids=YES # 使用目錄設定的權限 virtual_use_local_privs=YES
Register User
以下是創造虛擬帳號的方法, 因為在 vsftp.conf 之中我們把 local_root 設定在 /nfsroot/ftp/$USER, 所以我們要主動幫他把目錄建出來, 擁有者改成 ftp, 因為預設的 guest 帳號是 ftp, 權限要改成不能寫入, 不然會無法登入root@ubuntu:~$ touch /nfsroot/ftp/ftpd.passwd root@ubuntu:~$ htpasswd -bd /nfsroot/ftp/ftpd.passwd <username> <password> root@ubuntu:~$ mkdir /nfsroot/ftp/<username> root@ubuntu:~$ chown ftp:nogroup /nfsroot/ftp/<username> root@ubuntu:~$ chmod -w /nfsroot/ftp/<username>
以上都做完之後, 就記得要重啟 vsftpd, 就完成囉~
其它雷同的介紹, 但有不同的設定, 可以看看
http://www.onaxer.com/2010/12/01/virtual-users-and-directories-in-vsftpd/
http://howto.gumph.org/content/setup-virtual-users-and-directories-in-vsftpd/
2012/11/13 補充:
Writable Root Folder
如果虛擬帳號的 root folder 不是唯讀的, 就無法登入, 你會看到以下的訊息500 OOPS: vsftpd: refusing to run with writable root inside chroot()
後來在網路上找了一些文章, 才發現原來這是 vsftpd 2.3.5 才出現的設計,
原來是沒有這個限制的, 也很多人抱怨這個功能很難用, 必須要多建立一個可寫入的子目錄,
才能讓使用者上傳檔案到 ftp server, 所以就有一些解法
http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/#comment-2051
解法1:升級到 vsftpd 3.0.0, 設定檔內加上 allow_writeable_chroot=YES
解法2:改成使用 vsftpd 2.3.2
解法3:修改 2.3.5 的 code, 把這個限制解除掉, 網路上有人已經做了這件事
root@ubuntu:~$ apt-get install python-software-properties root@ubuntu:~$ add-apt-repository ppa:thefrontiergroup/vsftpd root@ubuntu:~$ apt-get update root@ubuntu:~$ apt-get install vsftpd
以下我採取解法3, 在這種設定下, 如果你想要新增一個 read-only 的帳號, 簡單的作法就是照樣把 root folder 的 write permission 去掉, 如果想要讓使用者可以上傳檔案, root folder 就要記得加上 write permission
/etc/vsftpd.conf
listen=YES # 改成 NO anonymous_enable=NO # 改成 YES local_enable=YES # 改成 YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES # 改成 YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty # 使用另一個 PAM 設定檔 pam_service_name=vsftpd-virtual rsa_cert_file=/etc/ssl/private/vsftpd.pem # 讓所有的虛擬帳號都改用 guest 登入 guest_enable=YES # 讓所有的虛擬帳號都有各自的目錄, 互相不影響 user_sub_token=$USER local_root=/nfsroot/ftp/$USER # 讓檔案擁有者顯示成 ftp hide_ids=YES # 使用目錄設定的權限 virtual_use_local_privs=YES allow_writeable_chroot=YES
沒有留言:
張貼留言