Frage Was ist der debian-sys-maint MySQL-Benutzer (und mehr)?


Ich wurde mehrmals von dem Benutzer debian-sys-maint gebissen, der standardmäßig auf den mysql-server-Paketen installiert ist, die von den Ubuntu-Repositories installiert wurden.

Im Allgemeinen ziehe ich eine neue Kopie unserer Produktionsdatenbank (die nicht unter Debian / Ubuntu läuft) zur Fehlerbehebung oder Neuentwicklung und vergiss, die mysql.user-Tabelle auszuschließen, wodurch der debian-sys-maint-Benutzer verloren geht.

Wenn wir aus irgendeinem Grund neue mysql-Benutzer hinzufügen, muss ich diese in meine Entwicklungsumgebung "einbinden" anstatt nur die Tabelle zu überlagern.

Ohne den Benutzer scheint mein System immer noch funktional, aber mit Fehlern behaftet zu sein wie:

sudo /etc/init.d/mysql restart
Stopping MySQL database server: mysqld...failed.
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
  • Wofür wird debian-sys-maint verwendet?
    • Gibt es einen besseren Weg für die Paketbetreuer, das zu tun, was sie tun wollen?
  • Was ist der einfachste Weg, um es wiederherzustellen, nachdem ich es verloren habe?
  • Was sind die richtigen / minimalen Berechtigungen für diesen Benutzer?
    • Es scheint mir eine schlechte Idee zu sein, alle Privilegien auf *. * ... zu gewähren.

Bearbeiten

Zusätzliche Frage - Ist das Passwort in /etc/mysql/debian.cnf bereits verschlüsselt oder ist dies das Klartext-Passwort? Es spielt eine Rolle, wenn Sie den Benutzer neu erstellen, und ich scheine es beim ersten Versuch nie richtig zu machen.

Vielen Dank


65
2018-05-19 16:05


Ursprung


Das Passwort ist Klartext in /etc/mysql/debian.cnf - Brent


Antworten:


Wofür wird debian-sys-maint verwendet?

Standardmäßig wird dem Server mitgeteilt, dass er die Protokolle rollen soll. Es benötigt mindestens die Berechtigung zum erneuten Laden und Herunterfahren.

Siehe die Datei /etc/logrotate.d/mysql-server

Es wird von der /etc/init.d/mysql Skript, um den Status des Servers zu erhalten. Es wird verwendet, um den Server ordnungsgemäß herunterzufahren / neu zu laden.

Hier ist das Zitat aus dem 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.

Was ist der einfachste Weg, um es wiederherzustellen?   nachdem ich es verloren habe?

Der beste Plan ist es einfach nicht zu verlieren.

Sie können einen Befehl wie diesen verwenden, um eine SQL-Datei zu erstellen, mit der Sie das Konto später erneut erstellen können.

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

Ist das Passwort drin?   /etc/mysql/debian.cnf hat bereits gehashed

Das Passwort ist nicht gehashed.


57
2018-05-19 16:10





Du könntest auch:

sudo dpkg-reconfigure mysql-server-5.0

Das gibt Ihnen die Möglichkeit, den Benutzer debian-sys-maint neu zu erstellen. Bestehende Benutzer und Datenbanken sind sicher.


19
2017-08-22 15:29



Dies funktionierte auch auf mysql-server-5.5. - serverSentinel


Das debian-sys-maint Benutzer ist standardmäßig a Wurzeläquivalent. Es wird von bestimmten Warteskripten auf Debian-Systemen verwendet, und als Nebeneffekt können Benutzer mit Root-Zugriff auf die Box das Klartext-Passwort in /etc/mysql/debian.cnf (gut oder schlecht?) Anzeigen.

Sie können den Benutzer folgendermaßen neu erstellen:

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

Gerade Stellen Sie sicher, dass das Passwort übereinstimmt das in /etc/mysql/debian.cnf


19
2018-05-19 16:17



Re (gut oder schlecht) - Wenn es jemandem gelingt, root zu werden, können sie das Privilegiensystem ganz umgehen, indem sie einfach den Server mit den richtigen Optionen neu starten. Wenn ein Angreifer Root bekommt, haben Sie wahrscheinlich größere Probleme als diese Konfigurationsdatei. - Zoredache
auch re: gut oder schlecht - ich musste mich auf den debian-sys-maint-Zugang verlassen, um das Passwort des MySQL root-Kontos neu zu setzen, wenn es vergessen wurde. Es war schön, diese Fallback-Option zu haben. - Brent
@ Brent: Siehe dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html für wie mysql root Passwort zurücksetzen. Ich habe diesen Benutzer bei vielen mysql-Installationen auf Debian deaktiviert, da er beim Start Chaos verursachen kann, wenn Tabellen überprüft werden, wenn es sich um große Tabellen handelt. - Nathan
Nathan, danke für diesen Link. Das sind neue Informationen für mich. Wenn Sie eine Prozedur zum Deaktivieren des debian-sys-maint-Accounts haben, warum fügen Sie sie hier nicht als separate Antwort ein. Das wäre großartig! - Brent
Eine bessere Zuteilung wäre, nur die Shutdown / Start-Privilegien zu geben. - jmtd


Ich wollte nur kommentieren, aber ich denke korrekte Syntax verdient einen eigenen Eintrag. Dies wird die erstellen debian-sys-maint Nutzer:

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

Wenn Sie immer noch die Datei /etc/mysql/debian.cnf haben, verwenden Sie einfach das Passwort dort.

Fühlen Sie sich frei, mit mehr zu kommen paranoid sichere Lösung.


18
2017-11-08 06:29



Es ist so paranoid wie es sein muss. Dann sollte nur einer die Datei lesen können /etc/mysql/debian.cnf Datei sind die Linux root Nutzer. Und wenn jemand diese Datei lesen kann, haben sie bereits root Zugriff auf die Maschine und kann den MySQL-Server stoppen und einen eigenen Systemadministrator hinzufügen. Und das Skript, das MySQL und andere Pakete startet, kann keine Sicherheitswartung und andere Wartungsarbeiten durchführen. Also ja, es ist so sicher wie es jemals sein muss. Und nützlich, wenn Sie das MySQL-Admin-Passwort verlieren, um es wiederherzustellen, ohne es im unsicheren Modus neu starten zu müssen. ;-) - Anders
Dafür ist Edit gedacht. - RobinJ


Wenn Sie das hinzufügen müssen debian-sys-maint Benutzer nur für logrotate.d Zwecke sollten Sie nicht gewähren ALL PRIVILEGES oder der GRANT OPTION - Das ist ein unnötiges riesiges Sicherheitsloch. Stattdessen können Sie einfach den Benutzer mit hinzufügen RELOAD Privileg wie dieses (vorausgesetzt, Sie greifen auf Ihre Datenbank als root, und Sie ersetzen xxxxxx mit Ihrem Passwort)

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

6
2018-02-20 23:14



Dies ist die einzige sichere Antwort, die nur die erforderlichen Berechtigungen gewährt debian-sys-maint. Außerdem kann ich bestätigen, dass es wie ein Zauber wirkt. Prost! - Jealie
Ist es wirklich ein Sicherheitsloch? Wenn jemand /etc/mysql/debian.cnf bereits lesen kann, hat er vermutlich root-Zugriff und kann mysql trotzdem mit --skip-grant-tables neu starten. - mc0e
Vielen Dank. Aber keine Notwendigkeit, Dinge zweimal zu löschen, MySQL weiß bereits, was der Befehl GRANT tut. Sehen dev.mysql.com/doc/refman/5.6/en/privilege-changes.html - ygoe
Und das wird nicht funktionieren, wie die debian-sys-maint Benutzer wird auch zum Herunterfahren des Servers verwendet. Und auch nach Root-Benutzern zu suchen, wenn der mysql-Server gestartet wird. Sie müssen also mindestens Berechtigungen für die Berechtigungen mysql. * Und shutdown erteilen. - Anders
@Anders Sind Sie sicher, dass dies die vollständige Liste der erforderlichen Zuschüsse ist? Könntest du eine Antwort schreiben? Diese Frage habe ich gerade erstellt? - augurar


Anstatt

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

Meiner Ansicht nach

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

weil das Passwort nicht gehashed ist ...?


3
2017-08-04 05:39





Als eine Nebenbemerkung, werfen Sie einen Blick auf Dieser Beitrag ist mysqlperformanceblog Aus Gründen, warum Sie das Debian-spezifische Zeug deaktivieren möchten.


2
2018-05-20 20:33



"Beachten Sie, dass dies kein Problem mit MySQL von Debian Lenny sein sollte, da es mit Init-Skripten ausgeliefert wird, die CHECK TABLE nicht auf Nicht-MYISAM-Tabellen ausführen." - von der verlinkten Seite - d-_-b


Wenn ich MySQL 5.6+ verwende, würde ich empfehlen, die mysql_config_editor Befehl zum Erstellen eines Eintrags für den Benutzer 'debian-sys-maint'@'localhost' mit dem entsprechenden Passwort, dh das Passwort muss nicht im Klartext auf dem Server gespeichert werden.

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

Danach folgt die Debian-spezifische Konfigurationsdatei /etc/mysql/debian.cnf kann geändert werden, damit der Benutzername und das Passwort nicht in der Datei gespeichert werden.

Ändern Sie abschließend die logrotate - Datei für MySQL, so dass sie die in der Datenbank gespeicherten Login - Daten verwendet ~/.mylogin.cnf Datei anstelle der Debian-spezifischen Datei durch Ersetzen

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

mit

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

Hoffe das hilft :)

Dave


1
2018-01-20 00:17



Aber, wird der Zweck der debian-sys-maint  Benutzer dadurch erreicht werden? Diese Pakete sollten in der Lage sein, diesen Benutzer / dieses Passwort zu verwenden, um einige Systemwartungen durchzuführen root Benutzer in der Linux-Domäne (nicht root Benutzer in MySQL ohne den Administrator musste eingeben root Passwort für MySQL? - Anders
Es funktioniert für mich in meinen Tests, wenn Sie alle Änderungen vornehmen, z /etc/mysql/debian.cnf um die Passwörter zu entfernen und die logrotate-Datei zu ändern, um auf die gesicherten Details zu verweisen. Ich bin nicht sicher, ob der debian-sys-maint-Benutzer für irgendetwas anderes verwendet wird, aber wenn dies der Fall ist, wird dies Ihnen einen Hinweis geben, wo Debian dieses Benutzerkonto in Ihrem Namen verwendet. - Dave Rix