VSFTPD是一種在UNIX/Linux中非常安全且快速的FTP服務器
目前已經被許多大型站點所采用
VSFTPD支持將用戶名和口令保存在數據庫文件或數據庫服務器中
VSFTPD稱這種形式的用戶為虛擬用戶
相對於FTP的本地(系統)用戶來說
虛擬用戶只是FTP服務器的專有用戶
虛擬用戶只能訪問FTP服務器所提供的資源
這大大增強系統本身的安全性
相對於匿名用戶而言
虛擬用戶需要用戶名和密碼才能獲取FTP服務器中的文件
增加了對用戶和下載的可管理性
對於需要提供下載服務
但又不希望所有人都可以匿名下載
既需要對下載用戶進行管理
又考慮到主機安全和管理方便的FTP站點來說
虛擬用戶是一種極好的解決方案
本文介紹在RedHat Linux
上如何將VSFTPD的虛擬用戶名和密碼保存在MySQL數據庫服務器中
一VSFTPD的安裝 目前
VSFTPD的最新版本是
版
官方下載地址為ftp:///users/cevans/vsftpd
tar
gz
在安裝前
需要先做以下准備工作
VSFTPD默認配置中需要
nobody
用戶
在系統中添加此用戶
如果用戶已經存在
useradd命令有相應提示
[root@hpe
root]# useradd nobody
useradd: user nobody exists
VSFTPD默認配置中需要
/usr/share/empty
目錄
在系統中此目錄
如果目錄已經存在
mkdir命令有相應提示
[root@hpe
root]# mkdir /usr/share/empty/
mkdir: cannot create directory
/usr/share/empty
: File exists
VSFTPD提供匿名FTP服務時
需要
ftp
用戶和一個有效的匿名目錄
[root@hpe
root]# mkdir /var/ftp/
[root@hpe
root]# useradd
d /var/ftp ftp
接下來的操作對於ftp用戶是否已經存在都是有用的
[root@hpe
root]# chown root
root /var/ftp
[root@hpe
root]# chmod og
w /var/ftp
以上准備工作完成後
我們就可以開始編譯源代碼了
假定我們下載的vsftpd
tar
gz在/root目錄
執行以下命令
[root@hpe
root]# tar zxvf vsftpd
tar
gz
[root@hpe
root]# cd vsftpd
[root@hpe
vsftpd
]# make
[root@hpe
vsftpd
]# make install
上面的
make install
命令將編譯好的二進制文件
手冊等復制到相應目錄
在RHL
上
可能需要手動執行以下復制
[root@hpe
vsftpd
]# cp vsftpd /usr/local/sbin/vsftpd
[root@hpe
vsftpd
]# cp nf
/usr/local/share/man/man
[root@hpe
vsftpd
]# cp vsftpd
/usr/local/share/man/man
接下來
我們復制一個簡單的配置文件作為基礎供後面修改
[root@hpe
vsftpd
]# cp nf /etc
[root@hpe
vsftpd
]# cp RedHat/vsftpd
pam /etc/pam
d/ftp
復制PAM驗證文件
以允許本地用戶登錄VSFTPD
[root@hpe
vsftpd
]# cp RedHat/vsftpd
pam /etc/pam
d/ftp
二創建guest用戶 VSFTPD采用PAM方式驗證虛擬用戶
由於虛擬用戶的用戶名/口令被單獨保存
因此在驗證時
VSFTPD需要用一個系統用戶的身份來讀取數據庫文件或數據庫服務器以完成驗證
這就是VSFTPD的guest用戶
這正如同匿名用戶也需要有一個系統用戶ftp一樣
當然
我們也可以把guest用戶看成是虛擬用戶在系統中的代表
下面在系統中添加vsftpdguest用戶
作為VSFTPD的guest
[root@hpe
vsftpd
]# useradd vsftpdguest
當虛擬用戶登錄後
所在的位置為vsftpdguest的自家目錄/home/vsftpdguest
如果要讓虛擬用戶登錄到/var/ftp等其他目錄
修改vsftpdguest的自家目錄即可
三設置VSFTPD配置文件 在/etc/nf文件中
加入以下選項
guest_enable=YES
guest_username=vsftpdguest
然後執行以下命令
讓VSFTPD在後台運行
[root@hpe
vsftpd
]# /usr/local/sbin/vsftpd &
四將虛擬用戶保存在MySQL數據庫服務器中 我們建立數據庫vsftpdvu
表users
字段name和passwd用於保存虛擬用戶的用戶名和口令
同時增加兩個虛擬用戶xiaotong和xiaowang
[root@hpe
vsftpd
]# mysql
p
mysql>create database vsftpdvu;
mysql>use vsftpdvu;
mysql>create table users(name char(
) binary
passwd char(
) 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@hpe
vsftpd
]# mysql
u root mysql
p
mysql>grant select on vsftpdvu
users to vsftpdguest@localhost identified by
i
serial
;
mysql>quit
如果要驗證剛才的操作是否成功可以執行下面命令
[root@hpe
vsftpd]#mysql
u vsftpdguest
pi
serial
vsftpdvu
mysql>select * from users;
如果成功
將會列出xiaotong
xiaowang和加密後的密碼
五設置MySQL的PAM驗證 這裡我們要用到一個利用mysql進行pam驗證的開源項目(
mysql/)
首先從網站下載它的程序包pam_myql
tar
gz
復制到/root目錄中
在編譯安裝之前
要確保mysql
devel的RPM包已經安裝在你的機器上
如果沒有請從RHL安裝光盤中安裝該包
然後
執行以下命令
[root@hpe
root]#tar xvzf pam_mysql
tar
gz
[root@hpe
root]#cd pam_mysql
[root@hpe
pam_mysql]#make
[root@hpe
pam_mysql]#make install
make install這一步可能會出現錯誤
那只好手動將該目錄下生成的pam_mysql
o復制到/lib/security目錄下
接下來
我們要設置vsftpd的PAM驗證文件
打開/etc/pam
d/ftp文件
加入以下內容
auth required pam_mysql
o user=vsftpdguest passwd=i
serial
host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=
account required pam_mysql
o user=vsftpdguest passwd=i
serial
host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=
上面涉及到的參數
只要對應前面數據庫的設置就可以明白它們的含義
這裡需要說明的是crypt參數
crypt表示口令字段中口令的加密方式
crypt=
口令以明文方式(不加密)保存在數據庫中
crypt=
口令使用UNIX系統的DES加密方式加密後保存在數據庫中
crypt=
口令經過MySQL的password()函數加密後保存
六進一步的虛擬用戶設置 經過以上的步驟
虛擬用戶就可以正常使用了
這裡介紹進一步的虛擬用戶設置
首先
介紹虛擬用戶的權限設置
VSFTPD
新添了virtual_use_local_privs參數
當該參數激活(YES)時
虛擬用戶使用與本地用戶相同的權限
當此參數關閉(NO)時
虛擬用戶使用與匿名用戶相同的權限
這也就是VSFTPD
之前版本對虛擬用戶權限的處理方法
這兩者種做法相比
後者更加嚴格一些
特別是在有寫訪問的情形下
默認情況下此參數是關閉的(NO)
當virtual_use_local_privs=YES時
只需設置write_enable=YES
虛擬用戶就可以就擁有寫權限
而virtual_use_local_privs=NO時
對虛擬用戶權限的設置就更多一些更嚴格一些
控制虛擬用戶浏覽目錄
如果讓用戶不能浏覽目錄
但仍可以對文件操作
那麼需要執行以下二個步驟
一
配置文件中
anon_world_readable_only=YES
二
虛擬用戶目錄的權限改為只能由vsftpdguest操作
[root@hpe
root]# chown vsftpdguest
vsftpdguest /home/vsftpdguest
[root@hpe
root]# chmod
/home/vsftpdguest
允許虛擬用戶上傳文件
write_enable=YES
anon_upload_enable=YES
允許虛擬用戶修改文件名和刪除文件
anon_other_write_enable=YES
由於以上選項的設置同樣會對匿名用戶生效
如果不想匿名用戶趁機擁有同樣的權限
最好是禁止匿名用戶登錄
其次
由於虛擬用戶在系統中是vsftpdguest身份
所以可以訪問到系統的其他目錄
為了更加安全
我們可以將虛擬用戶限制在自家目錄下
有兩種做法
一
在配置文件中增加以下選項
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd
chroot_list
然後
在/etc/vsftpd
chroot_list文件中加入虛擬用戶名xiaotong和xiaowang
第二種做法
在配置文件中修改chroot_local_user=YES
經過修改後
虛擬用戶登錄後其根目錄就限制在/home/vsftpdguest下
無法訪問其他目錄
七虛擬用戶的個人目錄 大家可以發現
無論是哪個虛擬用戶
登錄後所在的目錄都是/home/vsftpdguest
即都是guest_username用戶的自家目錄
下面
介紹如何為每個虛擬用戶建立自家目錄
首先
在主配置文件中加入以下選項
user_config_dir=/etc/vsftpd/vsftpd_user_conf
然後
生成/etc/vsftpd/vsftpd_user_conf目錄
並在該目錄下建立與特定虛擬用戶同名的文件
[root@hpe
root]# mkdir /etc/vsftpd/vsftpd_user_conf
[root@hpe
root]# cd /etc/vsftpd/vsftpd_user_conf
From:http://tw.wingwit.com/Article/program/MySQL/201311/29511.html