MySQL Passwörter in Konfigurationsdateien speichern

    • Offizieller Beitrag

    aktuell erscheint immer folgende Warnung, wenn mysql verwendet wird:

    Code
    mysql: [Warning] Using a password on the command line interface can be insecure.

    pd-admin sollte Konfigurationsdateien anlegen und diese dann verwenden


    Beispiel:

    Zugriff mit vadmin Zugangsdaten (ohne DB Angabe)

    Bash
    /usr/local/pd-admin2/bin/mysql --defaults-file=/opt/pdadmin/etc/mysql_pw_vadmin.cnf -e 'SELECT id FROM accounts;'
    +----+
    | id |
    +----+
    | 18 |
    +----+

    Zugriff mit root Zugangsdaten (mit DB Angabe)

    Bash
    /usr/local/pd-admin2/bin/mysql --defaults-file=/opt/pdadmin/etc/mysql_pw_root.cnf vadmin -e 'SELECT id FROM accounts;'
    +----+
    | id |
    +----+
    | 18 |
    +----+

    evtl. für das vadmin Passwort eine neue Gruppe mit allen Benutzern (popuser, qmaild, root) hinzufügen, welche die Datei mysql_pw_vadmin.cnf lesen können muss; somit muss das vadmin Passwort dann nicht mehr in 6 verschiedenen Dateien* stehen …

    • /bin/checksmtppasswd
    • /home/popuser/mysql_passwd.conf
    • /opt/pdadmin/etc/pdadmin.conf
    • /usr/local/pd-admin2/dovecot-2.2/etc/dovecot/dovecot-sql.conf.ext
    • /usr/local/pd-admin2/etc/authlib/authmysqlrc
    • /usr/local/pd-admin2/etc/proftpd.conf
    • /var/qmail/vadmin-check.pl

    genauso nur EINE perl Datei mit den Zugangsdaten und nicht 4 an unterschiedlichen Stellen

    • Offizieller Beitrag

    Die Umgebungsvariable MYSQL_PWD zu verwenden ist unsicher


    This method of specifying your MySQL password must be considered extremely insecure and should not be used. Some versions of ps include an option to display the environment of running processes. On some systems, if you set MYSQL_PWD, your password is exposed to any other user who runs ps. Even on systems without such a version of ps, it is unwise to assume that there are no other methods by which users can examine process environments.

    Aktuell wird das vadmin an 6 Stellen gespeichert, was ein Ändern erschwert … Sinnvoller wäre es zu versuchen, die Anzahl der Passwortdateien zu reduzieren und überall bereits vorhandene zu verwenden.


    es gibt 4 perl Dateien, wo das vadmin PW drin steht

    Code
    ls -l /bin/checksmtppasswd /home/popuser/mysql_passwd.conf /opt/pdadmin/etc/pdadmin.conf /var/qmail/vadmin-check.pl
    -rwx------ 1 qmaild  root    3055 May 24 22:02 /bin/checksmtppasswd
    -rw------- 1 popuser popuser    9 May 24 22:02 /home/popuser/mysql_passwd.conf
    -rw------- 1 root    root    9311 Apr  1 14:57 /opt/pdadmin/etc/pdadmin.conf
    -rw------- 1 qmaild  qmail    125 Jan  9  2011 /var/qmail/vadmin-check.pl

    sogar 2 mal mit dem exakt gleichen Eigentümer.


    Eine perl Datei mit einer neuen Gruppe (mit den Usern qmaild, popuser und root), würde doch völlig reichen. Dafür muss man nicht das PW an 4 unterschiedlichen Stellen speichern.

  • Ich sehe kein Unterschied zwischen der Speicherung in $PASSWORD oder $MYSQL_PWD. Dies wären beides Variabeln, welche ausgelesen werden könnten. Auf meinem VPS ist /proc mit "hidepid=2" gemountet, so dass Nutzer nur Ihre eigenen Prozesse sehen können. Aber auch ohne dies konnte ich mit ps bzw. unter z.B. /proc/$PID/environ das Passwort nicht auslesen.


    Letztlich ist die Information unter dem Hinweistext für mich viel wichtiger:

    MYSQL_PWD is deprecated as of MySQL 8.0 and will be removed in a future MySQL version.

    Somit ist die Variante mit MYSQL_PWD nicht zukunftssicher und es müsste daher eine andere Lösung gefunden werden.


    Die vorgeschlagene Lösung scheint aber nicht getestet worden zu sein?

    password = $(cat /opt/pdadmin/etc/mysql_rootpw.conf)

    password = $(grep password /opt/pdadmin/etc/pdadmin.conf |cut -d'"' -f2)

    Die .cnf Dateien sind ja keine Bash Skripte, sondern werden vom MySQL Client interpretiert. Da funktionieren u.a. cat und grep nicht. Ich habe meine .my.cnf entsprechend angepasst und erhalte

    Bash
    $ /usr/local/pd-admin2/bin/mysql --defaults-file=~/.my.cnf vadmin -e 'SELECT id FROM accounts;'
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    • Offizieller Beitrag

    Als welchen user führst Du das aus?

    Wie sehen die Dateiberechtigungen aus?


    Das funktioniert auch bei einer SE-Reihe 3.


    Warum soll ich das nicht getestet haben?

    Wenn es bei Dir nicht funktioniert, machst Du irgendetwas falsch ;)


    Kam denn bei diesen Befehlen irgendein Fehler?

    • Offizieller Beitrag

    Wäre der Patch nicht sinnvoll?

  • Wenn es bei Dir nicht funktioniert, machst Du irgendetwas falsch ;)

    Der Fehler war, dass in der Datei nicht der Inhalt der Passwort Variable, sondern die Variable steckte :whistling:


    Ich habe irgendwann einmal gemäß MySQL Doc (Table 4.2) eine .my.cnf bei dem Nutzer root angelegt:

    Bash
    [client]
    socket=/usr/local/pd-admin2/var/mysql.run/mysql.sock
    user=root
    password=password123

    Eine solche Datei könnte man für die entsprechenden Nutzer anlegen. Dann hat man zwar das Passwort wieder in mehreren Dateien, aber dies wäre zumindest standardisiert.

    evtl. für das vadmin Passwort eine neue Gruppe mit allen Benutzern (popuser, qmaild, root) hinzufügen, welche die Datei mysql_pw_vadmin.cnf lesen können muss; somit muss das vadmin Passwort dann nicht mehr in 6 verschiedenen Dateien* stehen …

    • /bin/checksmtppasswd
    • /home/popuser/mysql_passwd.conf
    • /opt/pdadmin/etc/pdadmin.conf
    • /usr/local/pd-admin2/dovecot-2.2/etc/dovecot/dovecot-sql.conf.ext
    • /usr/local/pd-admin2/etc/authlib/authmysqlrc
    • /usr/local/pd-admin2/etc/proftpd.conf
    • /var/qmail/vadmin-check.pl

    genauso nur EINE perl Datei mit den Zugangsdaten und nicht 4 an unterschiedlichen Stellen

    Bei den Dateien unter /usr/local/pd-admin2 handelt es sich um Konfigurationsdateien einzelner Dienste. Da ist gar nicht klar, ob diese mit der o.g. Lösung arbeiten können. Vermutlich müssen die Daten dort eingetragen bleiben...

    Ich denke dafür wäre die beste Lösung zunächst die Dateien mit MySQL Zugangsdaten zu dokumentieren. Dann kann man ein Skript basteln welches das Passwort aktualisieren kann und/oder die betreffenden Dateien ausgibt.


    Löst natürlich nicht das Problem mit den Warnungen X/ Ich denke da muss man sich jeweils das Skript anschauen...