本文介紹了如何使用vsftp來(lái)架設(shè)一個(gè)快速、高效、安全的ftp服務(wù)器,使用虛擬用戶以及使用db庫(kù)和mysql保存虛擬用戶。
VSFTPD是一種在UNIX/Linux中非常安全且快速的FTP服務(wù)器,目前已經(jīng)被許多大型站點(diǎn)所采用。VSFTPD支持將用戶名和口令保存在數(shù)據(jù)庫(kù)文件或數(shù)據(jù)庫(kù)服務(wù)器中。VSFTPD稱這種形式的用戶為虛擬用戶。
相對(duì)于FTP的本地(系統(tǒng))用戶來(lái)說(shuō),虛擬用戶只是FTP服務(wù)器的專有用戶,虛擬用戶只能訪問(wèn)FTP服務(wù)器所提供的資源,這大大增強(qiáng)系統(tǒng)本身的安全性。相對(duì)于匿名用戶而言,虛擬用戶需要用戶名和密碼才能獲取FTP服務(wù)器中的文件,增加了對(duì)用戶和下載的可管理性。對(duì)于需要提供下載服務(wù),但又不希望所有人都可以匿名下載;既需要對(duì)下載用戶進(jìn)行管理,又考慮到主機(jī)安全和管理方便的FTP站點(diǎn)來(lái)說(shuō),虛擬用戶是一種極好的解決方案。
本文介紹在centos上如何將VSFTPD的虛擬用戶名和密碼保存在MySQL數(shù)據(jù)庫(kù)服務(wù)器中。
1)安裝vsftp
# tar -zxvf vsftpd-2.0.6.tar.gz# cd vsftpd-2.0.6
安裝步驟可以參照目錄下INSTALL文件
# mkdir /usr/share/empty/# mkdir /var/ftp/# useradd -d /var/ftp ftp# chown root.root /var/ftp# chmod og-w /var/ftp# make;make install# cp vsftpd /usr/local/sbin/vsftpd# mkdir /usr/local/man# cp vsftpd.conf.5 /usr/local/man/man5# cp vsftpd.8 /usr/local/man/man8# cp RedHat/vsftpd.pam /etc/pam.d/ftp#cp vsftpd.conf /etc
#vi /etc/vsftpd.conf
在最后添加一行
listen=YES
啟動(dòng)vsftp服務(wù)
#/usr/local/sbin/vsftpd &
然后用anonymous或者ftp用戶測(cè)試一下,密碼都為空
允許本地用戶登陸:
#vi /etc/vsftpd.conf
local_enable=YESpam_service_name=ftp
然后新建一個(gè)用戶,重啟一下服務(wù)登陸測(cè)試一下
#killall -HUP vsftpd //重啟vsftpd服務(wù)
禁錮用戶的主目錄:
#touch /etc/vsftpd.chroot_list
a、限制所有用戶不能切換目錄
chroot_local_user=YES
b、設(shè)置指定的用戶不能切換目錄
chroot_local_user=NOchroot_list_enable=YESchroot_list_file=/etc/vsftpd.chroot_list
然后把需要禁錮主目錄的用戶輸入到/etc/vsftpd.chroot_list文件中就可以了
用DB庫(kù)存儲(chǔ)用戶名及密碼
a)建立虛擬用戶口令庫(kù)文件,口令庫(kù)文件中奇數(shù)行設(shè)置用戶名,偶數(shù)行設(shè)置口令
# cat logins.txt
aaa123456bbb123456
b)生成vsftpd的認(rèn)證文件
# db_load -T -t hash -f logins.txt /etc/vsftpd_login.db# chmod 600 /etc/ vsftpd_login.db
c) 建立虛擬用戶所需的PAM配置文件
# cat /etc/pam.d/ftp (把原來(lái)的都注釋掉)
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_loginaccount required /lib/security/pam_userdb.so db=/etc/vsftpd_login
d)建立虛擬用戶及要訪問(wèn)的目錄并設(shè)置相應(yīng)的權(quán)限
# useradd -d /home/ftpsite virtual# chmod 700 /home/ftpsite/
e)在配置文件/etc/vsftpd/vsftpd.conf中添加虛擬用戶的配置內(nèi)容
guest_enable=YESguest_username=virtualpam_service_name=ftp //這行前面已經(jīng)加過(guò)了
然后重啟一下vsftp服務(wù),使用aaa和bbb用戶測(cè)試一下
對(duì)虛擬用戶設(shè)置不同的權(quán)限
#vi /etc/vsftpd/vsftpd.conf
添加用戶配置文件目錄設(shè)置,增加一行
user_config_dir=/etc/vsftpd_user_conf
建立虛擬用戶的配置文件目錄
# mkdir /etc/vsftpd_user_conf
為虛擬用戶建立單獨(dú)的配置文件,用戶配置文件名稱與用戶名相同
# mkdir /etc/vsftpd_user_conf/aaa# mkdir /etc/vsftpd_user_conf/bbbb
每個(gè)FTP虛擬用戶都可以獨(dú)立設(shè)置其權(quán)限和不同的家目錄
#cat /etc/vsftpd_user_conf/aaa
virtual_use_local_privs=YESwrite_enable=YESanon_upload_enable=YESanon_mkdir_write_enable=YESanon_other_write_enable=YESlocal_root=/var/aaa
-----------------------------------
virtual_use_local_privs參數(shù),
當(dāng)該參數(shù)激活(YES)時(shí),虛擬用戶使用與本地用戶相同的權(quán)限。所有虛擬用戶的權(quán)限使用local參數(shù)。
當(dāng)此參數(shù)關(guān)閉(NO)時(shí),虛擬用戶使用與匿名用戶相同的權(quán)限,所有虛擬用戶的權(quán)限使用anon參數(shù)。
這兩者種做法相比,后者更加嚴(yán)格一些,特別是在有寫(xiě)訪問(wèn)的情形下。默認(rèn)情況下此參數(shù)是關(guān)閉的(NO)。
----------------------------------
使用mysql存儲(chǔ)虛擬用戶
a)安裝mysql
# tar -zxvf mysql-5.0.67.tar.gz#cd mysql-5.0.67# ./configure --prefix=/usr/local/mysql#make;make install# cp support-files/my-medium.cnf /etc/my.cnf#useradd mysql#chown -R root.root /usr/local/mysql/
初始化數(shù)據(jù)庫(kù)
# /usr/local/mysql/bin/mysql_install_db#chown -R root.root /usr/local/mysql/# chown -R mysql.mysql /usr/local/mysql/mysql/var# /usr/local/mysql/bin/mysqld_safe --user=mysql &
b)安裝pam_mysql
因?yàn)閙ysql是編譯安裝的,所以在這步可能會(huì)出錯(cuò),做下列的鏈接就可以
#ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql#ln -s /usr/local/mysql/include/mysql /usr/include/mysql#tar -zxvf pam_mysql-0.6.2.tar.gz#cd pam_mysql-0.6.2#./configure --with-mysql=/usr/local/mysql –with-openssl#make;make install#cp /usr/lib/security/pam_mysql.so /lib/security/
c)設(shè)置數(shù)據(jù)庫(kù)
mysql>create database vftp;mysql>use vftp;mysql>create table users(name char(16) binary,passwd char(16) binary);mysql>insert into users (name,passwd) values ('test1','123456');mysql>insert into users (name,passwd) values ('test2','123456');mysql>quit
d)建立pam認(rèn)證所需文件
#vi /etc/pam.d/ftp
添加如下兩行
auth required /lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vftptable=users usercolumn=name passwdcolumn=passwd crypt=0account required /lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vftptable=users usercolumn=name passwdcolumn=passwd crypt=0
注意:
#crypt=0: 明文密碼
#crypt=1: 使用crpyt()函數(shù)(對(duì)應(yīng)SQL數(shù)據(jù)里的encrypt(),encrypt()隨機(jī)產(chǎn)生salt)
#crypt=2: 使用MYSQL中的password()函數(shù)加密
#crypt=3:表示使用md5的散列方式#上面是兩句配置,第一句是以auth開(kāi)始的,第二句以account開(kāi)始的
e)虛擬用戶的配置
vsftpd.conf的配置和用DB庫(kù)存儲(chǔ)用戶名及密碼相同
聯(lián)系客服