前言

搭建的环境为centos 6/7
需要的软件包有:

  • CentOS 6:

yum install vsftpd mysql-server mysql-devel pam_mysql -y

解释
pam_mysql:为vsftp提供pam认证库

  • CentOS 7:

yum install vsftpd mariadb-server mariadb-devel pam-devel -y

解释
pam_devel:由于CentOS 7中没有pam_mysql这个包,我们需要编译这个包,需要用到pam_devel

一:CentOS 6的实现

1.创建ftp的系统用户

~]# useradd -s /sbin/nologin -d /opt/ftproot ftpuser

创建一个用户ftpuser,删除用户家目录的所有文件,因为里面的文件都不需要

~]# rm -rf /opt/ftproot/*

2.数据库的配置

启动数据库

~]# systemctl start mysql

数据进行安全初始化,见下文第四节,数据库的安全初始化


连接数据库

~]# mysql -uroot -p

创建ftp要使用的数据库

mysql> create database vsftpd character set=utf8;

创建表

mysql> use vsftpd
mysql> create table users (id int not null auto_increment,name char(11) binary not null,password char(48) binary not null,primary key(id));

插入数据,添加用户

mysql> insert into users (name,password) values ('user1',password('123456')),('user2',password('456789'));

新建mysql用户并授权

mysql> create user 'vsftpd'@'127.0.0.1' identified by '123456789'; 
mysql> grant select on vsftpd.* to 'vftpd'@'127.0.0.1';
mysql> flush privileges;

新建pam认证配置文件

~]# vim /etc/pam.d/vsftpd.my

键入以下内容

auth required /lib64/security/pam_mysql.so user=vsftpd passwd=123456789 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=123456789 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
#user:连接数据库的用户
#passwd:用户的密码
#host:mysql的ip地址
#db:数据库
#table:表
#usercloumn:数据表中定义用户名的字段
#passwdcloumn:数据表中定义密码的字段
#crypt:2表示加密传输,0表示明文传输

:wq保存

3.修改vsftpd的配置文件

这里我给出一个较全的配置文件(主动连接模式)

anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
# 禁止匿名用户登录、上传、写入、删除
local_enable=YES
# 允许本地用户登录
write_enable=YES
# 允许本地写权限
local_umask=022
# 用户操作数据的默认掩码
dirmessage_enable=YES
# 是否激活目录欢迎信息功能,欢迎信息保存再访问目录下的.message文件中
xferlog_enable=YES
# 是否让系统自动维护维护上传/下载的日志文件,默认日志文件再/var/log/vsftpd.log
connect_from_port_20=YES
# 是否设置ftp启用ftp数据端口的连接请求(主动模式需要打开,被动必须关闭)
xferlog_std_format=YES
# 将日志设置为标准的format格式
listen=NO
# 是否允许监听,如果设置为YES,有vsftpd自己监听和处理ipv4端口的连接请求
listen_ipv6=YES
# 是否支持ipv6,设置YES表示ipv4/ipv6都监听
pam_service_name=vsftpd.my
# 设置pam认证配置文件的文件名,上面我们创建的配置文件为vsftpd.my
userlist_enable=YES
# 是否允许ftpusers文件中的用户登录ftp服务器
tcp_wrappers=YES
# 是否使用tcp_wrappers作为主机访问控制方式
user_config_dir=/etc/vsftpd/vconf
# 虚拟用户的配置文件路径
allow_writeable_chroot=YES
# 用户对主目录有其写权限,非常重要,且必须配置
guest_username=ftpadmin
guest_enable=YES
chroot_local_user=YES

4.为单个用户添加配置文件并重启服务

~]# mkidr /etc/vsftpd/vconf
~]# cd /etc/vsftpd/vconf
~]# vim user1

键入以下内容,给予user1用户写上传权限,并限制user1的home文件夹中

local_root=/opt/ftproot/user1
#限制用户在user1目录下,当然,要确保文件夹存在且属于ftpadmin用户
anon_upload_enable=YES
#允许上传
anon_mkdir_write_enable=YES
#允许创建目录
anon_other_write_enable=YES
#允许删除文件

给user2提供配置文件

~]# vim user2
local_root=/opt/ftproot/user2
anon_mkdir_write_enable=YES
#允许创建目录

重启服务

~]# systemctl restart vsftpd.service

二:CentOS 7的实现

1.安装前言提到的软件包

如果没有开发工具包还需要安装开发包组

~]# yum groupinstall "Development Tools" -y

下载pam_mysql的源码,进行编译安装

~]# wget http://www.huzs.net/soft/vsftpd/pam_mysql-0.7RC1.tar.gz
~]# tar xvf pam_mysql-0.7RC1.tar.gz && cd pam_mysql-0.7RC1
~]# ./configure --with-openssl --with-pam-mods-dir=/usr/lib64/security
~]# make && make install

2.基于CentOS 6实现的方法,修改vsftpd.my

修改后的内容如下:

auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=123456789 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=123456789 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

主要是修改“/usr/lib64/security/pam_mysql.so”,修改为so文件的实际路径
6/7的区别就是7需要自己编译pam_mysql.so动态库文件

3.重启服务


~]# systemctl restart vsftpd.service


<center>END</center>


Last modification:September 30th, 2019 at 08:36 pm
If you think my article is useful to you, please feel free to appreciate