一,安裝環境以及安裝的軟件:
1,CentOS release 6.4 (Final) [IP:192.168.1.110]
2,vsftpd-2.2.2-13.el6_6.1.x86_64
3,pam_mysql-0.7-0.12.rc1.el6.x86_64
4,mysql-5.6.16(編譯安裝)
二,在數據庫上創建登錄ftp的賬號和密碼
1,創建對應的database,遠程授權登錄賬號並創建表用來存儲登錄ftp賬號密碼。
mysql>
create
database
vsftpd;
mysql>
grant
select
on
vsftpd.*
to
'vsftpd'
@‘192.168.1.110’ identified
by
'vsftpd'
;
mysql> flush
privileges
;
mysql> use vsftpd;
mysql>
create
table
users (id
int
AUTO_INCREMENT
NOT
NULL
,
name
char
(20)
binary
NOT
NULL
,
password
char
(48)
binary
NOT
NULL
,
primary
key
(id));
2,添加虛擬用戶
mysql>
insert
into
users(
name
,
password
)
values
(
'test'
,
password
(
'test'
));
注意:此處對應的加密方法是基於PASSWORD函數加密後存儲
三,配置vsftpd
1,創建vsftpd通過PAM模塊和mysql認證時所需要的文件:
vim /etc/pam.d/vsftpd.mysql
auth required
/lib64/security/pam_mysql
.so user=vsftpd
passwd
=vsftpd host=192.168.1.110 db=vsftpd table=
users
usercolumn=name passwdcolumn=password crypt=2
account required
/lib64/security/pam_mysql
.so user=vsftpd
passwd
=vsftpd host=192.168.1.110 db=vsftpd table=
users
usercolumn=name passwdcolumn=password crypt=2
此處可能會遇到的問題:
1)pam_mysql.so基於unix sock連接mysql服務器時可能會出問題,,授權一個遠程連接的mysql並訪問vsftpd數據庫的用戶會避免此問題出現。
通過查看日誌文件/var/log/secure可能出現如下問題:server vsftpd[20453]: pam_mysql - MySQL error (Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
2)crypt=Num中 Num=0:表示不加密;Num=1:表示incrypt;Num=2:表示基於mysql的PASSWORD函數;Num=3:表示基於MD5認證。
此處創建虛擬用戶時基於PASSWORD函數,所以crypt=2;
否則通過查看日誌文件/var/log/secure可能出現如下問題:vsftpd[23068]: pam_mysql - SELECT returned no result. 密碼匹配不正確,查詢不到結果。
2,修改vsftpd的配置文件,使其適應mysql認證,建立虛擬用戶映射的系統用戶及對應的目錄
useradd -s /sbin/nologin -d /var/homeftp vuser
chmod go+rx /var/homeftp #確保屬組用戶和其他用戶對vuser目錄有r,x權限
確保/etc/vsftpd.conf中已經啓用了以下選項
local_enable=YES #此處必須爲YES,否則登錄失敗
write_enable=YES
chroot_local_user=YES #將用戶禁錮在其家目錄中
添加以下選項
guest_enable=YES #啓用後所有的非匿名登入者都視爲guest_username定義的用戶登錄
guest_username=vuser #虛擬用戶通過映射到vuser用戶登錄
user_config_dir=/etc/vsftpd/vusers_config #虛擬用戶的配置文件在此目錄下定義
pam_service_name=vsftpd.mysql #pam模塊連接mysql時認證文件
3,配置虛擬用戶具有不同的訪問權限
vsftpd可以在配置文件目錄中爲每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名和虛擬用戶的用戶名必須相同。配置文件目錄可以是任意未使用目錄,需要在vsftpd.conf中指定其路徑及名稱。
1)創建所需要目錄,併爲虛擬用戶提供配置文件
# mkdir /etc/vsftpd/vusers_config/
# cd /etc/vsftpd/vusers_config/
# touch test
2)配置虛擬用戶的訪問權限
虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。比如,如果需要讓test用戶具有上傳文件的權限,可以修改/etc/vsftpd/vusers_config/test文件,在裏面添加anon_upload_enable=YES
選項如下:
anon_upload_enable={YES|NO} #虛擬用戶是否具有上傳權限
anon_mkdir_write_enable={YES|NO} #虛擬用戶是否具有創建權限
anon_other_write_enable={YES|NO} #虛擬用戶是否具有除上傳,創建之外的其他權限
anon_umask=022 #虛擬用戶上傳文件權限(文件:666-022)(目錄:777-022)
遇到的問題:
因爲vsftp默認情況是工作在passive 模式下,連接進去後,敲命令後,出現227 然後卡在那邊。
這是因爲iptables把服務器開發給客戶端的端口禁了,可以用passive關閉被動模式,進入主動模式。
還有一種方法就是在vsftpd.conf中增加分配傳輸數據的隨機端口:
pasv_min_port=50000
pasv_max_port=50999
然後增加iptables規則:
iptables -I INPUT 3 -p tcp --dport 50000:50999 -j ACCEPT