it-swarm-es.com

¿Cuál es el usuario de MySQL de debian-sys-maint (y más)?

He sido mordido varias veces por el usuario 'debian-sys-maint' que está instalado por defecto en los paquetes mysql-server instalados desde los repositorios de Ubuntu.

En general, lo que sucede es que extraigo una copia nueva de nuestra base de datos de producción (que no se está ejecutando en Debian/Ubuntu) para la resolución de problemas o el nuevo desarrollo y olvido excluir la tabla mysql.user, por lo tanto, pierdo el usuario debian-sys-maint.

Si agregamos nuevos usuarios de mysql por cualquier razón, tengo que 'fusionarlos' en mi entorno de desarrollo en lugar de simplemente superponer la tabla.

Sin el usuario, mi sistema todavía parece funcional, pero está plagado de errores como:

Sudo /etc/init.d/mysql restart
Stopping MySQL database server: mysqld...failed.
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
  • ¿Para qué se usa debian-sys-maint?
    • ¿Hay una mejor manera para que los encargados del paquete hagan lo que intentan hacer?
  • ¿Cuál es la forma más fácil de restaurarlo después de haberlo perdido?
  • ¿Cuál es el conjunto correcto/mínimo de privilegios para este usuario?
    • Parece una mala idea 'otorgar todos los privilegios en *. * ...'

Editar

Pregunta adicional: ¿la contraseña en /etc/mysql/debian.cnf ya está cifrada o es la contraseña de texto sin formato? Importa cuando vas a recrear al usuario y parece que nunca lo hago bien en el primer intento.

Gracias

69
Joe Holloway

¿Para qué se utiliza debian-sys-maint?

Una cosa importante para la que se usa es decirle al servidor que ruede los registros. Necesita al menos el privilegio de recarga y apagado.

Vea el archivo /etc/logrotate.d/mysql-server

Es utilizado por el /etc/init.d/mysql script para obtener el estado del servidor. Se utiliza para apagar/recargar el servidor con gracia.

Aquí está la cita de 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.

¿Cuál es la forma más fácil de restaurarlo después de haberlo perdido?

El mejor plan es simplemente no perderlo. Si realmente pierde la contraseña, reiníciela con otra cuenta. Si ha perdido todos los privilegios de administrador en el servidor mysql, siga las guías para restablecer la contraseña de root, luego repare el debian-sys-maint.

Puede usar un comando como este para crear un archivo SQL que pueda usar más tarde para volver a crear la cuenta.

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

¿La contraseña en /etc/mysql/debian.cnf ya está en hash

La contraseña no está cifrada/cifrada cuando está instalada, pero las nuevas versiones de mysql ahora tienen una forma de cifrar las credenciales (consulte: https://serverfault.com/a/75036 ).

58
Zoredache

El usuario debian-sys-maint es por defecto un equivalente a la raíz. Es utilizado por ciertos scripts de mantenimiento en los sistemas Debian y, como efecto secundario, permite a los usuarios con acceso root en el cuadro ver la contraseña de texto sin formato en /etc/mysql/debian.cnf (¿buena o mala?)

Puede volver a crear el usuario de la siguiente manera:

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

Solo asegúrese de que la contraseña coincida que en /etc/mysql/debian.cnf

22
Brent

Solo quería comentar, pero creo que sintaxis correcta merece su propia entrada. Esto creará el usuario debian-sys-maint :

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

Si todavía tiene el archivo /etc/mysql/debian.cnf, simplemente use la contraseña allí.

Siéntase libre de proponer un más paranoico solución segura.

19
d-_-b

También podrías:

Sudo dpkg-reconfigure mysql-server-5.0

Lo que le dará la opción de recrear el usuario debian-sys-maint. Los usuarios y bases de datos existentes son seguros.

19
Spoom

Si necesita agregar el debian-sys-maint usuario solo por logrotate.d propósitos, deberías no conceder ALL PRIVILEGES o la GRANT OPTION - este es un agujero de seguridad gigante innecesario. En cambio, puede agregar al usuario con el privilegio RELOAD de esta manera (suponiendo que está accediendo a su base de datos como root, y reemplaza xxxxxx con su contraseña)

# 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;

Actualización 2019

Es posible que esta respuesta esté desactualizada; consulte los comentarios con mucha opinión a continuación.

6
Mark Chackerian

debian-sys-maint requiere permisos

Otras respuestas han abordado suficientemente todo, excepto el conjunto mínimo de permisos que se requieren para el usuario debian-sys-maint. Muchas de las respuestas aquí son simplemente incorrectas a ese respecto, y de hecho son peligrosas. No reduzca los privilegios de debian-sys-maint (incluida la opción de concesión) sin leer y comprender a continuación:

El mantenedor de Debian no le dio todos los privilegios al usuario caprichosamente. Esto es lo que se requiere, dónde y por qué. Algunos de estos privilegios son supersets de otros, pero los enumeraré independientemente en caso de que desee personalizar cosas y eliminar el requisito para ellos:

  • apagado y recargar, se requiere lo suficientemente sorprendente, para cerrar o hacer una base de datos, realizada por /etc/init.d/mysql
  • seleccione en mysql.user, requerido para las comprobaciones de sanidad realizadas cuando se inicia la base de datos, asegurando que haya un usuario root. Hecho cada inicio por/etc/mysql/debian-start (llamado por /etc/init.d/mysql) con el código real en la función check_root_accounts en el archivo /usr/share/mysql/debian-start.inc.sh
  • seleccione en information_schema.tables, selección global, requerido para verificar las tablas bloqueadas. Hecho cada inicio por/etc/mysql/debian-start (llamado por /etc/init.d/mysql) con el código real en la función check_for_crashed_tables en el archivo /usr/share/mysql/debian-start.inc.sh
  • todos los privilegios globales, requerido para actualizar tablas si/cuando se instala una nueva versión de MySQL a través de una actualización o actualización de Debian. Hecho cada inicio por/etc/mysql/debian-start (llamado por /etc/init.d/mysql) con el código real en la función upgrade_system_tables_if_necessary en el archivo /usr/share/mysql/debian-start.inc.sh - en realidad llama al binario MySQL mysql_upgrade - no se deje engañar por el nombre de la función (upgrade_system_tables_if_necessary), esto puede tocar potencialmente todas las tablas - vea abajo

El último es, por supuesto, el principal requisito de privilegios. La página del manual para mysql_upgrade dice que:

mysql_upgrade examina todas las tablas en todas las bases de datos en busca de incompatibilidades con la versión actual de MySQL Server. mysql_upgrade también actualiza las tablas del sistema para que pueda aprovechar los nuevos privilegios o capacidades que podrían haberse agregado.

Si mysql_upgrade encuentra que una tabla tiene una posible incompatibilidad, realiza una verificación de la tabla y, si se encuentran problemas, intenta repararla.

ADVERTENCIA Si decide reducir los privilegios que tiene debian-sys-maint, asegúrese de estar preparado para manejar manualmente cualquier futura actualización de seguridad de Debian y/o actualizaciones que tocan MySQL. Si realiza una actualización en los paquetes MySQL con un privilegio de debian-sys-maint reducido, y si mysql_upgrade no puede completarse como resultado, puede dejar su base de datos en un estado indefinido (lectura rota). Es posible que la reducción de privilegios no tenga ningún problema cotidiano aparente hasta que se presente una actualización, por lo tanto, no piense que ya ha reducido los privilegios sin efectos perjudiciales como base para pensar que es seguro.

3
Kurt Fitzner

En vez de

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

Yo creo que

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

porque la contraseña no está cifrada ...?

3
Sean

Cuando use MySQL 5.6+, recomendaría usar mysql_config_editor comando para crear una entrada para el usuario 'debian-sys-maint'@'localhost' utilizando la contraseña relevante, lo que significa que la contraseña no necesita ser almacenada en texto plano en el servidor.

mysql_config_editor set --login-path=debian-sys-maint --Host=localhost --user=debian-sys-maint --password

Después de esto, el archivo de configuración específico de Debian /etc/mysql/debian.cnf puede modificarse para que los detalles de nombre de usuario y contraseña no se almacenen en el archivo.

Finalmente, modifique el archivo logrotate para MySQL para que use los detalles de inicio de sesión almacenados en ~/.mylogin.cnf archivo en lugar del archivo específico de Debian reemplazando

/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf

con

/usr/bin/mysqladmin --login-path=debian-sys-maint

Espero que esto ayude :)

Dave

2
Dave Rix

Como nota al margen de esto, eche un vistazo a esta publicación de mysqlperformanceblog por las razones por las que es posible que desee deshabilitar las cosas específicas de Debian.

2
Jon Topper