VSFTP是一個基於GPL發佈的類Unix系統上使用的FTP服務器軟件,編制者的初衷是代碼的安全。
特性
1、它是一個安全、高速、穩定的FTP服務器;
2、它可以做基於多個IP的虛擬FTP主機服務器;
3、匿名服務設置十分方便;
4、匿名FTP的根目錄不需要任何特殊的目錄結構,或系統程序或其它的系統文件;
5、不執行任何外部程序,從而減少了安全隱患;
6、支持虛擬用戶,並且每個虛擬用戶可以具有獨立的屬性配置;
7、可以設置從inetd中啓動,或者獨立的FTP服務器兩種運行方式;
8、支持多種認證方式
9、支持帶寬限制;
本文介紹通過pam.d模塊基於mysql現實vsftp虛擬用戶認證
安裝環境
先安裝、配置vsftp
[root@vsftp ~]# yum install -y vsftpd [root@vsftp ~]# rpm -ql vsftpd /etc/logrotate.d/vsftpd #vsftp日誌輪詢 /etc/pam.d/vsftpd #pam.d的vsftpd /etc/rc.d/init.d/vsftpd #啓動服務腳本 /etc/vsftpd /etc/vsftpd/ftpusers #用戶控制文件 /etc/vsftpd/user_list #用戶控制文件 /etc/vsftpd/vsftpd.conf #配置文件 /etc/vsftpd/vsftpd_conf_migrate.sh /usr/sbin/vsftpd /usr/share/doc/vsftpd-2.2.2 ##此處省略幫助文件## /usr/share/doc/vsftpd-2.2.2/TUNING /usr/share/doc/vsftpd-2.2.2/vsftpd.xinetd /usr/share/man/man5/vsftpd.conf.5.gz /usr/share/man/man8/vsftpd.8.gz /var/ftp /var/ftp/pub #匿名用戶共享文件目錄
查看默認配置文件啓用選項
[root@vsftp vsftpd]# cat vsftpd.conf |grep -v "^#" anonymous_enable=YES #允許匿名用戶 local_enable=YES #允許本地用戶 write_enable=YES #允許本地用戶可寫 local_umask=022 #本地創建文件的umask dirmessage_enable=YES #創建目錄時消息提示 xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES #監聽端口 pam_service_name=vsftpd #pam模塊 userlist_enable=YES #用戶控制 tcp_wrappers=YES
其他一些重要選項
anonymous_enable=YES 開始匿名用戶
anon_upload_enable=YES 允許匿名用戶上傳文件
anon_mkdir_write_enable=YES 允許匿名用戶創建目錄
anon_other_write_enable=YES 允許匿名用戶其他權限,如刪除,重命名文件
chown_uploads=YES #是否改變屬主
chown_username=user #上傳文件修改成屬主
chroot_local_user={Yes|No} #限制本地用戶禁錮其在家目錄中
chroot_list_enable={Yes|No} #限制chroot_list列表中用戶禁錮其在家目錄中
chroot_list=/etc/vsftp/chroot_list #用於指定用戶列表文件,該文件用於控制哪些用戶可以切換到用戶家目錄的上級目錄
xferlog_file=/var/log/vsftp.log # 配置日誌目錄
ftpd_banner=Welcome to blah FTP service. #登錄提示信息
banned_file=/etc/vsftpd/banned_file
ls_recurse_enable=YES #用戶是否能夠使用ls命令
連接限制
max_clients 最大併發鏈接數
max_per_ip 每IP最大併發數
限制速率
anon_max_rate
local_max_rate
上傳文件umask
anon_umask 022
local_umask 022
虛擬用戶設置
guest_enable= YES/NO #啓用虛擬用戶。默認值爲NO。
guest_username=ftp #這裏用來映射虛擬用戶。默認值爲ftp
user_config_dir=/etc/vsftpd/vusers_config #爲虛擬用戶提供配置文件
配置文件裏面啓用下面選項
ls_recurse_enable=YES
添加測試用戶
ls_recurse_enable=YES [root@vsftp ~]# useradd -s /sbin/nologin test #添加測試用戶 [root@vsftp ~]# password test [root@vsftp ~]# touch /home/test/abc.txt #下創建個測試文件 [root@vsftp ~]#service vsftpd start [root@vsftp ~]# lftp [email protected] lftp [email protected]:/> ls -rw-r--r-- 1 0 0 0 Sep 29 01:44 abc.txt #test賬戶可用。
在本地上安裝msyql-devel包、pam_mysql包
[root@vsftp vsftpd]# yum install -y mysql-devel pam_mysql
在192.168.0.55mysql上給vsftp授權
MariaDB [(none)]> create database vsftpd; MariaDB [(none)]> grant all on vsftpd.* to [email protected] identified by 'www.magedu.com'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> use vsftpd; MariaDB [vsftpd]> create table users ( id int AUTO_INCREMENT NOT NULL, name char(20) binary NOT NULL, password char(48) binary NOT NULL, primary key(id) ); MariaDB [vsftpd]> insert into users(name,password) values('tom',password('magedu')); MariaDB [vsftpd]> insert into users(name,password) values('test',password('magedu')); MariaDB [vsftpd]> show tables; +------------------+ | Tables_in_vsftpd | +------------------+ | users | +------------------+ 1 row in set (0.03 sec)
回到vsftpd主機,查看是否能夠鏈接到mysql
[root@vsftp vsftpd]# mysql -uvsftpd -h192.168.0.55 -p Enter password: mysql> use vsftpd; mysql> select * from users; +----+---------+-------------------------------------------+ | id | name | password | +----+---------+-------------------------------------------+ | 1 | tom | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 | | 2 | test | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 | +----+---------+-------------------------------------------+ 4 rows in set (0.01 sec)
已OK
vi /etc/pam.d/vsftpd.mysql #添加如下兩行
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=192.168.0.55 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=192.168.0.55 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
再次編譯配置文件/etc/vsftpd/vsftpd.conf
確保下面選項是OK
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
pam_service_name=vsftpd.mysql
vi /etc/vsftpd/vusers_config/tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
給test家目錄授權,有些虛擬用戶都會到test家目錄執行讀寫,所以要給test家目錄讀寫權限。
root@vsftp vsftpd]# chmod 777 /home/test/ [root@vsftp vsftpd]# cd /etc/ [root@vsftp etc]# lftp [email protected] #tom不是本地用戶,是在mysql創建的一個虛擬用戶 Password: lftp [email protected]:/> ls -rw-r--r-- 1 0 0 0 Sep 29 01:44 abc.txt lftp [email protected]:~> put issue 47 bytes transferred lftp [email protected]:/> ls -rw-r--r-- 1 0 0 0 Sep 29 01:44 abc.txt -rw------- 1 500 500 47 Sep 29 02:31 issue [root@vsftp etc]# cd /home/test/ [root@vsftp test]# ll total 4 -rw-r--r-- 1 root root 0 Sep 29 09:44 abc.txt -rw------- 1 test test 47 Sep 29 10:31 issue #tom用戶以test身份執行put