MySQL 用户分析及权限管理

0x01 MySQL 用户分析

Linux一切皆文件,每个进程、服务都有其对应的文件,每个文件又有其对应的属主和属组。mysql也不例外,在配置mysql时我们通过以下命令为mysql创建了一个无法登录的用户群及用户作为其属组和属主。可以参考我之前的文章:LNMP环境搭建(基础加固),里面有配置的详细过程以及部分相关知识的讲解。

groupadd mysql
useradd -M -g mysql -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql

配置完成后我们可以使用命令/usr/loacl/mysql/bin/mysql -u root登录mysql并为其设置密码(初次登录)。设置密码后再次登录需使用命令/usr/local/mysql/bin/mysql -u root -p。登录成功便进入mysql控制台。

此处初学者易将其与linux的root搞混。虽然登录linux用的是root,登录mysql用的也是root,但两者并不是同一个root。虽然是以root登录的mysql,但mysql的basedir的user:group仍是之前配置的mysql:mysql,这点是不会随之改变的。

在这里mysql是建立在linux之上的。我们首先使用的是linux的root登录了linux,进入了linux下root的shell。可以使用命令echo $SHELL查看用户当前使用的shell的类型。
在这里插入图片描述
可以使用命令ls -ld /bin/bash查看目录的权限和归属。
在这里插入图片描述
使用命令ls -ld /root查看root主目录的权限和归属。
在这里插入图片描述
然后我们使用的是mysql的root登录了mysql,进入了mysql的控制台,也可以理解为mysql下root的shell。
在这里插入图片描述
而linxu下mysql的shell是我们之前配置的/sbin/nologin。我们可以使用命令cat /etc/passwd查看用户默认shell。
在这里插入图片描述
此shell是无法用来登录的。
在这里插入图片描述
使用命令ls -ld /usr/local/mysql查看目录的权限和归属。
在这里插入图片描述
我们可以使用命令cat /etc/shells查看系统支持的shell类型。
在这里插入图片描述
其实这就类似与高中物理的参考系问题。以linux为参考系,mysql的user:group就是我们最初配置的mysql:mysql。以mysql为参考系,mysql的user就是我们登录mysql时的用户,在我所举的例子中是root。

关于目录权限的应用在我之前的文章MySQL 文件读写中有所体现。例如通过上面所查看的权限得知,mysql不具有对/root目录的读写权。

0x02 Nginx 用户分析

nginx运行后可以指定用户。比如说一个静态网页服务器的文件目录的不同用户拥有不同的访问权限,使用nginx指定的用户就可以有权限对此目录进行读写。但是运行nginx的时候并没有像mysql一样要求输入用户名、密码之类的。那nginx是怎么指定用户的呢?

启动时,Nginx 主进程(master process)会以root权限运行,之后主进程会读取nginx.conf文件中user模块的配置,nginx会使用这个user模块中指定的用户启动工作进程( worker process)。

那为什么主进程需要使用root来运行呢?

因为只有root可以监听小于1024的端口。而通常webserver使用80/443端口,这也就是为什么需要使用root来运行了。

我们可以使用命令ps aux|grep nginx查看nginx相关进程
在这里插入图片描述
这里可以看到nginx的主进程和工作进程。主进程主要读取和评估配置文件的正确性以及管理工作进程。而工作进程才是真正的网络请求处理的进程。

如果主进程使用root运行,那么nginx将会调用setuid()和setgid()去设置user和group。如果group没有特别指定,那么nginx将使用user的名称设置group。user和group默认为nobody和nogroup。安装nginx的时候,可以使用命令./configure --user=USER --group=GROUP指定user和group。也可以在nginx安装结束后,使用命令vi nginx.conf设置user参数为user user [group];
在这里插入图片描述
此处关于php的配置同nginx,我前面的文章中有详细的配置过程,此处不再赘述。

同样地,使用命令ps aux|grep nginx查看mysql相关进程。
在这里插入图片描述
这里可以看到第一个进程的用户为root,对应mysqld_safe。第二个进程的用户才是mysql,对应mysqld。这又是为什么呢?

这里需要介绍几个概念。

1.mysqld_safe(启动mysqld服务)
在unix机器上,MySQL官方推荐使用mysqld_safe启动mysqld服务。mysqld_safe增加了一些安全特性,比如它会在遇到错误时重启mysqld服务,并把运行时的信息记录到error log中。

mysqld_safe is the recommended way to start a mysqld server on Unix. mysqld_safe adds some safety features such as restarting the server when an error occurs and logging runtime information to an error log.

2.mysqld(启动mysql服务)

是SQL后台程序(即MySQL服务器)。要想使用客户端程序 mysql,该程序必须运行。因为客户端通过连接服务器来访问数据库。总之,mysqld是mysql的守护进程,是服务端程序。

it's a server daemon. this is the database server main binary (executable).

3.mysql(命令行工具)

交互式输入SQL语句或从文件以批处理模式执行它们的命令行工具。总之,mysql是命令行客户端程序。

 it's a commandline (administration) tool.

mysql的默认端口号是3306(可以编辑用户目录下的my.cnf文件进行修改)。综上,我们不难理解为什么第一个进程为root,而第二个进程才为mysql。

MySQL 权限管理

关于MySQL权限管理的具体操作,网上有很多相关资料可供大家学习。以下提供部分链接供大家参考。

MySQL之权限管理 - I’m Me! - 博客园
mysql grant 用户权限总结 - breave wong - 博客园
Mysql 用户权限管理 - keme - 博客园

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值