当前位置: 首页 > news >正文

如何在 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 数据库

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 有许多在 Linux 和类 Unix 系统上可用的 SQL 数据库语言实现。MySQL 和 MariaDB 是在服务器环境中部署关系型数据库的两个流行选项…...

CSS 样式 box-sizing: border-box; 用于控制元素的盒模型如何计算宽度和高度

文章目录 box-sizing: border-box; 的含义默认盒模型 (content-box)border-box 盒模型 在微信小程序中的应用示例 在微信小程序中&#xff0c;CSS 样式 box-sizing: border-box; 用于控制元素的盒模型如何计算宽度和高度。具体来说&#xff0c; 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日&#xff0c;作者&#xff1a;Vara Lakshmi Bayanagari. 这篇博客解释了如何从头开始使用 Hugging Face 库和 PyTorch 后端在 AMD GPU 上为英文语料(WikiText-103-raw-v1)预训练…...

鸿蒙是必经之路

少了大嘴的发布会&#xff0c;老实讲有点让人昏昏入睡。关于技术本身的东西&#xff0c;放在后面。 我想想来加把油~ 鸿蒙发布后褒贬不一&#xff0c;其中很多人不太看好鸿蒙&#xff0c;一方面是开源性、一方面是南向北向的利益问题。 不说技术的领先点&#xff0c;我只扯扯…...

Java项目实战II基于微信小程序的马拉松报名系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 马拉松运动…...

家用wifi的ip地址固定吗?换wifi就是换ip地址吗

在探讨家用WiFi的IP地址是否固定&#xff0c;以及换WiFi是否就意味着换IP地址这两个问题时&#xff0c;我们首先需要明确几个关键概念&#xff1a;IP地址、家用WiFi网络、以及它们之间的相互作用。 一、家用WiFi的IP地址固定性 家用WiFi环境中的IP地址通常涉及两类&#xff1a…...

codeforces _ 补题

C. Ball in Berland 传送门&#xff1a;Problem - C - Codeforces 题意&#xff1a; 思路&#xff1a;容斥原理 考虑 第 i 对情侣组合 &#xff0c;男生为 a &#xff0c;女生为 b &#xff0c;那么考虑与之匹配的情侣 必须没有 a | b &#xff0c;一共有 k 对情侣&#x…...

DataSophon集成ApacheImpala的过程

注意: 本次安装操作系统环境为Anolis8.9(Centos7和Centos8应该也一样) DataSophon版本为DDP-1.2.1 整合的安装包我放网盘了: 通过网盘分享的文件&#xff1a;impala-4.4.1.tar.gz等2个文件 链接: https://pan.baidu.com/s/18KfkO_BEFa5gVcc16I-Yew?pwdza4k 提取码: za4k 1…...

深入探讨TCP/IP协议基础

在当今数字化的时代&#xff0c;计算机网络已经成为人们生活和工作中不可或缺的一部分。而 TCP/IP 协议作为计算机网络的核心协议&#xff0c;更是支撑着全球互联网的运行。本文将深入探讨常见的 TCP/IP 协议基础&#xff0c;带你了解计算机网络的奥秘。 一、计算机网络概述 计…...

《Windows PE》7.4 资源表应用

本节我们将通过两个示例程序&#xff0c;演示对PE文件内图标资源的置换与提取。 本节必须掌握的知识点&#xff1a; 更改图标 提取图标资源 7.4.1 更改图标 让我们来做一个实验&#xff0c;替换PE文件中现有的图标。如果手工替换&#xff0c;一定是先找到资源表&#xff0c;…...

【重生之我要苦学C语言】猜数字游戏和关机程序的整合

今天来把学过的猜数字游戏和关机程序来整合一下 如果有不明白的可以看往期的博客 废话不多说&#xff0c;上代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <time.h> #include <stdlib.h> #include <string.h> void…...

基于centos7脚本一键部署gpmall商城

基于centos7脚本一键部署单节点gpmall商城&#xff0c;该商城可单节点&#xff0c;可集群&#xff0c;可高可用集群部署&#xff0c;VMware17&#xff0c;虚拟机IP&#xff1a;192.168.200.100 将软件包解压到/root目录 [rootlocalhost ~]# ls dist …...

Mac book英特尔系列?M系列?两者有什么区别呢

众所周知&#xff0c;Mac book有M系列&#xff0c;搭载的是苹果自研的M芯片&#xff0c;也有着英特尔系列&#xff0c;搭载的是英特尔的处理器&#xff0c;虽然从 2020 年开始&#xff0c;苹果公司逐步推出了自家研发的 M 系列芯片&#xff0c;并逐渐将 MacBook 产品线过渡到 M…...

Python unstructured库详解:partition_pdf函数完整参数深度解析

Python unstructured库详解&#xff1a;partition_pdf函数完整参数深度解析 1. 简介2. 基础文件处理参数2.1 文件输入参数2.2 页面处理参数 3. 文档解析策略3.1 strategy参数详解3.2 策略选择建议 4. 表格处理参数4.1 表格结构推断 5. 语言处理参数5.1 语言设置 6. 图像处理参数…...

<项目代码>YOLOv8路面病害识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…...

广告牌和标签学习

效果&#xff1a; 知识学习&#xff1a; entities添加标签label和广告牌billboard label&#xff1a; text&#xff1a;文本添加 font&#xff1a;字体大小和字体类型 fillColor&#xff1a;字体颜色 outlineColor&#xff1a;字体外轮廓颜色 outlineWidth&#xff1a;字体外轮…...

GDB 从裸奔到穿戴整齐

无数次被问道&#xff1a;你在终端下怎么调试更高效&#xff1f;或者怎么在 Vim 里调试&#xff1f;好吧&#xff0c;今天统一回答下&#xff0c;我从来不在 vim 里调试&#xff0c;因为它还不成熟。那除了命令行 GDB 裸奔以外&#xff0c;终端下还有没有更高效的方法&#xff…...

WPF的触发器(Trigger)

WPF&#xff08;Windows Presentation Foundation&#xff09;是微软.NET框架的一部分&#xff0c;用于构建Windows客户端应用程序。在WPF中&#xff0c;触发器&#xff08;Triggers&#xff09;是一种强大的功能&#xff0c;允许开发者根据控件的状态或属性值来动态改变控件的…...

全能大模型GPT-4o体验和接入教程

GPT-4o体验和接入教程 前言一、原生API二、Python LangchainSpring AI总结 前言 Open AI发布了产品GPT-4o&#xff0c;o表示"omni"&#xff0c;全能的意思。 GPT-4o可以实时对音频、视觉和文本进行推理&#xff0c;响应时间平均为 320 毫秒&#xff0c;和人类之间对…...

详解Apache版本、新功能和技术前景

文章目录 一、 版本溯源二、新功能和特性举例1. 模块化和可扩展性增强2. 多处理模块&#xff08;MPMs&#xff09;3. 异步支持4. 更细粒度的日志级别控制5. 通用表达式解析器6. HTTP/2支持7. Server Push8. Early Hints9. 更好的SSL/TLS支持10. 更安全的默认设置 三、 技术前景…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...