一、安装需要的包和包组:
(1)在数据库服务器上安装包:
Centos7:在数据库服务器上安装
yum -y install mariadb-server 安装包
systemctl start mariadb 启动服务
systemctl enable mariadb 设置开机启动
mysql_secure_installation 运行安全脚本,设置root管理员及密码
Centos6:在数据库服务器上安装
yum -y install mysql-server 安装包
service mysqld start 启动服务
chkconfig mysqld on 设置开机启动
mysql_secure_installation 运行安全脚本,设置root管理员及密码
(2)在FTP服务器上安装vsftpd和pam_mysql包:
Centos6:pam_mysql由epel6的源提供,可直接安装
yum install vsftpd pam_mysql
Centos7:无对应rpm包,需手动编译安装
①yum -y groupinstall "Development Tools" 安装开发包组
yum -y install mariadb-devel pam-devel vsftpd 安装必要的包
②下载pam_mysql-0.7RC1.tar.gz
解压tar xvf pam_mysql-0.7RC1.tar.gz
③编译安装pam_mysql
cd pam_mysql-0.7RC1/
./configure --with-pam=/usr --with-pam-mods-dir=/lib64/security
make && make install
二、在FTP服务器上创建系统用户
①useradd -d /app/ftpdir -r -m ftpuser 创建系统用户
②mkdir /app/ftpdir;chmod 555 /app/ftpdir 除去ftp根目录的写权限才能登陆
三、在数据库服务器上创建虚拟用户账号
1.建立存储虚拟用户数据库(vsftpd)和连接的数据库用户(ftpuser)
①mysql -uroot -p123456 登陆数据库
②mysql> CREATE DATABASE vsftpd; 创建数据库vsftpd
③授权用户对数据库vsftpd有查询权限:
ftp服务和mysql不在同一主机:
mysql> GRANT SELECT ON vsftpd.* TO ftpuser@‘192.166.199.%‘ IDENTIFIED BY ‘123456‘;
ftp服务和mysql在同一主机:
mysql> GRANT SELECT ON vsftpd.* TO ftpuser@localhost IDENTIFIED BY ‘123456‘;
2.准备相关表(ftpusers)
mysql> USE vsftpd;
vsftpd> CREATE TABLE ftpusers (name CHAR(50),pass CHAR(50));
3.添加虚拟用户
根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储
mysql> INSERT INTO ftpusers values(‘ftp1‘,password(‘123456‘)); 添加ftp1用户
mysql> INSERT INTO ftpusers values(‘ftp2‘,password(‘123456‘)); 添加ftp2用户
mysql> SELECT * FROM ftpusers; 查看表ftpusers,可看到两个用户已添加
四、在FTP服务器上配置vsftpd服务
1、在FTP服务器上建立pam认证所需文件
vim /etc/pam.d/vsftpd.mysql
添加如下两行
auth required pam_mysql.so user=ftpuser passwd=123456 host=192.168.199.134 db=vsftpd table=ftpusers usercolumn=name passwdcolumn=pass crypt=2
account required pam_mysql.so user=ftpuser passwd=123456 host=192.168.199.134 db=vsftpd table=ftpusers usercolumn=name passwdcolumn=pass crypt=2
字段说明:
auth 表示认证
account 验证账号密码正常使用
required 表示认证要通过
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
user=ftpuser 登录mysql的用户
passwd=123456 登录mysql的的密码
host=mysqlserver mysql服务器的主机名或ip地址
db=vsftpd 指定连接msyql的数据库名称
table=ftpusers 指定连接数据库中的表名
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密。注意:参考README文档,选择正确的加密方式
2、修改vsftpd配置文件,使其适应mysql认证
vim /etc/vsftpd/vsftpd.conf
确保已经启用了以下选项:
anonymous_enable=YES
添加下面项:
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/conf.d/ 作为每个用户单独的配置文件的路径,下面会创建
修改下面一项,原系统用户无法登录:
pam_service_name=vsftpd.mysql
五、启动vsftpd服务
Centos6:service vsftpd start
Centos7:systemctl start vsftpd
查看端口开启情况
ss -ntlp|grep 21
六、在FTP服务器上配置虚拟用户具有不同的访问权限
说明:vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
创建所需要目录,并为虚拟用户提供配置文件
1、创建目录:mkdir /etc/vsftpd/conf.d/ 虚拟用户配置文件所在的目录
2、为ftp1提供配置文件
①vim /etc/vsftpd/conf.d/ftp1 编辑ftp1的配置文件
anon_upload_enable=YES 允许上传
②mkdir /app/ftpdir/upload 创建子目录,使ftp1可以在该目录上传文件
③setfacl -m u:ftpuser:rwx /app/ftpdir/upload 给予ftp1对该目录rwx权限
ftp1用户实现效果:ftp1用户登陆就能进到upload里面上传文件了
3、为ftp2提供配置文件
①vim /etc/vsftpd/conf.d/ftp2
local_root=/app/ftpdir2 登录目录改变至指定的目录(/app/ftpdir2)
②mkdir /app/ftpdir2;chmod 555 /app/ftpdir2 登陆根目录不能有w权限
③touch /app/ftpdir2/hello
ftp2用户实现效果:ftp2用户登陆就能使用ls看到hello文件了
4、重启vsftpd服务
systemctl restart vsftpd
七、测试效果图如下:
感谢浏览,如有不同意见,欢迎留言。
原文:http://13150617.blog.51cto.com/13140617/1976558