VSFTPD是一種在UNIX/Linux中非常安全且快速的FTP伺服器,目前已經被許多大型網站所採用。VSFTPD支援將使用者名稱和口令儲存在資料庫檔案或資料庫伺服器中。VSFTPD稱這種形式的使用者為虛擬使用者。相對於FTP的本地(系統)使用者來說,虛擬使用者只是FTP伺服器的專有使用者,虛擬使用者只能訪問FTP伺服器所提供的資源,這大大增強系統本身的安全性。相對於匿名使用者而言,虛擬使用者需要使用者名稱和密碼才能擷取FTP伺服器中的檔案,增加了對使用者和下載的可管理性。對於需要提供下載服務,但又不希望所有人都可以匿名下載;既需要對下載使用者進行管理,又考慮到主機安全和管理方便的FTP網站來說,虛擬使用者是一種極好的解決方案。本文介紹在RedHat Linux 9上如何將VSFTPD的虛擬使用者名稱和密碼儲存在MySQL資料庫伺服器中。
一、VSFTPD的安裝
目前,VSFTPD的最新版本是1.2.0版。官方下載地址為ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.2.0.tar.gz。在安裝前,需要先做以下準備工作:
VSFTPD預設配置中需要“nobody”使用者。在系統中添加此使用者,如果使用者已經存在,useradd命令有相應提示。
[root@hpe45 root]# useradd nobody
useradd: user nobody exists
VSFTPD預設配置中需要“/usr/share/empty”目錄。在系統中此目錄,如果目錄已經存在,mkdir命令有相應提示。
[root@hpe45 root]# mkdir /usr/share/empty/
mkdir: cannot create directory '/usr/share/empty': File exists
VSFTPD提供匿名FTP服務時,需要“ftp”使用者和一個有效匿名目錄。
[root@hpe45 root]# mkdir /var/ftp/
[root@hpe45 root]# useradd -d /var/ftp ftp
接下來的操作對於ftp使用者是否已經存在都是有用的。
[root@hpe45 root]# chown root.root /var/ftp
[root@hpe45 root]# chmod og-w /var/ftp
以上準備工作完成後,我們就可以開始編譯原始碼了。假定我們下載的vsftpd-1.2.0.tar.gz在/root目錄,執行以下命令:
[root@hpe45 root]# tar zxvf vsftpd-1.2.0.tar.gz
[root@hpe45 root]# cd vsftpd-1.2.0
[root@hpe45 vsftpd-1.2.0]# make
[root@hpe45 vsftpd-1.2.0]# make install
上面的“make install”命令將編譯好的二進位檔案、手冊等複製到相應目錄。在RHL9上,可能需要手動執行以下複製:
[root@hpe45 vsftpd-1.2.0]# cp vsftpd /usr/local/sbin/vsftpd
[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf.5 /usr/local/share/man/man5
[root@hpe45 vsftpd-1.2.0]# cp vsftpd.8 /usr/local/share/man/man8
接下來,我們複製一個簡單的設定檔作為基礎供後面修改。
[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf /etc
[root@hpe45 vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp
複製PAM驗證檔案,以允許本機使用者登入VSFTPD。
[root@hpe45 vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp
二、建立guest使用者
VSFTPD採用PAM方式驗證虛擬使用者。由於虛擬使用者的使用者名稱/口令被單獨儲存,因此在驗證時,VSFTPD需要用一個系統使用者的身份來讀取資料庫檔案或資料庫伺服器以完成驗證,這就是VSFTPD的guest使用者。這正如同匿名使用者也需要有一個系統使用者ftp一樣。當然,我們也可以把guest使用者看成是虛擬使用者在系統中的代表。下面在系統中添加vsftpdguest使用者,作為VSFTPD的guest。
[root@hpe45 vsftpd-1.2.0]# useradd vsftpdguest
當虛擬使用者登入後,所在的位置為vsftpdguest的自家目錄/home/vsftpdguest。如果要讓虛擬使用者登入到/var/ftp等其他目錄,修改vsftpdguest的自家目錄即可。
三、設定VSFTPD設定檔
在/etc/vsftpd.conf檔案中,加入以下選項:
guest_enable=YES
guest_username=vsftpdguest
然後執行以下命令,讓VSFTPD在後台運行:
[root@hpe45 vsftpd-1.2.0]# /usr/local/sbin/vsftpd &
四、將虛擬使用者儲存在MySQL資料庫伺服器中
我們建立資料庫vsftpdvu,表users,欄位name和passwd用於儲存虛擬使用者的使用者名稱和口令,同時增加兩個虛擬使用者xiaotong和xiaowang。
[root@hpe45 vsftpd-1.2.0]# mysql -p
mysql>create database vsftpdvu;
mysql>use vsftpdvu;
mysql>create table users(name char(16) binary,passwd char(16) binary);
mysql>insert into users (name,passwd) values ('xiaotong',password('qqmywife'));
mysql>insert into users (name,passwd) values ('xiaowang',password('ttmywife'));
mysql>quit
然後,授權vsftpdguest可以讀vsftpdvu資料庫的users表。執行以下命令:
[root@hpe45 vsftpd-1.2.0]# mysql -u root mysql -p
mysql>grant select on vsftpdvu.users to vsftpdguest@localhost identified by 'i52serial0';
mysql>quit
如果要驗證剛才的操作是否成功可以執行下面命令:
[root@hpe45 vsftpd]#mysql -u vsftpdguest -pi52serial0 vsftpdvu
mysql>select * from users;
如果成功,將會列出xiaotong、xiaowang和加密後的密碼
五、設定MySQL的PAM驗證
這裡我們要用到一個利用mysql進行pam驗證的開源項目(http://sourceforge.net/projects/pam-mysql/)。首先從網站下載它的程式包pam_myql-0.5.tar.gz,複製到/root目錄中。在編譯安裝之前,要確保mysql-devel的RPM包已經安裝在你的機器上,如果沒有請從RHL安裝光碟片中安裝該包。然後,執行以下命令:
[root@hpe45 root]#tar xvzf pam_mysql-0.5.tar.gz
[root@hpe45 root]#cd pam_mysql
[root@hpe45 pam_mysql]#make
[root@hpe45 pam_mysql]#make install