实验环境:
系统:CentOS7.4
IP:192.168.15.236
1、将防火墙和selinux临时关闭
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
2、安装mysql和vsftpd以及其他组件,等一下要编辑所以要下载gcc-c++
[root@localhost ~]# yum install mariadb-devel pam-devel mariadb-server mariadb vsftpd gcc-c++ -y #这里不安装mysql的原因是因为懒。。。。装mysql和装mariadb效果是一样的,不用在意
3、安装pam_mysql模块,这里我们用编译安装
[root@localhost ~]# yum -y install wget
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
[root@localhost src]# tar -xf pam_mysql-0.7RC1.tar.gz
[root@localhost src]# cd pam_mysql-0.7RC1
[root@localhost pam_mysql-0.7RC1]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
[root@localhost pam_mysql-0.7RC1]# make && make install
4、启动mariadb,登入到mariadb
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# mysql -uroot
5、 创建连接访问vsftpd数据库的用户,并创建虚拟用户对应表以及插入虚拟用户的用户密码
> create database vsftpd;
> grant all on vsftpd.* to ‘vsftpd‘@‘localhost‘ identified by ‘vsftpd‘; #设置连接mysql用户
> use vsftpd;
> create table users(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , name VARCHAR(100) NOT NULL , password char(48) NOT NULL ,UNIQUE KEY(name)); ##创建存放虚拟用户用户名密码的表> insert into users(name,password) values(‘ice‘,PASSWORD(‘ice‘)); ##添加虚拟用户
> insert into users(name,password) values(‘ice‘,PASSWORD(‘ice‘));##添加虚拟用户
> insert into users(name,password) values(‘cube‘,PASSWORD(‘cube‘));##添加虚拟用户
> select * from users;
+----+------+-------------------------------------------+
| id | name | password |
+----+------+-------------------------------------------+
| 1 | ice | *332FFAEB8FE98A18EC0F0BCCC9578ED86E5F4841 |
| 2 | cube | *F74B2A15FEA18CA468C4E9D535B6F4430A6BC926 |
+----+------+-------------------------------------------+
2 rows in set (0.00 sec)
6、配置/etc/pam.d/目录中的vsftpd用户认证的配置文件
[root@localhost ~]# vim /etc/pam.d/vsftpd
~
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
~
##模块 验证机制 pam_mysql路径 登入数据库的账户 登入数据库的密码 数据库的IP 数据库名称 表名称 表结构中的用户结构 表结构中的密码结构 密码加密方法
#######
crypt=0:表示口令使用明文方式保存在数据库中
crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中
crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中
crypt=3:表示口令使用MD5散列值的方式保存在数据库中
7、配置vsftp主配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
~
pam_service_name=vsftpd //指定pam文件位置,默认vsftpd,不需要修改
guest_enable=YES //开启虚拟用户模式
guest_username=vuser //指定映射权限本地用户
allow_writeable_chroot=YES //允许用户具有主目录写权限,这个不配置虚拟用户将无法登入
user_config_dir=/etc/vsftpd/vusers_config/ //指定虚拟用户个人配置文件
~
#这里如果复制要注意,不能复制到空格,复制到空格将会报错
8、创建并编辑虚拟用户主配置文件
[root@localhost ~]# mkdir /etc/vsftpd/vusers_config
[root@localhost ~]# vim /etc/vsftpd/vusers_config/ice
~
local_root=/ftp/vuser/ice
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
~
[root@localhost ~]# vim /etc/vsftpd/vusers_config/cube
~
local_root=/ftp/vuser/cube
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
~
9、创建映射权限用户以及虚拟用户们的主目录
[root@localhost ~]# mkdir /ftp
[root@localhost ~]# useradd -d /ftp/vuser vuser
[root@localhost ~]# mkdir /ftp/vuser/ice
[root@localhost ~]# mkdir /ftp/vuser/cube
[root@localhost ~]# chown vuser:vuser -R /ftp
[root@localhost ~]# chmod 777 -R /ftp
10、重启mariadb,启动vsftpd
[root@localhost ~]# systemctl restart mariadb
[root@localhost ~]# systemctl start vsftpd
11、测试
[root@localhost ~]# yum -y install ftp
[root@localhost ~]# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): ice
331 Please specify the password.
Password:
230 Login successful. #成功登入
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
[root@localhost ~]# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): cube
331 Please specify the password.
Password:
230 Login successful. #成功登入
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
最后就是哪些上面的权限配置以及用户配置可以在baidu中搜索vsftpd配置文件详解,可以自行去看其他博客的,他们都有这些参数的详细解析,这里就不多说了,因为懒。。。。=。=