meta data for this page
This is an old revision of the document!
MariaDB zertifikatbasiertes Anmeldesystem
Das ab 2016 eingeführte Anmeldesystem an die KSDB basiert auf einer Benutzerauthorisierung durch Client-Zertifikate. Diese Zertifikate werden auf dem Server erstellt und in die HOME-Verzeichnisse der Benutzer kopiert.
Die Benutzer werden in der Datenbank angelegt als <user>@192.168.7.%, sodass sie sich nur noch anmelden können, wenn sie sich im Hausnetz befinden, was die Sicherheit erhöht.
Der Prozess gliedert sich nun in die Blöcke
- Server-Zertifikate erstellen
- Client-Zertifikate erstellen und Benutzer anlegen
- Anmeldeverfahren anpassen
Server-Zertifikate erstellen
Auf dem Server benötigen wir zwei Zertifikate. Das erste ist ein sogenanntes CA-Zertifikat und bildet die Authorisierungs-Instanz. Die Zertifikate werden im Verzeichnis /volume1/system/certs angelegt.
cd /volume1/system [ -e certs ] && rm -Rf certs mkdir certs cd certs openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -sha256 -days 3600 -key ca-key.pem -out ca-cert.pem -subj '/C=CH/ST=Zug/L=Zug/O=KSCO Investment Management/CN=ksco' openssl genrsa 2048 > server06.kraemerschwab.com-key.pem openssl req -key server06.kraemerschwab.com-key.pem -new -sha256 -out server06.kraemerschwab.com-req.csr -subj '/C=CH/ST=Zug/L=Zug/O=KSCO Investment Management/OU=ksdb/CN=ksdb' openssl x509 -req -in server06.kraemerschwab.com-req.csr -days 3600 -sha256 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server06.kraemerschwab.com-cert.pem cp ca-cert.pem /volume1/transfer/software/ksdb/
Serverzertifikat in MariaDB installieren
Hierzu werden der Konfigurationsdatei /var/packages/MariaDB/etc/mysql/my.cnf die folgenden Zeilen angefügt:
ssl ssl-ca = /volume1/system/certs/ca-cert.pem ssl-cert = /volume1/system/certs/server06.kraemerschwab.com-cert.pem ssl-key = /volume1/system/certs/server06.kraemerschwab.com-key.pem
Nun wird MariaDB neu gestartet mit dem Befehl:
/usr/share/mysql/mysql.server restart
Benutzer-Zertifikate erstellen
Das Benutzerzertifikat wird mit dem Script /volume1/system/make_user_cert.sh erstellt.
- Nun werden die Benutzer umgestellt. Bisher meldete sich xyz mit einem Password pw_xyz an. Neu darf er sich, sofern er aus dem internen Netz kommt und SSL-zertifiziert ist, ohne Passwort anmelden. Kommt er jedoch von aussen, dann soll er sich mit dem bisherigen Passwort anmelden. Ohne SSL-Zertifikat darf er sich hingegen gar nie mehr anmelden.
- Dazu müssen zuerst die Benutzer von % auf 192.168.1.% umgestellt werden mit
mysql -uroot -p -e"update mysql.user set host = '192.168.1.%' where host = '%'; mysql -Nsr -uroot -p -Dhaas >/var/tmp/userlist.tmp <<EOF SELECT CONCAT( 'GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON haas.* TO \'', login_user, '\'@\'%\' REQUIRE Subject \'/C=CH/ST=Zuerich/L=Volketswil/O=Haas AG Print Finishing Systems & Solutions/OU=', IFNULL(text_1, login_user), '/CN=', login_user, '\' AND ISSUER \'/C=CH/ST=Zuerich/L=Volketswil/O=Haas AG/CN=haas\';\n', 'set password for \'', login_user, '\'@\'%\' = \'', password, '\';\n', 'GRANT USAGE ON haas.* TO \'', login_user, '\'@\'192.168.1.%\' REQUIRE Subject \'/C=CH/ST=Zuerich/L=Volketswil/O=Haas AG Print Finishing Systems & Solutions/OU=', REPLACE(IFNULL(text_1, login_user), 'ü', 'ue'), '/CN=', login_user, '\' AND ISSUER \'/C=CH/ST=Zuerich/L=Volketswil/O=Haas AG/CN=haas\';\n', 'set password for \'', login_user, '\'@\'192.168.1.%\' = \'\';\n') \ FROM personal p join mysql.user u on u.user = p.login_user and u.host = '192.168.1.%' WHERE p.inaktiv = 0 AND p.gruppe_jn = 0; EOF mysql -uroot -p </var/tmp/userlist.tmp rm /var/tmp/userlist.tmp