本文介紹了如何使用vsftp來(lái)架設一個(gè)快速、高效、安全的ftp服務(wù)器,使用虛擬用戶(hù)以及使用db庫和mysql保存虛擬用戶(hù)。
VSFTPD是一種在UNIX/Linux中非常安全且快速的FTP服務(wù)器,目前已經(jīng)被許多大型站點(diǎn)所采用。VSFTPD支持將用戶(hù)名和口令保存在數據庫文件或數據庫服務(wù)器中。VSFTPD稱(chēng)這種形式的用戶(hù)為虛擬用戶(hù)。
相對于FTP的本地(系統)用戶(hù)來(lái)說(shuō),虛擬用戶(hù)只是FTP服務(wù)器的專(zhuān)有用戶(hù),虛擬用戶(hù)只能訪(fǎng)問(wèn)FTP服務(wù)器所提供的資源,這大大增強系統本身的安全性。相對于匿名用戶(hù)而言,虛擬用戶(hù)需要用戶(hù)名和密碼才能獲取FTP服務(wù)器中的文件,增加了對用戶(hù)和下載的可管理性。對于需要提供下載服務(wù),但又不希望所有人都可以匿名下載;既需要對下載用戶(hù)進(jìn)行管理,又考慮到主機安全和管理方便的FTP站點(diǎn)來(lái)說(shuō),虛擬用戶(hù)是一種極好的解決方案。
本文介紹在centos上如何將VSFTPD的虛擬用戶(hù)名和密碼保存在MySQL數據庫服務(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用戶(hù)測試一下,密碼都為空
允許本地用戶(hù)登陸:
#vi /etc/vsftpd.conf
local_enable=YESpam_service_name=ftp
然后新建一個(gè)用戶(hù),重啟一下服務(wù)登陸測試一下
#killall -HUP vsftpd //重啟vsftpd服務(wù)禁錮用戶(hù)的主目錄:
#touch /etc/vsftpd.chroot_lista、限制所有用戶(hù)不能切換目錄
chroot_local_user=YESb、設置指定的用戶(hù)不能切換目錄
chroot_local_user=NOchroot_list_enable=YESchroot_list_file=/etc/vsftpd.chroot_list然后把需要禁錮主目錄的用戶(hù)輸入到/etc/vsftpd.chroot_list文件中就可以了
用DB庫存儲用戶(hù)名及密碼
a)建立虛擬用戶(hù)口令庫文件,口令庫文件中奇數行設置用戶(hù)名,偶數行設置口令
# cat logins.txt
aaa123456bbb123456
b)生成vsftpd的認證文件
# db_load -T -t hash -f logins.txt /etc/vsftpd_login.db# chmod 600 /etc/ vsftpd_login.db
c) 建立虛擬用戶(hù)所需的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)建立虛擬用戶(hù)及要訪(fǎng)問(wèn)的目錄并設置相應的權限
# useradd -d /home/ftpsite virtual# chmod 700 /home/ftpsite/
e)在配置文件/etc/vsftpd/vsftpd.conf中添加虛擬用戶(hù)的配置內容
guest_enable=YESguest_username=virtualpam_service_name=ftp //這行前面已經(jīng)加過(guò)了
然后重啟一下vsftp服務(wù),使用aaa和bbb用戶(hù)測試一下
對虛擬用戶(hù)設置不同的權限
#vi /etc/vsftpd/vsftpd.conf
添加用戶(hù)配置文件目錄設置,增加一行
user_config_dir=/etc/vsftpd_user_conf
建立虛擬用戶(hù)的配置文件目錄
# mkdir /etc/vsftpd_user_conf
為虛擬用戶(hù)建立單獨的配置文件,用戶(hù)配置文件名稱(chēng)與用戶(hù)名相同
# mkdir /etc/vsftpd_user_conf/aaa# mkdir /etc/vsftpd_user_conf/bbbb
每個(gè)FTP虛擬用戶(hù)都可以獨立設置其權限和不同的家目錄
#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參數,
當該參數激活(YES)時(shí),虛擬用戶(hù)使用與本地用戶(hù)相同的權限。所有虛擬用戶(hù)的權限使用local參數。
當此參數關(guān)閉(NO)時(shí),虛擬用戶(hù)使用與匿名用戶(hù)相同的權限,所有虛擬用戶(hù)的權限使用anon參數。
這兩者種做法相比,后者更加嚴格一些,特別是在有寫(xiě)訪(fǎng)問(wèn)的情形下。默認情況下此參數是關(guān)閉的(NO)。
----------------------------------
使用mysql存儲虛擬用戶(hù)
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/
初始化數據庫
# /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
因為mysql是編譯安裝的,所以在這步可能會(huì )出錯,做下列的鏈接就可以
#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)設置數據庫
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認證所需文件
#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()函數(對應SQL數據里的encrypt(),encrypt()隨機產(chǎn)生salt)
#crypt=2: 使用MYSQL中的password()函數加密
#crypt=3:表示使用md5的散列方式#上面是兩句配置,第一句是以auth開(kāi)始的,第二句以account開(kāi)始的
e)虛擬用戶(hù)的配置
vsftpd.conf的配置和用DB庫存儲用戶(hù)名及密碼相同
聯(lián)系客服