【网络安全】服务基础第二阶段——第五节:Linux系统管理基础----Linux常见应用服务(Apache、数据库)

在Linux系统中,有许多常见的应用服务,它们用于执行各种任务,如网页托管、数据库管理、文件传输等。

  • Apache HTTP Server:用于托管网站和Web应用程序的Web服务器。
  • Nginx:高性能的Web服务器和反向代理服务器,也常用于负载均衡。
  • MySQL/MariaDB:关系型数据库管理系统,用于存储和管理网站或应用程序的数据。
  • PostgreSQL:另一个强大的开源关系型数据库系统。
  • PHP:服务器端脚本语言,主要用于Web开发,常与Apache或Nginx一起使用。
  • Python:一种通用编程语言,用于Web开发(如Django或Flask框架)和系统管理脚本。
  • Java:用于开发跨平台应用程序的编程语言,常用于大型企业级应用。
  • Tomcat:一个Servlet和JSP容器,用于运行Java Web应用程序

目录

一、LAMP

[1.1 Apache环境搭建](#1.1 Apache环境搭建)

[1.1.1 apache下载及基础配置](#1.1.1 apache下载及基础配置)

[1.1.2 Apache配置文件](#1.1.2 Apache配置文件)

[​编辑1.1.3​​​​​​​​​​​​​​ Apache相关命令](#编辑1.1.3 Apache相关命令)

[1.1.4 Apache日志](#1.1.4 Apache日志)

[1.1.5 Apache文件共享](#1.1.5 Apache文件共享)

[1.1.6 Apache访问控制](#1.1.6 Apache访问控制)

[1.1.7 Apache虚拟主机技术](#1.1.7 Apache虚拟主机技术)

[1.2 MySQL环境搭建](#1.2 MySQL环境搭建)

[1.2.1 MySQL下载及初始配置](#1.2.1 MySQL下载及初始配置)

[1.2.2 MySQL使用](#1.2.2 MySQL使用)

[1.2.3 创建数据库](#1.2.3 创建数据库)

[1.3.4 数据库查询](#1.3.4 数据库查询)

[1.3.5 备份及还原数据库](#1.3.5 备份及还原数据库)

[1.3.6 数据库配置文件](#1.3.6 数据库配置文件)

[1.3.7 数据库密码修改](#1.3.7 数据库密码修改)

[1.3.8 数据库权限设置](#1.3.8 数据库权限设置)


一、LAMP

LAMP是一组常用于Web开发的开源软件的缩写,每个字母代表一个组件:

  • L:Linux操作系统,提供了项目部署时所需要的操作系统环境
  • A:Apache服务器:WEB应用程序的服务器,提供软件源文件的存放地,提供了程序访问时所需要的端口(接口)
  • M:MySQL数据库,提供项目或者程序在使用时数据的存储与解析的工作
  • P:PHP/Python开发语言,提供软件或者项目程序部署时所需要的开发环境的支持

概述:LAMP环境,主要给WEB端应用程序(各种类型的网站项目),提供了一个部署安装和使用的平台。

解释:可以理解为:只要把这四个软件安装完成,就形成了LAMP环境,环境有了之后,只需要把WEB应用程序对应的源文件,部署在apache服务器上即可,这样用户就可以直接访问该网站

1.1 Apache环境搭建
1.1.1 apache下载及基础配置

因为是软件的在线安装,需要借助yum命令来完成,最低版本的使用:centos7,所以在部署之前,先查看当前系统是否满足于环境的需求

我的网络yum源是华为云,阿里之类的网络源也满足要求

确保yum满足要求后,可以使用yum命令来下载http服务

yum -y install httpd
或
yum  install  httpd  httpd-devel 
//不仅安装apache,还把相关的开发工具包(devel)一并做安装

这里我用了第二条,一并安装相关开发工具包

有时启动apache服务可能会出现报错,这时候我们可以使用systemctl status httpd.service查看服务状态,这可能会提供一些关于为什么服务启动失败的线索

​​​​​​​根据systemctl status httpd.service 输出,Apache HTTP Server(httpd)服务启动失败,错误信息表明主要问题是80端口已经被占用。使用以下命令来查找哪个进程正在监听端口80:

sudo ss -tulnp | grep :80
或者使用netstat(如果已安装)
sudo netstat -tulnp | grep :80

现在让我们来了解apache的配置文件,使用rpm -ql httpd,我们可以看到一个conf文件夹,Apache HTTP Server 的配置文件主要包含在 httpd.conf 文件以及一系列包含文件中。这些文件定义了 Apache 的行为,包括服务器的行为、模块配置、虚拟主机设置、访问控制等

httpd.conf 文件由多个部分组成,包括:

  • 全局配置:设置全局服务器参数,如服务器根目录、监听端口、服务器令牌、文档根目录等。
  • 模块配置 :加载和配置 Apache 模块,这些模块提供额外的功能,如 mod_rewritemod_sslmod_proxy 等。
  • 目录配置 :使用 <Directory> 指令设置特定目录的访问权限和行为。
  • 虚拟主机:配置虚拟主机,允许单个 Apache 实例托管多个域名。
  • 访问控制 :使用 <Limit><Require>AllowOverride 等指令控制访问。
  • 日志配置:设置日志文件的位置和格式。
  • 性能调整 :调整服务器的性能参数,如 KeepAliveMaxClientsTimeout 等。
  • 安全设置 :配置安全相关的设置,如 ServerTokensServerSignature

在rpm -ql httpd后继续往下翻,我们能看到许多特定文件夹。对于apache的目录和文件功能:

  • lib64lib64 目录通常用于存放 64 位系统的库文件。在 64 位 Linux 系统中,这个目录包含了系统运行所需的共享库,包括 Apache 模块和其他应用程序的依赖库。
  • /var/log/httpd :这是 Apache 服务器的日志文件存放目录。默认情况下,Apache 的访问日志和错误日志都会存放在这个目录下。例如,access_logerror_log 文件通常可以在这里找到。
  • /var/www/html:这是 Apache 的默认网站内容目录,也称为文档根目录。Web 服务器上的网页和资源通常存放在这个目录下,这些内容可以通过 Web 浏览器访问。

现在我们想要对httpd.conf 文件进行配置,但是当我们使用vim进入后,发现有太多的注释(#开头的语句),很影响我们配置文件,那现在我们需要对配置文件进行处理:

  • grep -v ^# /etc/httpd/conf/httpd.conf :这个命令用于过滤掉 httpd.conf 文件中以 # 符号开头的注释行。^# 是一个正则表达式,匹配任何以 # 开头的行。
  • grep -v "#" /etc/httpd/conf/httpd.conf :这个命令同样用于过滤掉 httpd.conf 文件中的注释行,但它不区分 # 符号的位置,会移除所有包含 # 的行。
  • grep -v "#" /etc/httpd/conf/httpd.conf | grep -v ^$ :这个命令组合首先移除 httpd.conf 文件中的注释行,然后进一步移除所有空行(^$ 匹配空行)

特定配置指令:

  • ServerRoot "/etc/httpd"ServerRoot 指令定义了 Apache 服务器的根目录。这个目录包含了 Apache 的配置文件、证书、日志等。在这个例子中,ServerRoot 设置为 /etc/httpd,意味着所有相对路径的配置项都是基于这个目录
1.1.2 Apache配置文件

在去除掉了#的影响后,我们得到了一个简介美观的配置信息,现在我们来分析这些配置信息有什么作用

以下配置指令定义了 Apache 服务器的基本行为和设置(默认情况):

ServerRoot "/etc/httpd"  #软件的根目录(相对路径,就是以此开头)
----------------------
Listen 80    	#监听端口
----------------------
User apache	#启动用户
Group apache	#启动用户组
----------------------
ServerAdmin root@localhost	# 服务相关信息发邮件
----------------------
<Directory />
    AllowOverride none      #根路径权限设置	
    Require all denied
</Directory>
----------------------
documentRoot "/var/www/html"  #默认发布路径
----------------------
<Directory "/var/www/html">  #默认发布路径,功能限制
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
------------------------
ErrorLog "logs/error_log" 	#错误日志
CustomLog "logs/access_log" combined
------------------------
  • ServerRoot :指定 Apache 软件的根目录。所有相对路径的配置项都是基于这个目录。在这个例子中,配置为 "/etc/httpd"
  • Listen:指定 Apache 服务器监听的端口。在这个例子中,服务器监听 80 端口,这是 HTTP 服务的默认端口。
  • UserGroup :指定启动 Apache 服务的用户和用户组。在这个例子中,使用 apache 用户和组。
  • ServerAdmin:指定服务器管理员的电子邮件地址,用于接收服务相关信息。
  • <Directory /> :配置根目录(/)的访问权限。在这个例子中,不允许任何覆盖(AllowOverride none)并且拒绝所有访问(Require all denied)。
  • DocumentRoot :指定 Apache 服务器的默认发布路径,通常是 Web 内容的根目录。在这个例子中,设置为 /var/www/html
  • <Directory "/var/www/html"> :配置默认发布路径的访问权限和行为。在这个例子中,允许索引视图(Indexes),允许跟踪符号链接(FollowSymLinks),并且授予所有访问权限(Require all granted)。
  • ErrorLogCustomLog :指定错误日志和访问日志的存放位置。在这个例子中,错误日志存放在 logs/error_log,访问日志存放在 logs/access_log,并且使用 combined 格式记录访问信息。

在所有配置步骤完成后,我们使用systemctl start httpd启动apache服务,现在访问127.0.0.1,会看到一个欢迎页面,除此之外无其他内容

这是因为现在在默认发布路径下还空无一物,我们进入到/var/www/html(默认发布路径)目录,ls查看,发现现在html目录下什么也没有,这也是为什么只能显示一个apache官方的测试网页。现在我们使用cp粘贴命令将一个我们想要的 index.html 页面粘贴到默认发布路径下,再次访问就得到了我们想要的新页面。


当然,此时用其他主机去访问本机的ip地址(前提是两台主机可以相互ping通),也可以访问到新的页面

1.1.3​​​​​​​​​​​​​​ Apache相关命令

  • 启动Apache服务器:sudo systemctl start httpd
  • 重启Apache服务器:sudo systemctl restart httpd
  • 停止Apache服务器:sudo systemctl stop httpd
  • 查看Apache服务器状态:sudo systemctl status httpd
  • 重新加载Apache配置文件:sudo systemctl reload httpd
  • 启用系统启动时自动启动:sudo systemctl enable httpd
  • 禁用自动启动:sudo systemctl disable httpd

有时候修改完配置文件后,需要重启服务才能生效,所以上述命令需要了解

1.1.4 Apache日志

安装配置好Apache后,我们来了解一下Apache的日志

首先我们进入/etc/httpd目录下,在这里我们可以看到一个"log",浅蓝色代表链接(通过ll可以看到这个链接指向的是var下的位置),我们进入这个链接


在这里我们可以看到两个日志文件,access(访问日志)和error(错误日志),我们使用cat命令查看一下访问日志,可以看到很详细的访问记录,包括:

  • 客户端的IP地址
  • 请求发生的时间
  • 请求的类型(GET、POST)和请求的资源
  • HTTP状态码
  • 使用的浏览器等
1.1.5 Apache文件共享

Apache Web服务器可以通过配置文件设置来实现文件共享功能。这通常涉及到设置特定的目录权限、启用目录索引以及配置适当的访问控制。

首先,我们需要确定一个目录用于文件共享。这个目录可以是现有的,也可以是新创建的。例如,在本实验中我选择使用Apache的默认文档根目录/var/www/html

打开Apache的主配置文件(通常是 httpd.conf,位置可能因安装方式和操作系统而异),进行以下配置:

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
  • Options Indexes FollowSymLinks: 这一行启用了目录索引,允许用户浏览目录下的文件列表,并允许Apache跟随符号链接。
  • AllowOverride None: 禁止.htaccess文件覆盖此目录块的设置。
  • Require all granted : 允许所有用户访问此目录

我将之前关于文件夹的配置打了3个#,以便后续需要时恢复。修改保存了配置文件后,需要重新加载Apache服务使其生效。可以通过直接重启或重新加载Apache配置使其生效

sudo systemctl reload httpd
或
sudo systemctl restart httpd

现在,我在html(默认发布路径)下再建一个文件夹,并将用户和密码拷贝到此文件夹下(这里做演示使用,现实中不推荐!)


现在在来访问 端口号/你新建的共享文件夹名称,发现可以共享访问了


当然,你现在访问shadow是拒绝访问的,这是因为,即使打开了共享,我们从web服务器是以匿名用户的身份访问的,而匿名用户是没有读写执行权限的


想要解决这个问题也很方便,我们已知,apache的默认启动用户和启动组名为apache,你并不需要直接赋予shadow文件Other用户rwx权限,可以将所属者root改为apache,再赋予权限chmod 700(只赋予所有者权限,在一定程度上保护了安全),这样就可以访问了(不推荐!!!)

1.1.6 Apache访问控制

Apache Web服务器提供了强大的访问控制功能,允许管理员限制对特定资源的访问。这些控制可以通过修改Apache的配置文件来实现。

关于访问控制,有一些常用的方法:其一就是基于IP地址的访问控制,这个设置仍是在.conf配置文件中修改,将Require修改为允许访问的ip地址(此方法不推荐),或者拒绝特定的IP地址。

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require ip 192.168.1.0/24
</Directory>
这将只允许192.168.1.0/24网段内的IP地址访问该目录

Require not ip 192.168.1.100

当然,你也可以通过主机名来控制访问:

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require host example.com
</Directory>
这将只允许从example.com域名访问该目录

这里我们介绍另一种方法(其实大同小异)。首先我们需要安装Apache手册

sudo yum install httpd-manual

在手册中我们可以看到有两种方法执行访问控制,老版本他提示我们即将弃用,新版本本质上也是在配置文件中修改执行访问控制(新版本的RequireAll应该写在/var/www/html下)。

下载手册,之后重启apache服务,访问manual,可以看到手册页面,我们选择Access Control

将新版本中给我们的代码粘贴到conf配置文件中,例如在这里,我不想让我们kali机访问,那就把kali机的IP封掉,保存并重启apache服务。现在我们再用kali去访问是无法显示页面的。

1.1.7 Apache虚拟主机技术

Apache 虚拟主机技术允许你在一台服务器上托管多个网站。每个网站都有自己的域名,但它们共享同一个 IP 地址。Apache 支持两种类型的虚拟主机:基于名称的虚拟主机(Name-Based Virtual Hosts)和基于 IP 地址的虚拟主机(IP-Based Virtual Hosts)。这里介绍基于名称的虚拟主机。

在基于名称的虚拟主机配置中,多个域名共享同一个服务器 IP 地址。Apache 通过 HTTP 请求中的 Host 头部来区分不同的网站。

首先我们来为每个网站创建一个独立的目录

sudo mkdir -p /var/www/site1.com/public_html
sudo mkdir -p /var/www/site2.com/public_html

编辑Apache配置文件,为每个网站添加一个<VirtualHost> 块。

<VirtualHost *:80>
    ServerAdmin webmaster@site1.com
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/site1.com/public_html
    ErrorLog /var/www/site1.com/logs/error.log
    CustomLog /var/www/site1.com/logs/access.log combined
</VirtualHost>

对第二个网站也是一样的操作,更改域名和路径

创建了新的配置文件后,确保启用他们,并重新加载Apache使配置生效

sudo systemctl enable site1.conf
sudo systemctl enable site2.conf

sudo systemctl reload httpd


现在虚拟主机配置完成了,可以通过site1和site2访问,当然,我没有在其发布路径下编写html文件所以展示了默认页面,如果你想进一步操作可以为站点配置不同的index.html

1.2 MySQL环境搭建
1.2.1 MySQL下载及初始配置

对于数据库,这里推荐MariaDB,MariaDB是MySQL的一个替代品,它与MySQL兼容,并且通常被认为在某些方面性能更好。CentOS 7默认仓库中包含MariaDB

使用yum命令安装Maria DB服务器

sudo yum install mariadb-server

​​​​​​​下载完成后启动服务,检查是否已经启动成功

sudo systemctl start mariadb

在首次启动MySQL或MariaDB时,通常需要设置root用户的密码。使用mysqladmin -u 用户名 -p password "新密码"来设置管理员和密码。这里你可以直接选择初始化MariaDB:

首先确保MariaDB服务已启动,运行初始化命令,运行 mysql_secure_installation 脚本来初始化数据库并增强安全性。这个脚本会引导你完成几个步骤

sudo mysql_secure_installation

首先要求你设置root密码。输入一个强密码并记住它。如果默认密码为空,你可以直接按回车键

脚本会询问你是否要删除匿名用户。建议选择 Yes

询问你是否禁止 root 用户远程登录。建议选择 Yes

脚本会询问你是否要删除测试数据库。建议选择 Yes

询问你是否要重新加载权限表。建议选择 Yes

初始化完成后,你可以验证是否成功。使用新设置的 root 密码尝试登录 MariaDB,输入密码后,如果成功登录,说明初始化成功

1.2.2 MySQL使用

进入MariaDB后,我们可以执行多种命令来对其进行操作

查看当前有多少库

> show databases;

MariaDB [(none)]>,这意味着你已经成功登录到 MariaDB 服务器,并且当前没有选中任何特定的数据库。上面的显示表示现在有三个数据库

  • information_schema:这是一个特殊的数据库,它包含了关于其他所有数据库的元数据(如表结构、列、索引等)。这是每个 MariaDB 服务器自带的系统数据库。
  • mysql:这也是一个系统数据库,用于存储用户账户、权限、MariaDB 的系统配置等信息。在初始化过程中,你可能会修改这个数据库中的信息,例如设置 root 密码、删除匿名用户等。
  • performance_schema:这是一个可选的系统数据库,用于收集和存储数据库性能相关的信息。它可以帮助数据库管理员监控和优化数据库的性能

进入库

> use mysql;

这表示你已经成功地切换到了 mysql 数据库。mysql 数据库是一个特殊的系统数据库,它存储了关于用户账户、权限、MariaDB 服务器的系统配置等信息

查看表

> show tables;


在 MariaDB 中,执行 SHOW TABLES; 命令会列出当前选定数据库(在这个例子中是 mysql 数据库)中所有的表。根据你提供的输出,mysql 数据库包含多个表,每个表都有特定的用途。

查看表内容

> select * from mysql.user \G;

查看表结构

desc user;

1.2.3 创建数据库

了解了基本的查看命令后,我们可以试着自己创建一个数据库

CREATE DATABASE JIUye;
//首先创建一个数据库,选择此数据库以便在其中创建表
USE JIUye;

//创建一个简单的员工表
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    position VARCHAR(100)
);

//向其中插入数据
INSERT INTO employees (name, position) VALUES ('111', 'employer');
INSERT INTO employees (name, position) VALUES ('222', 'employee');

现在,我们就得到了一个员工表

如果我们要修改表结构,可以使用:

ALTER TABLE employees ADD COLUMN age INT;  //添加列
ALTER TABLE employees DROP COLUMN age;  //删除列
ALTER TABLE employees CHANGE old_column_name new_column_name INT;  //修改列名
ALTER TABLE employees MODIFY COLUMN name VARCHAR(150);  //修改数据类型

要更改表的数据内容,可以使用:

UPDATE employees SET position = 'xxx' WHERE name = 'xxx'; //更新数据
DELETE FROM employees WHERE name = 'xxx';  //删除数据
1.3.4 数据库查询

在上面我们一直使用* 来查,这表示查询所有内容,但有时候我们想要特定查询,那就需要下面的命令

如果你只对表中的特定列感兴趣,你可以指定列名,而不是使用星号。例如,如果你只想显示员工的名字和职位,可以执行:

SELECT name, position FROM employees;

你可以使用 WHERE 子句来过滤结果,只显示符合特定条件的记录。例如,如果你只想显示职位为"经理"的员工记录,可以执行:

SELECT * FROM employees WHERE position = 'employer';

此外,还可以选择从几行几列开始检索:

select name from userlist limit 0,2;
//这里的0,2表示从第0行开始检查,显示2列
1.3.5 备份及还原数据库

注意,备份数据库不是在mysql数据库里面运行的命令,首先我们退出数据库,在外面进行数据库备份。在外面备份好的位置可以看到一个备份文件。


我们可以使用file命令查看一下备份出来的文件格式。

输出结果显示 JIUye.employees.sql 是一个 ASCII 文本文件。这意味着该文件是一个文本文件,可以用任何文本编辑器打开和编辑。这也就意味着我们可以直接在备份文件中添加一些信息,我们使用vim编辑器来添加一个用户

我们可以看到在备份文件中记录了我们对数据库的操作,现在如果我们想再添加一个"经理",那我们就可以在insert语句后继续添加数据。

现在我们来还原数据库,使用命令导入备份文件

mysql -u root -p JIUye < /tmp/JIUye.employees.sql

现在,我们可以验证一下是否导入成功了,登陆我们的数据库,选择JIUye,然后使用SELECT * FROM your_table_name;来查询一下数据是否符合预期

可以看到,多了一个"经理",确实已经更新成功。

1.3.6 数据库配置文件

数据库的配置文件在/etc下,我们使用vim打开 my.cnf ,这就是数据库的配置文件

  • datadir=/var/lib/mysql:这行指定了数据库文件存储的目录。默认情况下,MariaDB/MySQL 将所有数据库文件存储在 /var/lib/mysql 目录下
  • socket=/var/lib/mysql/mysql.sock:这行定义了 Unix 套接字文件的路径,用于本地进程间通信。当客户端和服务器在同一台机器上时,它们可以通过这个套接字文件进行通信。
  • symbolic-links=0:这行表示禁用符号链接。出于安全考虑,建议关闭符号链接,因为它们可能会导致安全风险,例如允许访问不属于数据库文件的其他文件系统部分。
  • [mysqld_safe]:这是一个配置段,专门用于 mysqld_safe 脚本,该脚本用于启动数据库服务器。包括错误日志的路径等。
1.3.7 数据库密码修改

对数据库的密码修改需要注意以下几点:

  1. 首先必须是root用户
  2. 关闭mysql
  3. 以安全模式启动mysql

如果你忘记了数据库的密码,现在想要重新修改密码,应该怎么做?

首先我先停止掉mariadb的服务,以安全模式启动MariaDB,安全模式启动通常意味着跳过一些检查和加载的模块,你可以使用 --skip-grant-tables 选项来启动

在安全模式下,你可以直接使用mysql客户端工具登陆到数据库,而不需要密码

mysql -u root

可以看到,此时我们可以直接使用mysql -u root登陆,不再需要输入密码了。使用 --skip-grant-tables 参数启动数据库时,你确实可以查看和修改数据库中的任何数据,但是这种状态下的数据库服务器是不安全的,因为任何能够连接到数据库的人都可以执行任何操作,包括删除数据或执行其他潜在的危险操作。

通常,我们只有在以下情况下才会使用 --skip-grant-tables 参数:

  • 重置忘记的密码:如果你忘记了 root 用户或其他用户的密码,可以使用这个参数启动数据库,然后重置密码。
  • 修复权限问题:如果权限表损坏或配置错误,可能需要以无权限检查的方式启动数据库来进行修复。
  • 恢复数据:在数据丢失或损坏的情况下,可能需要绕过权限检查来恢复数据。

在执行完必要的操作后,你应该立即关闭数据库服务器,并以正常模式重新启动,以恢复权限检查和保护数据库的安全。记住,以 --skip-grant-tables 参数启动数据库时,应该确保数据库不会暴露在公共网络中,以避免潜在的安全风险。

我们进入到mysql数据库,show tables,来查看mysql库中的所有表,可以看到在其中有一个user表,相关的密码和权限就存储在这里。

其实现在,我们可以使用SELECT Host, password, User FROM mysql.user;命令来查看user中的信息,如权限,密码等。或者直接将所有用户的所有信息列出来,我们可以在password列中看到加密后的密码,这里的密码是采用了哈希加密,我们可以在一些网站中破解这个加密的密码,如cmd5等,这里暂不演示


这里的host表示的是:允许哪些用户登陆,因为我之前在初始化的时候禁止了匿名用户登陆,所以这里经过筛选后只有三个用户可登陆。

当然,允许匿名用户登陆是不安全的,我这里没有匿名用户是因为我在初始化的时候禁止了匿名用户,如果你保持了数据库的初始配置,那你在上面的页面中应该还会有密码为空的用户,如果你想删除他们,可以使用命令

>delete from user where password='';
//删除空白账号

至此,其实你已经得到了旧的数据库密码,但如果你仍想执行更改密码的操作,可以使用

UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root' AND Host='localhost';

对于MariaDB 10.1.20之后的版本使用
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

之后刷新权限使更改生效

FLUSH PRIVILEGES;

完成密码更改后,使用exit退出mysql客户端,停止安全模式下的MariaDB服务,重新启动

exit;
sudo systemctl stop mysql
sudo systemctl start mysql
1.3.8 数据库权限设置

1、要求对class1数据库中employees表,zhq用户具有查看权限,但是没有修改权限,同时要求tom用户必须只能从127.16.130.141(这里是我win2019的地址,你可以根据具体情况具体设置你允许登陆的地址)中登陆。登陆的时候密码是123456

首先我们以root用户登陆到MariaDB服务器,如果zhq用户还不存在,你需要先创建这个用户。可以使用如下命令:

CREATE USER 'zhq'@'127.16.130.141' IDENTIFIED BY '123456';

接下来我们使用GRANT 命令授予 zqh 用户对 class1 数据库中 employees 表的查看(SELECT)权限。之后同样刷新一下使权限生效

GRANT SELECT ON class1.employees TO 'zhq'@'172.16.130.141' IDENTIFIED BY '123456';


现在,在远程机器上,你可以尝试使用以下命令来验证 tom 用户的登录和权限:

mysql -u zhq -p -h 172.16.130.174

注意: 当你执行这个命令时,系统会提示你输入密码。输入密码 123456 后,你应该能够登录到 MySQL/MariaDB 服务器。

请注意,你提供的远程登录命令中的主机地址是 172.16.130.141,但是在授权命令中使用的主机地址是 172.16.130.174。确保 zhq 用户只能从 172.16.130.141 这个 IP 地址登录(从win2019登陆),如果你尝试从其他 IP 地址登录,包括 172.16.130.174,将会失败。

登录后,你可以尝试查询表来验证 zhq 用户是否具有查看权限:

USE class1;
SELECT * FROM employees;

能够成功执行查询,说明查看权限已经正确设置。如果尝试修改表(如 INSERTUPDATEDELETE)的操作失败,说明没有修改权限,这也是预期的结果。

之后如果想要撤销用户的权限,我们需要用到revoke命令,我们使用help revoke查看一下格式要求


根据它上面给我们的格式,我们来试着撤销用户的权限

或者,我们也可以使用非交互式命令(即不在mysql中撤销权限)

撤销用户权限后,我们应该还可以使用远程登录到数据库,但是已经没有查看的权限了。

如果想要删除用户,可以使用drop user命令

​​​​​​​

至此,关于数据库的知识大致讲解完毕

对于LAMP,还有php没有讲解,关于php和平台的整体搭建,我们留到下节再说。

相关推荐
南猿北者4 分钟前
Docker Volume
运维·docker·容器
矛取矛求3 小时前
Linux如何更优质调节系统性能
linux
内核程序员kevin4 小时前
在Linux环境下使用Docker打包和发布.NET程序并配合MySQL部署
linux·mysql·docker·.net
kayotin4 小时前
Wordpress博客配置2024
linux·mysql·docker
Ztiddler5 小时前
【Linux Shell命令-不定期更新】
linux·运维·服务器·ssh
小小不董5 小时前
Oracle OCP认证考试考点详解082系列16
linux·运维·服务器·数据库·oracle·dba
IPdodo全球网络5 小时前
如何利用静态住宅IP优化Facebook商城的网络稳定性与运营效率
运维·服务器
a1denzzz5 小时前
Linux系统的网络设置
linux·服务器·网络
运维&陈同学6 小时前
【模块一】kubernetes容器编排进阶实战之k8s基础概念
运维·docker·云原生·容器·kubernetes·云计算
ac.char6 小时前
在CentOS下安装RabbitMQ
linux·centos·rabbitmq