配置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服务,重新登录用户验证,此时权限已生效