使用 VSFTP 與 MySQL 建置 FTP 的虛擬帳戶
建置平台 FreeBSD 5.4-STABLE
Step 1. 安裝 MySQL
# cd /usr/ports/database/mysql40-server
# make install clean
Step 2. 安裝 PAM-MySQL
# cd /usr/ports/security/pam-mysql
# make install clean
安裝後,注意提示訊息,需複製 或 搬移 或 連結 pam_mysql.so 到指定路徑
# cp /usr/local/lib/pam_mysql.so /usr/lib/pam_mysql.so
Step 3. 安裝 vsftp
# cd /usr/ports/vsftpd
# make install clean
Step 4. 啟動 MySQL
# /usr/local/share/mysql/mysql.server start
若要在開機時啟動,請將 mysql_enable="YES" 加到 /etc/rc.conf 中
Step 5. 建立虛擬帳號資料庫
# mysql
mysql> create database vsftpd; //建立 vsftpd 使用的資料庫
mysql> use vsftpd; //切換至 vsftpd 資料庫
mysql> create table users(name varchar(20)
binary,passwd varchar(20) binary);
//建立帳號資料表
mysql> insert into users (name,passwd) values
('george',password('123456'));
//新增一個使用者
mysql> grant select on vsftpdvu.users to vsftpdguest@localhost
identified by 'vsftpdguest';
//設定 vsftpd 資料庫的使用權限
Step 6. 修改 /etc/pam.d/ftp
auth required pam_mysql.so user=vsftpdguest passwd=vsftpdguest
host=localhost db=vsftpd table=users usercolumn=name
passwdcolumn=passwd crypt=2
account required pam_mysql.so user=vsftpdguest passwd=vsftpdguest
host=localhost db=vsftpd table=users usercolumn=name
passwdcolumn=passwd crypt=2
- 請將舊有的資料全部刪除,只留這兩行
- 此檔須與資料庫設定的內容吻合
Step 7. 設定 vsftpd (/usr/local/etc/vsftpd.conf)
- 設定檔太長,僅列出部份
guest_enable=YES #是否開放Guest登入
guest_username=vsftpdguest #Guest 對應的系統使用者名稱
local_root=ftp #登入後的根目錄
local_enable=YES #本機使用者是否能登入
write_enable=YES #開放寫入的權限
anon_upload_enable=YES #匿名登入是否可上傳
#(虛擬帳號登入視同匿名登入)
anon_mkdir_write_enable=YES #匿名登入建立目錄與寫入檔案的權限
user_config_dir=/usr/local/etc/userdir #使用者環境設定檔位置 (可有可無)
chroot_list_enable=YES #限定使用者僅可在家目錄下活動
chroot_list_file=/usr/local/etc/vsftpd.chroot_list
#限定使用者僅可在家目錄下活動的設定檔 chroot_list_enable 設為 YES 才生效
anon_umask=022 #匿名上傳後的 umask 設定值
listen=YES #使用 standalone 模式啟動
virtual_use_local_privs=YES #匿名使用者是否與本機使用者權限相同
Step 8. 新增 vsftpdguest 使用者
# adduser //自己加了...
Step 9. 相關檔案的建立
a. 在 vsftpdguest 的家目錄下建立 ftp 的目錄
b. 在 /usr/local/etc 下建立 userdir 的目錄
c. 在 /usr/local/etc/userdir 下產生使用者的設定檔
ex. george 使用者的設定檔為 『george』內容為
local_root=hello
#指定 george 登入後的目錄位置在 /home/vsftpdguest/ftp 下的 hello 目錄
d.建立 /usr/local/etc/vsftpd.chroot_list
其內容為使用者名稱,一個使用者名稱放一行,
在此檔中的使用者只能在自己的家目錄中活動
Step 10. 啟動 vsftpd
# /usr/local/libexec/vsftpd &
後記:
以 inetd 模式啟動 vsftpd
將 vsftpd.conf 中 listen=YES 移除
修改 /etc/inetd.conf
ftp stream tcp nowait root /usr/local/libexec/vsftpd vsftpd
小出鎚
目前測試,還有一個地方有問題:
第一個虛擬帳號並無法切到指定的家目錄,還是會到 ftp 的目錄,之後的 user 則無此問題