如何在 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. 更安全的默认设置 三、 技术前景…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
