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

a53d0a66217c7cb0f1b3a07a73e7daa4.png

上文: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

e75938821d346ad28d78e3b08bc855e7.png

在这里可以看出当前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数据库,此步可省略。

bf99b564e047bddc4c5ed48e86539253.png

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

yum install -y mysql-community-server

7、查看mysql的安装版本。

mysqladmin -V

CentOS6系统

ac42281871f61dd217669240915c016f.png

RHEL7系统

4100271697201cd9cba3aeb371eb7184.png

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'

ebeed485be69fbb6f87329a2debcd92a.png

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

0e7ad5976f1473f6a8e7e09c44d153f2.png

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

13、安全设置MySQL数据库

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

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

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

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

mysql_secure_installation

2036fa93f40877d5809922032a955396.png

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列)。

531164d5a44a90ffd5259eeb3c3b5579.png

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.%';#查看新建用户的权限

9385a80f35e5e905725a800921857f80.png
  • 在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.%';#查看新建用户的权限

01166ce4d350fc0b8eba3a388ae2ed49.png

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#查看现有防火墙规则

a6bdbc99bfa9307c9f3e3525587098d0.png
  • RHEL7或CentOS7系统

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

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

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

809c3276c09ee4b567a297ffc152c438.png

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

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

mysql -u admin -h 192.168.1.90 -p

49469d5894682d3dba353b3e4b94d179.png

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

0dbe679ab3a00583b418e29827cf3ca6.png

二、安装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目录),该用户只有查看和下载文件的权限。
6e71737718fa528ee477cf92ed59b67b.png

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;

dec122c1a45fd613dcd64c71659dc95a.png

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表结构的详细信息

bea85a7ff61e7500d3187108eb11f0ce.png

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表的所有记录

3d0c2c359bddb039c20fedd82e619f26.png

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'; #查看新建用户的权限

cb79b892c0cebcd10466596c0667d63c.png

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、验证配置结果

f287eac0a9dcf2798c791618d8139b9c.png

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系统中整理的一些学习要点,肯定会有不对的地方,希望各位大侠给与指正,我们共同学习!谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值