如何在 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. 更安全的默认设置 三、 技术前景…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
