|
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,编制者的初衷是代码的安全。
特性
1、它是一个安全、高速、稳定的FTP服务器;
2、它可以做基于多个IP的虚拟FTP主机服务器;
3、匿名服务设置十分方便;
4、匿名FTP的根目录不需要任何特殊的目录结构,或系统程序或其它的系统文件;
5、不执行任何外部程序,从而减少了安全隐患;
6、支持虚拟用户,并且每个虚拟用户可以具有独立的属性配置;
7、可以设置从inetd中启动,或者独立的FTP服务器两种运行方式;
8、支持多种认证方式
9、支持带宽限制;
本文介绍通过pam.d模块基于mysql现实vsftp虚拟用户认证
安装环境
先安装、配置vsftp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| [iyunv@vsftp ~]# yum install -y vsftpd
[iyunv@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 #匿名用户共享文件目录
|
查看默认配置文件启用选项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| [iyunv@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
添加测试用户
1
2
3
4
5
6
7
8
9
| ls_recurse_enable=YES
[iyunv@vsftp ~]# useradd -s /sbin/nologin test #添加测试用户
[iyunv@vsftp ~]# password test
[iyunv@vsftp ~]# touch /home/test/abc.txt #下创建个测试文件
[iyunv@vsftp ~]#service vsftpd start
[iyunv@vsftp ~]# lftp test@192.168.0.11
lftp test@192.168.0.11:/> ls
-rw-r--r-- 1 0 0 0 Sep 29 01:44 abc.txt
#test账户可用。
|
在本地上安装msyql-devel包、pam_mysql包
1
| [iyunv@vsftp vsftpd]# yum install -y mysql-devel pam_mysql
|
在192.168.0.55mysql上给vsftp授权
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| MariaDB [(none)]> create database vsftpd;
MariaDB [(none)]> grant all on vsftpd.* to vsftpd@192.168.0.55 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
1
2
3
4
5
6
7
8
9
10
11
12
13
| [iyunv@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家目录读写权限。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| root@vsftp vsftpd]# chmod 777 /home/test/
[iyunv@vsftp vsftpd]# cd /etc/
[iyunv@vsftp etc]# lftp tom@192.168.0.11 #tom不是本地用户,是在mysql创建的一个虚拟用户
Password:
lftp tom@192.168.0.11:/> ls
-rw-r--r-- 1 0 0 0 Sep 29 01:44 abc.txt
lftp tom@192.168.0.11:~> put issue
47 bytes transferred
lftp tom@192.168.0.11:/> ls
-rw-r--r-- 1 0 0 0 Sep 29 01:44 abc.txt
-rw------- 1 500 500 47 Sep 29 02:31 issue
[iyunv@vsftp etc]# cd /home/test/
[iyunv@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
|
|
|