前言
搭建的环境为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
6/7的区别就是7需要自己编译pam_mysql.so动态库文件
3.重启服务
~]# systemctl restart vsftpd.service
<center>END</center>