配置vsftpd

----------------------------------------------------------------------------------------------------

vsftpd的配置文件:

用户认证配置文件:/etc/pam.d/vsftpd

服务脚本:/etc/rc.d/init.d/vsftpd

配置文件目录:/etc/vsftpd/

/etc/vsftpd/vsftpd.conf    ###主配置文件

/etc/vsftpd/ftpusers    ###不能访问FTP的用户列表

ftpusers列表内的用户不能访问FTP:这是vsftpd服务在启动后已经决定的,只要在这个列表里面用户都不能访问FTP,没有其它的开关可以控制

/etc/vsftpd/user_list    ###不能访问FTP的用户列表

user_list列表内的用户能否访问FTP,取决于主配置文件vsftpd.conf内定义的两个开关

userlist_enable={YES|NO}

userlist_deny={YES|NO}

匿名用户(映射为ftp用户)共享资源位置:/var/ftp

系统用户通过ftp访问的资源的位置:用户自己的家目录

虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射成为的系统用户的家目录

匿名用户的配置:

anonymous_enable=YES

anon_upload_enable=YES    ###是否允许匿名用户上传文件

anon_mkdir_write_enable=YES    ###是否允许匿名用户创建目录

anon_ohter_write_enable=YES    ###是否允许匿名用户删除文件

系统用户的配置:

local_enable=YES

write_enable=YES    ###是否允许本地用户具有写权限

local_umask=022    ###控制本地用户上传文件后的默认权限

禁锢所有的ftp本地用户于其家目录中:

chroot_local_user=YES

禁锢文件中指定的ftp本地用户于其家目录中:

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

目录消息(可在某个目录下创建.massage文件,填入消息,当用户切换至此目录时会出现提示)

dirmessage_enable=YES

日志:

xferlog_enable=YES    ###是否开启FTP的传输日志

xferlog_std_format=YES    ###传输日志是否使用标准格式

xferlog_file=/var/log/xferlog    ###指定日志文件路径

改变上传文件的属主:

chown_uploads=YES    ###是否改变上传文件的属主

chown_username=whoever    ###指定用户名

vsftpd使用pam完成用户认证,指明其用到的pam配置文件:(/etc/pam.d目录下)

pam_service_name=vsftpd

是否启用控制用户登录的列表文件

userlist_enable=YES

userlist_deny=YES|NO

文件:/etc/vsftpd/user_list

如果userlist_enable=NO,表示无论此表内或表外的本地用户均能登录访问ftp

如果userlist_deny=NO,表示只允许此表内的本地用户登录访问ftp,默认值为YES

超时相关:

idle_session_timeout=600    ###空闲会话的超时时长

data_connection_timeout=120    ###数据连接的超时时长

连接限制:

max_clients   ###最大并发连接数

max_per_ip   ###每个IP可同时发起的并发请求数

 

 

传输速率:

anon_max_rate   ###匿名用户的最大传输速率, 单位是“字节/秒”

local_max_rate   ###本地用户的最大传输速率, 单位是“字节/秒”

 

 

虚拟用户:

所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录;

 

各虚拟用户可被赋予不同的访问权限;

通过匿名用户的权限控制参数进行指定;

 

虚拟用户账号的存储方式:

1、文件形式:编辑文件

奇数行为用户名

偶数行为密码

 

此文件需要被编码为hash格式;

 

2、关系型数据库中的表中:

即时查询数据库完成用户认证;

 

mysql库,

pam要依赖于pam_mysql模块,需要额外安装

# yum -y install pam_mysql

 

注意:pam_mysql由epel源提供

 

 

 

vsftpd+pam_mysql+MariaDB

----------------------------------------------------------------------------------------------------

一、在vsftp服务器上,安装pam_mysql,用于支持数据库用户认证

# yum -y install pam_mysql

 

 

二、在MariaDB服务器上,准备数据库及相关表

 

1、创建存储虚拟用户的数据库:

[root@centos7 mysql]# mysql

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 4

Server version: 5.5.46-MariaDB-log MariaDB Server

 

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab andothers.

 

Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.

 

MariaDB [(none)]> create database vsftpd;    ###创建一个名为vsftpd的数据库

Query OK, 1 row affected (0.00 sec)

 

MariaDB [(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

 

MariaDB [(none)]> use vsftpd;    ###设定vsftpd为默认库

Database changed

 

 

2、创建用于管理数据库的用户,并授权

MariaDB [vsftpd]> grant select on vsftpd.* tovsftp@'172.16.2.%' identified by 'magelinux';

 

说明:创建用户vsftp,密码为"magelinux",并授权该用户对vsftpd这个数据库远程访问权限

 

MariaDB [vsftpd]> flush privileges;

Query OK, 0 rows affected (0.01 sec)

 

说明:刷新权限

 

 

3、在数据库创建表:

MariaDB [vsftpd]> create table users (

-> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,

-> name VARCHAR(50) BINARY NOT NULL,

-> password CHAR(48) BINARY NOT NULL );

Query OK, 0 rows affected (0.06 sec)

 

说明:在该数据库中创建名为users的表,建立3个字段:

id(无符号,不能为空,自动增长,把id定义成主键)

name(长度20个字符,区分字符大小写,不能为空)

passwd(长度48个字符,区分字符大小写,不能为空)

 

MariaDB [vsftpd]> show tables from vsftpd;

+------------------+

| Tables_in_vsftpd |

+------------------+

| users            |

+------------------+

1 row in set (0.00 sec)

 

 

MariaDB [vsftpd]> desc users;

+----------+------------------+------+-----+---------+----------------+

| Field    | Type             | Null | Key | Default |Extra          |

+----------+------------------+------+-----+---------+----------------+

| id       | int(10)unsigned | NO   | PRI | NULL    | auto_increment |

| name     |varchar(50)      | NO   |    | NULL    |                |

| password | char(48)        | NO   |     | NULL   |                |

+----------+------------------+------+-----+---------+----------------+

 

 

4、在表中插入用户

MariaDB [vsftpd]> insert into users(name,password)values('user1',password('abc12345'));

MariaDB [vsftpd]> insert into users(name,password)values('user2',password('abc12345'));

 

说明:在users表中插入用户数据,分别为"user1、user2",密码为"abc123,",使用passwod加密

 

MariaDB [vsftpd]> select * from users;

+----+-------+-------------------------------------------+

| id | name  |password                                 |

+----+-------+-------------------------------------------+

|  1 | user1 |*25817BCE9A997710F8A129AF52153A903AB9254F |

|  2 | user2 |*25817BCE9A997710F8A129AF52153A903AB9254F |

+----+-------+-------------------------------------------+

2 rows in set (0.00 sec)

 

 

 

 

三、在vsftpd服务器上连接MariaDB服务器测试:

[root@centos6 ~]# mysql -u vsftp -h 172.16.2.16 -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 7

Server version: 5.5.46-MariaDB-log MariaDB Server

 

Copyright (c) 2000, 2013, Oracle and/or its affiliates. Allrights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/orits

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.

 

已连接成功!

 

 

四、配置vsftpd

1、建立pam认证所需文件

[root@centos6 ~]# vim /etc/pam.d/vsftpd.mysql

添加如下两行:

authrequired pam_mysql.so user=vsftp passwd=magelinux host=172.16.2.16 db=vsftpdtable=users usercolumn=name passwdcolumn=password crypt=2

accountrequired pam_mysql.so user=vsftp passwd=magelinux host=172.16.2.16 db=vsftpdtable=users usercolumn=name passwdcolumn=password crypt=2

 

2、建立虚拟用户映射的系统用户及对应的目录

[root@centos6 ~]# useradd -s /sbin/nologin -d/var/ftp/ftproot vftpuser

 

修改该目录权限,为了让其他用户能登录后进入该目录并具有读权限

[root@centos6 ~]# chmod go+rx /var/ftp/ftproot

[root@centos6 ~]# ll -d /var/ftp/ftproot

drwxr-xr-x. 3 vftpuser vftpuser 4096 Oct 28 09:51/var/ftp/ftproot

 

 

五、请确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项

anonymous_enable=YES

local_enable=YES

write_enable=YES

anon_upload_enable=NO

anon_mkdir_write_enable=NO

chroot_local_user=YES

 

添加以下选项

guest_enable=YES

guest_username=vftpuser

 

并确保pam_service_name选项的值如下所示

pam_service_name=vsftpd.mysql

 

 

六、重启vsftpd服务,并把vsftpd服务设为开启自启动

[root@centos6 ~]# service vsftpd restart

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]

[root@centos6 ~]# chkconfig vsftpd on

 

 

此时,在数据库vsftpd中users表中的用户均能登录访问了

但是,它们被默认映射为匿名账号,因此无法上传数据

     

 

 

七、为每个用户启用不同的权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

 

1、配置vsftpd为虚拟用户使用配置文件目录

编辑主配置文件,添加如下选项:

[root@centos6 ~]# vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers_config

 

2、创建所需要目录,并为虚拟用户提供配置文件

[root@centos6 ~]# mkdir /etc/vsftpd/vusers_config/

[root@centos6 ~]# cd /etc/vsftpd/vusers_config/

[root@centos6 vusers_config]# touch user1 user2

 

3、配置虚拟用户的访问权限

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的

比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下选项即可。

[root@centos6 vusers_config]# vim user1

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

 

 

重启vsftpd服务,重新登录用户验证,此时权限已生效