什么是 debian-sys-maint MySQL 用户(及更多)?

什么是 debian-sys-maint MySQL 用户(及更多)?

我已经被 Ubuntu 存储库安装的 mysql-server 包中默认安装的“debian-sys-maint”用户困扰过好几次了。

通常发生的情况是,我提取生产数据库(未在 Debian/Ubuntu 上运行)的新副本以进行故障排除或新开发,并忘记排除 mysql.user 表,从而丢失 debian-sys-maint 用户。

如果我们出于某种原因添加了新的 mysql 用户,我必须将它们“合并”到我的开发环境中,而不是仅仅覆盖表。

没有用户,我的系统似乎仍然可以运行,但却受到以下错误的困扰:

sudo /etc/init.d/mysql restart
Stopping MySQL database server: mysqld...failed.
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
  • debian-sys-maint 用于什么?
    • 对于软件包维护者来说,有没有更好的方法来完成他们正在尝试做的事情?
  • 丢失后,最简单的恢复方法是什么?
  • 该用户的正确/最小权限集是什么?
    • 似乎‘授予 *.* ... 所有权限’是个糟糕的主意

编辑

附加问题 - /etc/mysql/debian.cnf 中的密码是否已散列,还是这是纯文本密码?当您重新创建用户时,这很重要,而我似乎从来没有在第一次尝试时就做对。

谢谢

答案1

debian-sys-maint 用于什么?

它的主要用途是告诉服务器滚动日志。它至少需要重新加载和关闭权限。

查看文件/etc/logrotate.d/mysql 服务器

脚本使用它/etc/init.d/mysql来获取服务器的状态。它用于正常关闭/重新加载服务器。

以下是 README.Debian 中的引文

* MYSQL WON'T START OR STOP?:
=============================
You may never ever delete the special mysql user "debian-sys-maint". This user
together with the credentials in /etc/mysql/debian.cnf are used by the init
scripts to stop the server as they would require knowledge of the mysql root
users password else.

丢失后,最简单的恢复方法是什么?

最好的计划就是不要丢失它。如果您真的丢失了密码,请使用另一个帐户重置它。如果您丢失了 mysql 服务器的所有管理员权限,请按照指南重置 root 密码,然后修复debian-sys-maint

您可以使用这样的命令来构建一个 SQL 文件,稍后可以使用该文件重新创建帐户。

mysqldump --complete-insert --extended-insert=0 -u root -p mysql | grep 'debian-sys-maint' > debian_user.sql

/etc/mysql/debian.cnf 中的密码是否已被哈希处理

安装时密码不会被散列/加密,但是新版本的 mysql 现在有一种加密凭据的方法(参见:https://serverfault.com/a/750363)。

答案2

debian-系统维护用户默认为根当量。它被 Debian 系统上的某些维护脚本使用,并且作为副作用,允许具有 root 访问权限的用户查看 /etc/mysql/debian.cnf 中的纯文本密码(好还是坏?)

您可以通过以下方式重新创建用户:

GRANT ALL PRIVILEGES on *.* TO `debian-sys-maint`@`localhost` IDENTIFIED BY 'your password' WITH GRANT OPTION;

只是确保密码匹配/etc/mysql/debian.cnf 中

答案3

我只是想发表评论,但我认为正确的语法值得单独列出。这将创造debian-系统维护用户:

mysql> GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'plaintextpassword' WITH GRANT OPTION; FLUSH PRIVILEGES;

如果您仍有 /etc/mysql/debian.cnf 文件,只需使用其中的密码。

请随意提出一个更加安全的解决方案。

答案4

debian-sys-maint如果你只是为了目的而添加用户logrotate.d,你应该不是grantALL PRIVILEGESGRANT OPTION-- 这是一个不必要的巨大安全漏洞。相反,您可以像这样添加具有权限的用户RELOAD(假设您以 身份访问数据库root,并将 xxxxxx 替换为您的密码)

# add the user with the reload right
GRANT RELOAD on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'xxxxxx'; 

# reload the rights
FLUSH PRIVILEGES;

# double check
select * from mysql.user;

2019 年更新

这个答案可能已经过时了——请参阅下面强烈的意见评论。

相关内容