上文:Linux服务器配置-VSFTP服务配置(五)

上文中已经介绍了使用数据库文件方式配置虚拟用户认证登录FTP服务器,这篇文件将介绍通过数据库方式(vsftpd服务+pam_mysql+MySQL)配置虚拟用户认证登录FTP服务器。

一、安装配置MySQL数据库

这里以在CentOS6中安装MySQL5.7.25社区版和在RHEL7中安装MySQL8.0.15社区版为例,下文中的示例图片无特殊说明,均已在CentOS6中安装MySQL5.7.25数据库为主。另外,本人发布文章中的实例都是亲自测试成功后发布的。

1、查看系统中是否安装其他版本的MySQL数据库。

rpm -qa | grep mysql

如果已安装了其他版本的mysql-server,需先停止mysqld服务,再删除安装的mysql软件包。

停止mysql服务

  • CentOS6系统

service mysqld stop

  • RHEL7或CentOS7系统

systemctl stop mysqld

根据所安装的mysql软件包,用 yum remove 或 rpm -e 命令删除。

2、下载mysql的repo源。

在MySQL官网https://dev.mysql.com/downloads/repo/yum/,选择适合的Linux平台发行包,下载repo源。

或用wget命令在Linux系统中直接下载repo源rpm包。(以下为适合RHEL Linux/ Oracle Linux的发行版的rpm包)

  • CentOS6系统

wget https://dev.mysql.com/get/mysql80-community-release-el6-2.noarch.rpm

  • RHEL7或CentOS7系统

wget https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm

3、安装下载的软件包。

安装软件包后,会获得两个mysql的repo源:/etc/yum.repos.d/mysql-community.repo 和 /etc/yum.repos.d/mysql-community-source.repo。

  • CentOS6系统

rpm -ivh /root/mysql80-community-release-el6-2.noarch.rpm

  • RHEL7或CentOS7系统

rpm -ivh /root/mysql80-community-release-el7-2.noarch.rpm

yum clean all

yum makecache

4、查看repo源当前启用的是哪个MySQL版本的存储库。(即当前repo源支持的MySQL版本)

MySQL的不同发行版托管在不同的子存储库中。默认情况下启用最新(当前为MySQL 8.0.15)的子存储库,并禁用所有其他版本的子存储库。使用以下命令查看MySQL Yum存储库中的所有子存储库及子存储库启用或禁用状态。

yum repolist all | grep mysql

在这里可以看出当前repo源支持的子存储库及已启用了mysql插件、工具及8.0版本的子存储库。

5、设置repo源启用哪个版本的子存储库。(即更换repo源当前支持的MySQL版本)

yum-config-manager --disable mysql80-community#关闭mysql8.0版本

yum-config-manager --enable mysql57-community #启用mysql5.7版本

yum repolist all | grep mysql #查看mysql5.7版本子存储库是否开启

除了使用以上命令之外,还可以通过手动编辑/etc/yum.repos.d/mysql-community.repo 文件来设置 ,将文件中相应MySQL版本的“enabled=”设置为1或0。(1表示启用,0表示关闭)

注:如果需要安装最新版本的MySQL数据库,此步可省略。

6、安装mysql-community(社区版)数据库

yum install -y mysql-community-server

7、查看mysql的安装版本。

mysqladmin -V

CentOS6系统

RHEL7系统

8、修改MySQL的配置文件(/etc/my.cnf)

备份配置文件

cp /etc/my.cnf /etc/my.cnf.bak

修改配置文件

vim /etc/my.cnf

#设置mysql数据字符集

character-set-server=utf8#MySQL-5.7版本

character-set-server=utf8mb4#MySQL-8.0版本

#设置mysql的端口号,默认为3306。

port=3306

设置mysql表名是否区分大小写:0表示区分大小写;1表示不区分大小写

lower_case_table_names=1

9、启动MySQL数据库。

  • CentOS6系统

service mysqld start

  • RHEL7或CentOS7系统

systemctl start mysqld.service

10、查询mysqld服务的运行状态并设置为开机自启。

  • CentOS6系统

service mysqld status#查询mysqld服务运行状态

chkconfig mysqld on#设置mysqld服务开机自启

chkconfig --list | grep mysqld #查询mysql服务开机自启状态

  • RHEL7或CentOS7系统

systemctl status mysqld #查询mysqld服务运行状态

systemctl enable mysqld#设置mysqld服务开机自启

systemctl list-unit-files | grep mysqld#查询mysql服务开机自启状态

11、查看MySQL数据库root用户的初始密码。

cat /var/log/mysqld.log | grep 'A temporary password'

12、登录MySQL数据库并设置root用户密码。

a、配置MySQL用户密码复杂度说明

validate_password.policy=0

设置密码强度检查等级。

密码强度检查等级为:0 or LOW、1 or MEDIUM、2 or STRONG。有以下取值:

0 or LOW :测试项目为Length(密码长度) 。

1 or MEDIUM:测试项目为Length; numeric, lowercase/uppercase, and special characters(密码的长度、数字、大小写和特殊字符) ,此项为默认值。

2 or STRONG:测试项目为Length; numeric, lowercase/uppercase, and special characters; dictionary file(密码的长度、数字、大小写、特殊字符和密码字典文件。)

validate_password.dictionary_file

设置用于验证密码强度的字典文件路径。

validate_password.mixed_case_count=0

设置密码大小写字符的长度

validate_password.number_count=0

设置密码数字的长度

validate_password.special_char_count=0

设置密码特殊字符的长度

validate_password.length=0

设置密码的最小长度,默认为8。

注:validate_password.length 的长度要大于 validate_password.mixed_case_count + validate_password.number_count + validate_password.special_char_count 的和。

b、FLUSH PRIVILEGES—SQL语句使用说明

此SQL语句的作用是从内置的mysql库中,将当前user和privilige表中的用户信息与权限信息提取到内存中。MySQL用户数据和权限被修改后,在“不重启mysqld服务"的情况下直接生效。

c、首次登录MySQL数据库

首次登录MySQL数据库,需使用上步查询到的初始密码。登录MySQL数据库的命令为:mysql -u username -h host -P port -p password。

在MySQL-5.7版本以后,首次登录MySQL数据库,必须先修改root用户密码后才能进行其他数据库操作,密码要求至少8位,需要包含大小写字母、数字和特殊字符。

注:下文中“mysql>”为数据库中的命令提示符,其后为要执行的SQL语句。

#使用root用户本地登录MySQL数据库。

mysql -u root -p

#修改root用户密码。(单引号内的password为新密码)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

mysql> FLUSH PRIVILEGES;#刷新缓存

若想设置为简单密码如123456,则要通过以下SQL语句来设置。

  • MySQL-5.7版本

mysql> SET GLOBAL validate_password_policy=0; #设置用户密码的检查强度

mysql> SET GLOBAL validate_password_length=6; #设置用户密码最小位数

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';#修改root用户密码

mysql> FLUSH PRIVILEGES;#刷新缓存

mysql> SELECT @@validate_password_policy;#查看用户密码的检查强度设置

mysql> SHOW VARIABLES LIKE 'validate_password%'; #查看用户密码选项的设置

  • MySQL-8.0版本

mysql> SET GLOBAL validate_password.policy=0; #设置用户密码的检查强度

mysql> SET GLOBAL validate_password.length=6;#设置用户密码最小位数

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';#修改root用户密码

mysql> FLUSH PRIVILEGES;#刷新缓存

mysql> SELECT @@validate_password.policy;#查看用户密码的检查强度设置

mysql> SHOW VARIABLES LIKE 'validate_password%'; #查看用户密码选项的设置

以上只是临时配置,若要永久生效可在MySQL配置文件(/etc/my.cnf)中,加入如下配置项,并重启mysqld服务。

  • CentOS6系统

validate_password_policy=0

validate_password_length=6

  • RHEL7或CentOS7系统

validate_password.policy=0

validate_password.length=6

可通过quit命令退出MySQL数据库。

13、安全设置MySQL数据库

通过安全设置向导,对MySQL数据库进行安全设置操作。

安全设置分为以下几个选项:

  • 修改root用户的密码
  • 是否移除匿名用户
  • 是否禁用root账户远程登录
  • 是否移除测试数据库(test)
  • 是否重新加载授权表

在Linux系统中执行以下命令,运行安全设置向导。

mysql_secure_installation

14、远程链接MySQL数据库配置

建议在测试或开发环境下开启root用户远程访问MySQL数据库的权限;在生产环境下,通过建立数据库管理员DBA,并授予相应的权限来远程管理数据库。

a、改表法

通过修改mysql内置数据库中user表host字段的值,可使root或其他用户远程访问MySQL数据库。

使用root用户登录MySQL数据库。

mysql -u root -p #登录MySQL数据库

mysql> USE mysql; #转到名为mysql的内置数据库

mysql> SELECT user,host FROM user;#查询user表的记录(仅显示出user列和host列)。

mysql> UPDATE user SET host = '%' WHERE user = 'root';#修改user表,user字段=root的host字段值为%。(也就是设置root用户可使用任何地址远程访问数据库,%表示任何地址。)

mysql> FLUSH PRIVILEGES;#刷新缓存

mysql> SELECT user,host FROM user;#查询user表的记录(仅显示出user列和host列)。

b、授权法

mysql -u root -p #登录MySQL数据库

mysql> USE mysql; #转到名为mysql的内置数据库

  • 在MySQL-8.0版本中

mysql> CREATE USER 'admin'@'192.168.1.%' IDENTIFIED BY '123456'; #创建新用户、设置密码并设置允许远程访问的IP地址段(用户名admin、密码123456、可远程访问的IP地址段为192.168.1.0)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.%' WITH GRANT OPTION; #设置新建用户对所有数据库对象具有全部的操作权限。(MySQL 赋予用户权限的SQL语句的简单格式为:GRANT 权限 ON 数据库对象 TO 用户,如果要使该用户可以将自己拥有的权限授权给别人,可加上WITH GRANT OPTION选项。)

mysql> FLUSH PRIVILEGES;#刷新缓存

mysql> SHOW GRANTS FOR 'admin'@'192.168.1.%';#查看新建用户的权限

  • 在MySQL-5.7版本中

mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.%' IDENTIFIED BY '123456' WITH GRANT OPTION; #MySQL8.0以下的版本,创建用户和设置用户权限,可以使用一条SQL语句完成。

mysql> FLUSH PRIVILEGES;#刷新缓存

mysql> SHOW GRANTS FOR 'admin'@'192.168.1.%';#查看新建用户的权限

15、防火墙配置

  • CentOS6系统

iptables -t filter -I INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT #添加防火墙规则

service iptables save#保存防火墙规则

service iptables restart #重启防火墙

iptables -t filter --line-number -nL INPUT#查看现有防火墙规则

  • RHEL7或CentOS7系统

firewall-cmd --permanent --zone=public --add-port=3306/tcp#添加防火墙规则

firewall-cmd --reload#重载防火墙

firewall-cmd --list-all #查看现有防火墙规则

16、远程链接MySQL数据库验证

在Linux系统中使用MySQL客户端验证远程链接

mysql -u admin -h 192.168.1.90 -p

在Windows系统中使用Navicat Premium 12工具远程链接

二、安装pam-mysql

1、CentOS6系统yum方式安装

a、安装EPEL repo源

yum install -y epel-release 或 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum clean all

yum makecache

b、安装pam-mysql

yum install -y pam_mysql

2、RHEL7或CentOS7系统安装

a、下载pam_mysql-0.8.1-0.22.el7.lux.x86_64.rpm包

wget http://repo.iotti.biz/CentOS/7/x86_64/pam_mysql-0.8.1-0.22.el7.lux.x86_64.rpm

b、安装下载的软件包

rpm -ivh pam_mysql-0.8.1-0.22.el7.lux.x86_64.rpm

3、查询pam_mysql.so是否存在

find / -name pam_mysql.so

三、实例说明通过数据库方式(vsftpd服务+pam_mysql+MySQL)配置虚拟用户认证登录FTP服务器。

1、配置软件环境说明。

CentOS6系统

  • CentOS release 6.10 (Final)
  • vsftpd-2.2.2-24.el6.x86_64
  • MySQL-5.7.25
  • pam_mysql-0.7-0.12

RHEL7系统

  • Red Hat Enterprise Linux Server release 7.6 (Maipo)
  • vsftpd-3.0.2-25.el7.x86_64
  • MySQL-8.0.15
  • pam_mysql-0.8.1-0.22

服务器配置要求:

  • FTP服务采用被动模式运行,只允许虚拟用户登录,并将被动端口锁定在59800-59900之间。
  • 虚拟用户信息保存在MySQL数据库中。
  • 虚拟用户snowfox为FTP管理员,其FTP根目录设定在/var/vftproot目录中,该用户具有可下载、上传、新建目录(文件)、更名、及删除文件的权限。
  • 虚拟用户wendy为一般用户,其FTP根目录设定在/var/vftproot/wendy目录中(即只能访问自己的FTP目录),该用户具有可下载、上传、新建目录(文件)、更名、及删除文件的权限。
  • 虚拟用户itcat为一般用户,其FTP根目录设定在/var/vftproot目录中(即可访问其他用户FTP目录),该用户只有查看和下载文件的权限。

2、创建本地映射用户,并设置FTP目录的权限。

adduser -d /var/vftproot -s /sbin/nologin virftp

chmod -R 755 /var/vftproot

3、配置MySQL数据库,用于vsftp虚拟用户数据库认证登录。

a、创建vsftp虚拟用户数据库认证登录所需要的库文件。

登录MySQL,创建vsftpdb数据库。

mysql -u root -p

mysql> CREATE DATABASE vsftpdb;

b、在vsftpdb数据库中创建用户表vsftp_users。

mysql> USE vsftpdb; #使用vsftpdb数据库

mysql> select database(); #查看当前用户所使用的数据库

mysql> CREATE TABLE vsftp_users( #建立vsftp用户表vsftp_users

user_id SMALLINT AUTO_INCREMENT NOT NULL, #设置表的用户id字段

user_name CHAR(20) NOT NULL, #设置表的用户名字段

user_password CHAR(48) BINARY NOT NULL, #设置表的用户密码字段

PRIMARY key(user_id)); #设置表的主键为user_id字段

mysql> DESC vsftp_users; #查看vsftp_users表结构的详细信息

c、在vsftp_users表中批量添加vsftp虚拟用户信息

mysql> INSERT INTO vsftp_users (user_name,user_password) VALUE

('snowfox',MD5('666666')),

('wendy',MD5('666666')),

('itcat',MD5('666666'));

mysql> SELECT * FROM vsftp_users; #查询vsftp_users表的所有记录

d、添加FTP数据库用户vsftp,并设置此用户只有查询vsftpdb数据库中的所有表的权限。

mysql> USE mysql;

mysql> CREATE USER 'vsftp'@'localhost' IDENTIFIED BY 'vsftpd';#创建新用户并设置密码

mysql> GRANT SELECT ON vsftpdb.* TO 'vsftp'@'localhost'; #设置新建用户并对其设置相关权限

mysql> FLUSH PRIVILEGES; #刷新缓存

mysql> SHOW GRANTS FOR 'vsftp'@'localhost'; #查看新建用户的权限

MySQL-8.0数据库

由于MySQL-8.0之前版本的加密规则是mysql_native_password,而MySQL-8.0的加密规则是caching_sha2_password,所以数据库用户在使用pam_mysql.so与MySQL-8.0版本的数据库链接时,需要修改相应数据库用户的加密规则为mysql_native_password。

mysql> ALTER USER 'vsftp'@'localhost' IDENTIFIED WITH mysql_native_password BY 'vsftpd';

mysql> FLUSH PRIVILEGES;

4、建立PAM认证文件

在/etc/pam.d/目录中创建用于vsftp的PAM认证文件。

vim /etc/pam.d/vsftpd.mysql

加入以下语句

auth required /lib64/security/pam_mysql.so user=vsftp passwd=vsftpd host=localhost db=vsftpdb table=vsftp_users usercolumn=user_name passwdcolumn=user_password crypt=3

account required /lib64/security/pam_mysql.so user=vsftp passwd=vsftpd host=localhost db=vsftpdb table=vsftp_users usercolumn=user_name passwdcolumn=user_password crypt=3

注意pam_mysql.so文件的路径。

说明:

pam_mysql.so模块选项

-- verbose 设置为1则显示详细的调试信息,默认0

-- debug 开启调试模式

-- user mysql数据库认证的用户名

-- passwd mysql数据库认证的密码

-- host mysql数据库的主机名称或IP

-- db 包含验证信息的数据库名称

-- table 包含验证信息的数据库表名称

-- usercolumn 包含验证的用户名列

-- passwdcolumn 包含验证的密码列

-- crypt 密码加密方式,

0 无加密,默认为此值;

1 使用crypt(3)函数加密;

2 使用MySQL的PASSWORD函数加密;(在mysql8.0中已经取消此函数)

3 使用普通十六进制md5加密;

4 使用普通十六机制SHA1加密;

-- sqllog 设置为“true”或“yes”,则启用SQL日志记录,默认false

-- logtable 存储日志的表名称

-- logmsgcoumn 该列存储日志的消息

-- logusercolumn 该列存储产生日志的用户名

-- logpidcolumn 该列存储产生日志的进程PID

5、修改vsftpd配置文件。

备份原配置文件

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

修改配置文件

vim /etc/vsftpd/vsftpd.conf

具体修改请参阅上篇文章—Linux服务器配置-VSFTP服务配置(五),这里就不再说明。

请注意修改以下配置项:

pam_service_name=/etc/pam.d/vsftpd.mysql

6、为虚拟用户单独创建配置文件及相应目录,已调整各个虚拟用户的不同访问权限。

具体修改请参阅上篇文章—Linux服务器配置-VSFTP服务配置(五),这里就不再说明。

7、防火墙配置

vsftpd服务的防火墙配置已在—Linux服务器配置-VSFTP服务配置(三)中加以说明,这里不再重复。

8、SELinux设置

  • CentOS6系统

更改vsftp的SELinux布尔变量

setsebool -P ftp_home_dir on

setsebool -P allow_ftpd_full_access on

  • RHEL7系统

setsebool -P ftpd_full_access on

9、重启vsftpd服务

  • CentOS6系统

service vsftpd restart

  • RHEL7系统

systemctl restart vsftpd

10、验证配置结果

11、VSFTP与MySQL部署在不同的服务器上

以上实例是VSFTP与MySQL安装在一台服务器上的配置,如果将这两个服务安装在不同的服务器上,例如vsftpd服务安装在地址为192.168.1.100的服务器上,MySQL数据库安装在地址为192.168.1.200的服务器上,配置与上面基本相同,不同之处说明如下。

① 添加FTP数据库用户时,添加的是远程链接用户,远程地址是vsftp服务器的地址。

CREATE USER 'vsftp'@'192.168.1.100' IDENTIFIED BY 'vsftpd';

② 创建用于vsftp的PAM认证文件时,host选项为MySQL服务器的地址。

auth required /lib64/security/pam_mysql.so user=vsftp passwd=vsftpd host=192.168.1.200 db=vsftpdb table=vsftp_users usercolumn=user_name passwdcolumn=user_password crypt=3

account required /lib64/security/pam_mysql.so user=vsftp passwd=vsftpd host=192.168.1.200 db=vsftpdb table=vsftp_users usercolumn=user_name passwdcolumn=user_password crypt=3

以上是我在学习Linux系统中整理的一些学习要点,肯定会有不对的地方,希望各位大侠给与指正,我们共同学习!谢谢!

mysql8.0版本的服务器名称_Linux服务器配置-VSFTP服务配置(六)相关推荐

  1. centos6配置mysql远程访问_Linux服务器配置-VSFTP服务配置(六)

    上文:Linux服务器配置-VSFTP服务配置(五) 上文中已经介绍了使用数据库文件方式配置虚拟用户认证登录FTP服务器,这篇文件将介绍通过数据库方式(vsftpd服务+pam_mysql+MySQL ...

  2. iptables 配置后连接不上数据库_Linux服务器配置-VSFTP服务配置(三)

    上文:Linux服务器配置-VSFTP服务配置(二) 一.vsftpd服务防火墙配置 1.主动(POST)模式 FTP 防火墙配置 CentOS6 系统 iptables 的配置 iptables - ...

  3. mysql8.0版本的服务器名称_MySQL 8.0安装部署-运维笔记

    MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 一.  Mysql8.0版本相比之前版本的一些特性 1) ...

  4. mysql8.0版本的服务器名称_云服务器Mysql安装配置

    所有平台的 MySQL 下载地址为: MySQL 下载(https://dev.mysql.com/downloads/mysql/) . 挑选你需要的 MySQL Community Server ...

  5. FineReport——JDBC 连接 MySQL8.0 版本数据库

    1.描述 下面介绍 Windows 操作系统下 JDBC 连接 MySQL8.0 版本数据库的两种方法. 2. 方法一 1)删除%FR_HOME%\webapps\webroot\WEB-INF\li ...

  6. php7废弃了MySQL,关于mysql8.0版本和PHP7不兼容的问题

    新安装了mysql8.0版本.当PHP连接数据库的时候,会出现一个情况就是连接数据库失败,一般来说会出现以下两种情况: 1.报错:PDO::__construct(): Server sent cha ...

  7. Linux安装MySQL的完整步骤并有关MySQL8.0版本的问题方法

    目录 QUESTION:Linux安装MySQL的完整步骤? ANSWER: 一:使用wget 直接下载 二:安转软件源,将platform-and-version-specific-package- ...

  8. Navicat连接MySQL8.0版本时出现Client does not support authentication protocol requested by server;报错的问题解决办法

    Windown系统下 遇到 Navicat连接MySQL8.0版本时出现Client does not support authentication protocol requested by ser ...

  9. Windows10 MySQL8.0版本的压缩包安装方式

    首先,到mysql官网下载mysql-8.0.21-winx64.zip 将压缩包解压到任一目录 解压后进入mysql-8.0.21-winx64(默认目录)下 新建一个my.ini文件,默认情况下是 ...

最新文章

  1. .net core引用错误的Entity Framework而导致不能正常迁移数据的解决办法
  2. Bash中的shopt选项
  3. APP打开直接显示图片,去掉中间的白屏时间
  4. 管理处理器的亲和性(affinity)
  5. ecshop各项功能介绍参考
  6. sql按年、月、日、查询排序
  7. SqlServer自增长字段归零
  8. 因式分解题目及过程_两道新定义题目的对比分析
  9. 钉钉小程序 DEMO的坑
  10. 字节跳动面试题 —— 水壶问题
  11. xp系统如何开启445端口?
  12. 系统设计系列之如何设计一个短链服务
  13. linux 筛选文件,「Linux基础知识」grep文件内容筛选命令的使用
  14. Java正则表达式校验密码规则
  15. miui系统分身测试软件,miui8系统分身
  16. DDoS防护方式以及产品
  17. 人工智能全球赛:中国“智能+”要冲浪还缺百万人才
  18. 重磅报告 | 70页PPT、10大关键词解读中国互联网创新飞跃的五年
  19. CH340C的ESP8266一键下载电路设计
  20. 汽车自动驾驶的L0-L5是什么意思?

热门文章

  1. MyBatis-Plus——增删查改
  2. jdk中提供的Collection、Collections、Collector、Collectors你分的清楚?
  3. Java –什么是瞬态字段?
  4. idea中svn的更新、检出、提交操作
  5. Java中BigDecimal类介绍及用法
  6. matlab人民币识别,MATLAB-OCR 用MATLAB实现人民币纸币金额的识别与统计 - 下载 - 搜珍网...
  7. ecshop根目录调用_ECSHOP各文件夹功能说明
  8. matlab fgetl用法,Matlab fgetl strsplit 函数
  9. c语言 dec2oct函数,【Excel函数】DEC2OCT函数 - 曹海峰个人博客
  10. linux系统分区扩展,linux系统扩展根分区容量大小