如何在 Linux VPS 上保护 MySQL 和 MariaDB 数据库
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
有许多在 Linux 和类 Unix 系统上可用的 SQL 数据库语言实现。MySQL 和 MariaDB 是在服务器环境中部署关系型数据库的两个流行选项。
然而,像大多数软件一样,如果配置不正确,这些工具可能成为安全隐患。本教程将指导您完成一些基本步骤,以确保您的 MariaDB 或 MySQL 数据库安全,并确保它们不会成为您的 VPS 的后门。
为了简单和说明的目的,我们将在 Ubuntu 12.04 VPS 实例上使用 MySQL 服务器。然而,这些技术也适用于其他 Linux 发行版,并且也可以用于 MariaDB。
初始设置
在安装过程中,MySQL 会要求您设置 root 密码。
sudo apt-get install mysql-server
您随时可以在以后设置 root 密码,但没有理由跳过此步骤,因此您应该从一开始就保护好管理员帐户。
安装完成后,我们应该运行一些包含的脚本。首先,我们将使用 “mysql_install_db” 脚本为我们的数据库创建一个目录布局。
sudo mysql_install_db
接下来,运行名为 “mysql_secure_installation” 的脚本。这将引导我们完成一些程序,以删除一些在生产环境中使用的危险默认设置。
sudo mysql_secure_installation
安全注意事项
保护 MySQL(以及几乎任何其他系统)的总体主题是只有在绝对必要时才授予访问权限。您的数据安全有时取决于方便和安全之间的平衡。
在本指南中,我们将倾向于安全一侧,尽管您对数据库软件的具体使用可能会导致您从这些选项中进行选择。
通过 My.cnf 文件实现安全
MySQL 的主要配置文件是一个名为 “my.cnf” 的文件,它位于 Ubuntu 的 “/etc/mysql/” 目录和其他一些 VPS 的 “/etc/” 目录中。
我们将更改此文件中的一些设置以锁定我们的 MySQL 实例。
以 root 权限打开文件。如果您在不同的系统上按照本教程操作,请根据需要更改目录路径:
sudo nano /etc/mysql/my.cnf
我们应该检查的第一个设置是 “[mysqld]” 部分中的 “bind-address” 设置。此设置应设置为您的本地回环网络设备,即 “127.0.0.1”。
bind-address = 127.0.0.1
这确保了 MySQL 除了本地机器外不接受任何连接。
如果您需要从另一台机器访问此数据库,请考虑通过 SSH 进行连接,以在本地进行数据库查询和管理,并通过 ssh 隧道发送结果。
我们将要修补的下一个漏洞是允许从 MySQL 中访问底层文件系统的功能。这可能会带来严重的安全问题,除非绝对需要,否则应该关闭。
在文件的相同部分,我们将添加一个指令来禁用此功能以加载本地文件:
local-infile=0
这将禁止没有文件级别权限的用户从文件系统加载文件。
如果我们有足够的空间,并且不是在操作大型数据库,记录额外信息可以帮助我们监视可疑活动。
记录太多可能会导致性能下降,因此这是您需要仔细权衡的事情。
您可以在我们一直在添加的同一个 “[mysqld]” 部分内设置日志变量。
log=/var/log/mysql-logfile
确保 MySQL 日志、错误日志和 mysql 日志目录不是全局可读的:
sudo ls -l /var/log/mysql*
从内部保护 MySQL
在使用 MySQL 时,有许多步骤可以提高安全性。
我们将在本节中将命令输入到 MySQL 提示界面中,因此我们需要登录。
mysql -u root -p
您将被要求输入您之前设置的 root 密码。
保护密码和主机关联
首先,确保 MySQL 中没有没有密码或主机关联的用户:
SELECT User,Host,Password FROM mysql.user;
如您所见,在我们的示例设置中,用户 “demo-user” 没有密码,并且无论他在哪个主机上都是有效的。这是非常不安全的。
我们可以使用以下命令为用户设置密码。将 “newPassWord” 更改为您希望分配的密码。
UPDATE mysql.user SET Password=PASSWORD('<span class="highlight">newPassWord</span>') WHERE User="<span class="highlight">demo-user</span>";
如果我们再次检查用户表,我们将看到演示用户现在有了密码:
SELECT User,Host,Password FROM mysql.user;
如果我们的表中包含任何空白用户(在这一点上不应该有,因为我们运行了 “mysql_secure_installation”,但我们仍将介绍这一点),我们应该将它们删除。
要做到这一点,我们可以使用以下调用从访问表中删除空白用户:
DELETE FROM mysql.user WHERE User="";
在修改用户表后,我们需要输入以下命令以实施新的权限:
FLUSH PRIVILEGES;
实施特定于应用程序的用户
与在 Linux 中作为独立用户运行进程的做法类似,MySQL 也受益于相同类型的隔离。
使用 MySQL 的每个应用程序应该有自己的用户,该用户只具有有限的权限,并且只能访问它需要运行的数据库。
当我们配置新应用程序使用 MySQL 时,我们应该创建该应用程序所需的数据库:
create database <span class="highlight">testDB</span>;
接下来,我们应该创建一个用户来管理该数据库,并仅分配它所需的权限。这将根据应用程序而异,有些用途需要比其他用途更开放的权限。
要创建新用户,请使用以下命令:
CREATE USER '<span class="highlight">demo-user</span>'@'localhost' IDENTIFIED BY '<span class="highlight">password</span>';
我们可以使用以下命令为新表授予新用户权限。有关特定权限的更多信息,请参阅 如何在 MySQL 中创建新用户并授予权限 教程:
GRANT <span class="highlight">SELECT,UPDATE,DELETE</span> ON <span class="highlight">testDB</span>.* TO '<span class="highlight">demo-user</span>'@'localhost';
例如,如果以后需要从帐户中撤销更新权限,可以使用以下命令:
REVOKE <span class="highlight">UPDATE</span> ON <span class="highlight">testDB</span>.* FROM '<span class="highlight">demo-user</span>'@'localhost';
如果我们需要在某个数据库上拥有所有权限,我们可以使用以下命令指定:
GRANT ALL ON <span class="highlight">testDB</span>.* TO '<span class="highlight">demo-user</span>'@'localhost';
要显示用户的当前权限,我们首先必须使用 “flush privileges” 命令实施我们指定的权限。然后,我们可以查询用户拥有的授权:
FLUSH PRIVILEGES;
show grants for '<span class="highlight">demo-user</span>'@'localhost';
完成更改后,始终刷新权限。
更改根用户
您可能想要采取的另一个步骤是更改根登录名。如果攻击者试图访问根 MySQL 登录,他们将需要执行找到用户名的额外步骤。
可以使用以下命令更改根登录名:
rename user 'root'@'localhost' to '<span class="highlight">newAdminUser</span>'@'localhost';
我们可以使用与我们一直在使用的用于用户数据库的相同查询来查看更改:
select user,host,password from mysql.user;
同样,我们必须刷新权限以使这些更改生效:
FLUSH PRIVILEGES;
请记住,从现在开始,当您希望执行管理任务时,您将需要以新创建的用户名登录到 MySQL:
mysql -u <span class="highlight">newAdminUser</span> -p
结论
尽管这绝不是 MySQL 和 MariaDB 安全实践的详尽清单,但它应该为您提供了一个很好的介绍,让您了解在保护数据库时需要做出的决策类型。
有关配置和安全性的更多信息可以在 MySQL 和 MariaDB 网站以及它们各自的 man 页面中找到。您选择使用的应用程序也可能提供安全建议。
相关文章:
如何在 Linux VPS 上保护 MySQL 和 MariaDB 数据库
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 有许多在 Linux 和类 Unix 系统上可用的 SQL 数据库语言实现。MySQL 和 MariaDB 是在服务器环境中部署关系型数据库的两个流行选项…...
CSS 样式 box-sizing: border-box; 用于控制元素的盒模型如何计算宽度和高度
文章目录 box-sizing: border-box; 的含义默认盒模型 (content-box)border-box 盒模型 在微信小程序中的应用示例 在微信小程序中,CSS 样式 box-sizing: border-box; 用于控制元素的盒模型如何计算宽度和高度。具体来说, box-sizing: border-box; 会改…...
预训练 BERT 使用 Hugging Face 和 PyTorch 在 AMD GPU 上
Pre-training BERT using Hugging Face & PyTorch on an AMD GPU — ROCm Blogs 2024年1月26日,作者:Vara Lakshmi Bayanagari. 这篇博客解释了如何从头开始使用 Hugging Face 库和 PyTorch 后端在 AMD GPU 上为英文语料(WikiText-103-raw-v1)预训练…...
鸿蒙是必经之路
少了大嘴的发布会,老实讲有点让人昏昏入睡。关于技术本身的东西,放在后面。 我想想来加把油~ 鸿蒙发布后褒贬不一,其中很多人不太看好鸿蒙,一方面是开源性、一方面是南向北向的利益问题。 不说技术的领先点,我只扯扯…...
Java项目实战II基于微信小程序的马拉松报名系统(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 马拉松运动…...
家用wifi的ip地址固定吗?换wifi就是换ip地址吗
在探讨家用WiFi的IP地址是否固定,以及换WiFi是否就意味着换IP地址这两个问题时,我们首先需要明确几个关键概念:IP地址、家用WiFi网络、以及它们之间的相互作用。 一、家用WiFi的IP地址固定性 家用WiFi环境中的IP地址通常涉及两类:…...
codeforces _ 补题
C. Ball in Berland 传送门:Problem - C - Codeforces 题意: 思路:容斥原理 考虑 第 i 对情侣组合 ,男生为 a ,女生为 b ,那么考虑与之匹配的情侣 必须没有 a | b ,一共有 k 对情侣&#x…...
DataSophon集成ApacheImpala的过程
注意: 本次安装操作系统环境为Anolis8.9(Centos7和Centos8应该也一样) DataSophon版本为DDP-1.2.1 整合的安装包我放网盘了: 通过网盘分享的文件:impala-4.4.1.tar.gz等2个文件 链接: https://pan.baidu.com/s/18KfkO_BEFa5gVcc16I-Yew?pwdza4k 提取码: za4k 1…...
深入探讨TCP/IP协议基础
在当今数字化的时代,计算机网络已经成为人们生活和工作中不可或缺的一部分。而 TCP/IP 协议作为计算机网络的核心协议,更是支撑着全球互联网的运行。本文将深入探讨常见的 TCP/IP 协议基础,带你了解计算机网络的奥秘。 一、计算机网络概述 计…...
《Windows PE》7.4 资源表应用
本节我们将通过两个示例程序,演示对PE文件内图标资源的置换与提取。 本节必须掌握的知识点: 更改图标 提取图标资源 7.4.1 更改图标 让我们来做一个实验,替换PE文件中现有的图标。如果手工替换,一定是先找到资源表,…...
【重生之我要苦学C语言】猜数字游戏和关机程序的整合
今天来把学过的猜数字游戏和关机程序来整合一下 如果有不明白的可以看往期的博客 废话不多说,上代码: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <time.h> #include <stdlib.h> #include <string.h> void…...
基于centos7脚本一键部署gpmall商城
基于centos7脚本一键部署单节点gpmall商城,该商城可单节点,可集群,可高可用集群部署,VMware17,虚拟机IP:192.168.200.100 将软件包解压到/root目录 [rootlocalhost ~]# ls dist …...
Mac book英特尔系列?M系列?两者有什么区别呢
众所周知,Mac book有M系列,搭载的是苹果自研的M芯片,也有着英特尔系列,搭载的是英特尔的处理器,虽然从 2020 年开始,苹果公司逐步推出了自家研发的 M 系列芯片,并逐渐将 MacBook 产品线过渡到 M…...
Python unstructured库详解:partition_pdf函数完整参数深度解析
Python unstructured库详解:partition_pdf函数完整参数深度解析 1. 简介2. 基础文件处理参数2.1 文件输入参数2.2 页面处理参数 3. 文档解析策略3.1 strategy参数详解3.2 策略选择建议 4. 表格处理参数4.1 表格结构推断 5. 语言处理参数5.1 语言设置 6. 图像处理参数…...
<项目代码>YOLOv8路面病害识别<目标检测>
YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…...
广告牌和标签学习
效果: 知识学习: entities添加标签label和广告牌billboard label: text:文本添加 font:字体大小和字体类型 fillColor:字体颜色 outlineColor:字体外轮廓颜色 outlineWidth:字体外轮…...
GDB 从裸奔到穿戴整齐
无数次被问道:你在终端下怎么调试更高效?或者怎么在 Vim 里调试?好吧,今天统一回答下,我从来不在 vim 里调试,因为它还不成熟。那除了命令行 GDB 裸奔以外,终端下还有没有更高效的方法ÿ…...
WPF的触发器(Trigger)
WPF(Windows Presentation Foundation)是微软.NET框架的一部分,用于构建Windows客户端应用程序。在WPF中,触发器(Triggers)是一种强大的功能,允许开发者根据控件的状态或属性值来动态改变控件的…...
全能大模型GPT-4o体验和接入教程
GPT-4o体验和接入教程 前言一、原生API二、Python LangchainSpring AI总结 前言 Open AI发布了产品GPT-4o,o表示"omni",全能的意思。 GPT-4o可以实时对音频、视觉和文本进行推理,响应时间平均为 320 毫秒,和人类之间对…...
详解Apache版本、新功能和技术前景
文章目录 一、 版本溯源二、新功能和特性举例1. 模块化和可扩展性增强2. 多处理模块(MPMs)3. 异步支持4. 更细粒度的日志级别控制5. 通用表达式解析器6. HTTP/2支持7. Server Push8. Early Hints9. 更好的SSL/TLS支持10. 更安全的默认设置 三、 技术前景…...
Docker Redis集群3主3从模式
主从集群 docker run -d --name redis-node1 --net host --privilegedtrue -v /home/redis/node1:/data redis:7.0 --cluster-enabled yes --appendonly yes --port 9371docker run -d --name redis-node2 --net host --privilegedtrue -v /home/redis/node2:/data redis:7.0 …...
【Go语言】
type关键字的用法 定义结构体定义接口定义类型别名类型定义类型判断 别名实际上是为了更好地理解代码/ 这里要分点进行记录 使用传值的例子,当两个类型不一样需要进行类型转换 type Myint int // 自定义类型,基于已有的类型自定义一个类型type Myin…...
【Spring Boot】元注解
元注解 1.元注解1.1 Target1.2 Retention1.3 Inherited1.4 Documented1.5 interface 2.自定义注解2.1 创建自定义注解类2.2 实现业务逻辑2.3 使用自定义注解 1.元注解 元注解就是定义注解的注解,是 Java 提供的用于定义注解的基本注解。 注解 说明 Retention是注解…...
基于信号分解和多种深度学习结合的上证指数预测模型
大家好,我是带我去滑雪! 为了给投资者提供更准确的投资建议、帮助政府和监管部门更好地制定相关政策,维护市场稳定,本文对股民情绪和上证指数之间的关系进行更深入的研究,并结合信号分解、优化算法和深度学习对上证指数…...
基于Spring Boot的酒店住宿管理平台
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理酒店客房管理系统的相关信息成为必然。开发…...
游聚对战平台 三国战纪2012CE修改器修改地址
游聚对战平台 三国战纪2012比较全的一次地址。 工具 ce修改器 自行百度下载 1袖箭 2褐色鸡蛋 3毒堂 4飞盘 5火焰弹 6绿色鸡蛋 7金珠 8毒蝎 9毒镖 10铁莲花 11张陵剑 12张角巾 13太清丹经 14黄石公 15九节杖 16隐身衣 17神仙笔 18 玉蜂术(效果不明)19天师…...
Qt Creator中的项目栏
shadow build: [基础]Qt Creator 的 Shadow build(影子构建)-CSDN博客 影子构建:将源码路径和构建路径分开(生成的makefile文件和其他产物都不放到源码路径),以此来保证源码路径的清洁。 实验1: 我创建了两个项目:…...
keepalived+web 实现双机热备
环境:利用keeplived实现web服务器的双机热备(高可用) 注意: (1) 利用keeplivedweb做双击热备(高可用),最少需要两台服务器,可以实现多域名对应一个VIP,并且访问不同域名,显示不同主页…...
关于python的import
在Python中,import语句用于导入其他模块或模块中的特定部分,以便在代码中使用它们。这就可以重用代码,而不是每次都从头开始编写所有的功能。 基本用法 导入整个模块: import module_name 例如: import math print(…...
帕金森后期吞咽困难:破解难题,重拾生活美味!
在这个快节奏的时代,健康成为了我们最宝贵的财富。然而,对于帕金森病患者及其家庭而言,随着病情的进展,尤其是进入后期阶段,吞咽困难成为了他们不得不面对的严峻挑战。今天,就让我们一起走进这个温暖而坚韧…...
类似美团网的网站是怎么做的/黄山网站seo
今天看到《编码:隐匿在计算机软硬件背后的语言》的第十二章:二进制加法器。讲述了全加器,半加器的原理以及如何实现加法。实现加法时所使用的全加器,半加器中包含的所有逻辑门在C语言中都有相应的运算符,就想着能不能利…...
外贸婚纱网站 侵权/产品如何推广
Lunix Shell编程入门 前言 要想玩转类Unix系统,仅仅会基本的常用操作命令还是远远不够的,本文介绍lunix系统下的Shell编程,通过一系列的简单Shell代码示例,一步步入门Shell编程。 一、Shell是什么? Linux系统被比作…...
山东省住房城乡建设厅查询网站/企业管理系统
新建 ctrl n格式化 ctrlshiftf导入包 ctrlshifto 注释 ctrl/,ctrlshift/,ctrlshift\代码上下移动 选中代码alt上/下箭头查看源码 选中类名(F3或者Ctrl鼠标点击)查找具体的类 ctrl shift t查找具体类的具体方法 ctrl o给建议 ctrl1,根据右边生成左边的数据类型,生成方法删除…...
腾讯的网络营销模式/微博seo排名优化
《《转载》》今天刚刚搞明白这个问题,贴出来希望能给一些和我一样不是很懂的人一些参考,可惜的是我用的方法还不是特别方便,以后有了更好的方法会继续和大家分享的。这里我以一个经典的汉诺塔问题为例来进行说明。【问题描述】有三个塔分别标…...
网站开发要学的课程/网络营销活动方案
原文:http://zhacherui56688.blog.sohu.com/113669649.html 财 富 篇 》》根据生命的原理,我有权成为富翁,享受富裕的生活,这真是一件美好的事。>> 我一定会成为亿万富翁,能赐给我这个愿望的无限潜能,…...
做陶瓷的公司网站/站长之家权重
卷积,池化,特征图,实战: LeNet-5分层解析: MLP原理: 较为全面的DL: RBF: RBF课件: BP算法: 感受野:转载于:https://www.cnblogs.com/maggie94/p/6742900.html...