MySQL sicher aufsetzen und betreiben



Ähnliche Dokumente
MySQL Security. DOAG 2013 Datenbank. 14. Mai 2013, Düsseldorf. Oli Sennhauser

MySQL Backup und Restore

MySQL Cluster mit Galera

Backup und PiTR mit MySQL

MySQL Cluster und MySQL Proxy

MySQL Replikation - Die Eier legende Wollmilchsau?

MySQL Performance Tuning für Entwickler

Konsolidieren von MySQL Landschaften

MySQL Backup/Recovery

MySQL Replikation. Erkan Yanar linsenraum.de linsenraum.de

Installation MySQL Replikationsserver

Synchrone multi-master Replikation für MySQL

MySQL 101 Wie man einen MySQL-Server am besten absichert

MySQL Replikation Neue Features in 5.5 und 5.6

SWISSVAULT StorageCenter Console Version 5 Kurzanleitung für SWISSVAULT Combo Partner

Installation mit Lizenz-Server verbinden

MySQL für Oracle DBA's

HA Architekturen mit MySQL

PostgreSQL High-Security

MySQL Installation. AnPr

MOUNT10 StoragePlatform Console

MySQL High Availability. DOAG 2013 Datenbank. 14. Mai 2013, Düsseldorf. Oli Sennhauser

Performance Tuning & Scale-Out mit MySQL

Das neue Volume-Flag S (Scannen erforderlich)

Aktuelle Entwicklungen

Installation SQL- Server 2012 Single Node

MySQL/MariaDB für. nicht-mysql DBAs

Löschen eines erkannten aber noch nicht konfigurierten Laufwerks

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

WINDOWS 8 WINDOWS SERVER 2012


Oracle SQL Tutorium - Wiederholung DB I -

Konfiguration Firewall (Zyxel Zywall 10) (von Gruppe Schraubenmeier)

Installationsanleitung für die netzbasierte Variante Bis Version 3.5. KnoWau, Allgemeine Bedienhinweise Seite 1

PostgreSQL in großen Installationen

Partitionieren über Rechnergrenzen hinweg

English. Deutsch. niwis consulting gmbh ( manual NSEPEM Version 1.0

MySQL Replikation, Scale-Out, Master- Master Replikation, Backup

MySQL HA & Security SLAC Juni 2013, Berlin. Oli Sennhauser

Wireless LAN Installation Windows XP

Username and password privileges. Rechteverwaltung. Controlling User Access. Arten von Rechten Vergabe und Entzug von Rechten DBS1 2004

Sicherheitsrelevante Änderungen (und einige andere) in MySQL 5.7

MySQL Replikation und GTID

FILEZILLA HANDBUCH

Seite Out-Of-Band-Authentifizierung (OOBA) 8.1 Einleitung

How to install freesshd

Weltweite Produktionsdatenverwaltung mit MySQL-Replikation

Migration Howto. Inhaltsverzeichnis

Backup-Server einrichten

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Microsoft Azure Fundamentals MOC 10979

D-Link VPN-IPSEC Test Aufbau

MySQL für Oracle DBA's

Oracle 10g Einführung

Dokumentation für das Web-basierte Abkürzungsverzeichnis (Oracle mod_plsql / Apache)

Datensicherung EBV für Mehrplatz Installationen

AXIGEN Mail Server. s per Smarthost versenden s per Pop3 empfangen. Produkt Version: Dokument Version: 1.2

Konfiguration Serverstart Server einrichten. MySQL 4, 5. Kapitel 03: Serverstart und -konfiguration. Marcel Noe

Umbenennen eines NetWorker 7.x Servers (UNIX/ Linux)

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

Infinigate (Schweiz) AG. Secure Guest Access. - Handout -

RL

MySQL Architektur die Admin-Sicht

Archive / Backup System für OpenVMS

Knottenwäldchen Software

OTRS - Nagios Integration. Jens Bothe Senior Consultant, OTRS AG

Aufbau einer Testumgebung mit VMware Server

Das Leitbild vom Verein WIR

Installation von MySQL

Konfiguration Zentyal 3.3 Inhaltsverzeichnis

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

Verwendung des IDS Backup Systems unter Windows 2000

Replikation auf einem Microsoft SQLServer 2000

OP-LOG

MySQL Beispiele aus der Praxis. Wie setzen Kunden MySQL ein?

Ein neues Outlook Konto können Sie im Control Panel über den Eintrag Mail erstellen.

Authentication Policy. Konfigurationsbeispiel ZyXEL ZyWALL USG-Serie. Juni 2010 / HAL

MySQL Administration. Seminarunterlage. Version 3.02 vom

105.3 SQL-Datenverwaltung

Wiederherstellen der Beispieldatenbanken zum Buch Microsoft Project 2010

Monitoring Wissen, was passiert. Wissen, was zu tun ist. Thorsten Kramm SLAC 2011

Die MySQL-Schulung der Heinlein Akademie: In diesem Training lernen Sie MySQL in all seinen Facetten kennen.

Linux-HA-Cluster Heartbeat mit DRBD

KeePass Anleitung. 1.0Allgemeine Informationen zu Keepass. KeePass unter Windows7

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

XING und LinkedIn-Integration in das erecruiter-bewerberportal

Installationsanweisung editit

Version/Datum: Dezember-2006

Options- und Freitext-Modul Update-Anleitung

Benutzerinformation zum IP-Update: Wie aktualisiere ich meine IP-Adresse? Datenstand: / Version 1.0

Automatisierte Einbindung von Windows Systemen in Bacula mit Hilfe von OPSI

Tools are a IT-Pro's Best Friend Diverse Tools, die Ihnen helfen zu verstehen, was auf dem System passiert oder das Leben sonst erleichtern.

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

BSCW-Anbindung im Dateiexplorer

Transkript:

MySQL sicher aufsetzen und betreiben SLAC 2015, Berlin Oli Sennhauser Senior MySQL Consultant, FromDual GmbH oli.sennhauser@fromdual.com 1 / 39

FromDual GmbH Support Beratung remote-dba Schulung 2 / 39

Inhalt MySQL sicher aufsetzen und betreiben Vorbereitungen Installation Härten Upgrade Konfiguration User Management Verschlüsselung Backup / Restore Hochverfügbarkeit Monitoring Wo lauert das Böse? Angriffsvektoren 3 / 39

Vorbereitung Installation Welches O/S, welche Distro? Windows kann heute auch sicher sein... Was könnt Ihr am besten? Welcher Branch/Fork? MySQL, MariaDB, Percona, Galera Packet, Binary Tarball, oder Source DEB/RPM von Distribution oder Hersteller Distribution oft veraltet und wie gut gepatched? und wenn gepachted, wie gut getestet? Version MySQL: 5.5, 5.6, (5.7), MariaDB 5.5, 10.0, (10.1) 4 / 39

Installation Durch wen? Pakete selber (mysql_install_db) Wohin? /var/lib/mysql /mount/mysql/data Advanced Security macht ärger! AppArmor SElinux weitere potentielle Problemchen /etc/mysql/conf.d/debian.cnf (root äquivalent) Syslog auf Debian/Ubuntu: die Log-Informationen sind auf nimmer wiedersehen weg, nicht theoretisch sonder praktisch! 5 / 39

Was passiert bei Installation? InnoDB Tablespace und Log Files MySQL Data Dictionary (mysql Schema) Kreiert User (root, anonymous) Kreiert test Schema slac1 Was ist das Problem? Härtet jemand von Euch nach Installation? 6 / 39

Härten von MySQL Wie: mysql_secure_installation leider kaputt Was: root Passwort root von remote test Schema anonymous User (''@localhost) slac1 7 / 39

Warum härten? Root Passwort setzen ist klar? Nein mir nicht! Wenn niemand lokal zugriff hat ausser root braucht es dort auch kein Passwort. Root von remote ist klar? Sogar mir! Warum ist der anonymous User (''@server) böse? slac2 Warum ist das test Schema böse? Insbesondere Hoster/SaaS und Ähnliche aufpassen!!! 8 / 39

Neues Mätzchen mit 5.6 Seit MySQL 5.6 gilt: Passwort auf Kommandozeile ist böse, warum? shell> mysql --user=sicher --password=secret Warning: Using a password on the command line Interface can be insecure. Kann mir jemand sagen warum? slac2 Früher ~/.my.cnf (chmod 0600) Scheint heute immer noch sicher! 9 / 39

Heute: MySQL Config Editor Seit MySQL 5.6 gilt: shell> mysql_config_editor set - login-path=slac2 --host=localhost --user=sicher -password shell> mysql --login-path=slac2 Wieso geht das jetzt??? slac2 Fortsetzung folgt... 10 / 39

Und wie cracken? The encryption used by mysql_config_editor prevents passwords from appearing in.mylogin.cnf as cleartext and provides a measure of security by preventing inadvertent password exposure. For example, if you display a regular unencrypted my.cnf option file on the screen, any passwords it contains are visible for anyone to see. With.mylogin.cnf, that is not true. But the encryption used will not deter a determined attacker and you should not consider it unbreakable. A user who can gain system administration privileges on your machine to access your files could decrypt the.mylogin.cnf file with some effort. Security by Obscurity??? Sicherheitsgewinn? Und jetzt wie cracken? :-) 11 / 39

Weitere Sicherheitsfeatures MySQL CLI: Filter auf password in History OK. Seh ich ja ein, ist aber mühsam: grep password ~/.mysql_history Installation in 5.7 automatisch sicher Kein test Schema mehr Kein anonymous User mehr Kein root von Remote mehr UND: root@localhost hat default Passwort, welches geändert werden muss... 12 / 39

Upgrade / Release Cycles? Major Releases: MySQL 5.1, 5.5, 5.6, 5.7 (ca. alle 2 Jahre) MariaDB 5.1, 5.2, 5.3, 5.5, 10.0, 10.1 (ca. alle 18 Monate) Minor Releases: 5.6.x MySQL ca. 6 pro Jahr (also alle 2 Monate) MariaDB ca. 6 pro Jahr (also alle 2 Monate) Und jetzt, alle 2 Monate ein Upgrade? Ja, warum nicht? Wir haben Testautomation und automatisierte Deployments (siehe andere Vorträge...) 13 / 39

Upgrade in der Praxis Oracle liefert Critical Patch Updates (CPU) (4 pro Quartal, alle 3 Monate) Distributionen ähnliche Zyklen? ziehen die wirklich alles nach? Ubuntu Security Notes (USN): alle 3 Monate RHEL/CentOS? potentielle Probleme: Wer testet wie gut (Distribution / Betreiber)? Upgrade erfolgt automatisch Restart der DB-Instanz (Red Hat/CentOS) http://fromdual.com/security 14 / 39

Upgrade wie tun: Major Release NICHT überspringen! daher mindestens alle 2 Jahre ein upgrade Offizielle Methode: Dump/Restore (aber wie mit meinen 5 Tbyte?) Geht meist auch: Binary Upgrade ab 5.7 offiziell supportet!!! Anschliessend NICHT vergessen: mysql_upgrade slac3 15 / 39

Warum kein Upgrade böse? Darum: slac4 ERROR 2013 (HY000): Lost connection to MySQL server during query Oracle hat Security relevante Bugs heute versteckt... Aber, der Findige lässt sich nicht unterkriegen: https://bugzilla.redhat.com/show_bug.cgi?id=919247 Ich habe keine 15 Minuten gebraucht... 16 / 39

MySQL Crash 150620 14:59:27 [ERROR] mysqld got signal 11 ; This could be because you hit a bug... Thread pointer: 0x47e10e0 Attempting backtrace. You can use the following information to find out where mysqld died. If you see no messages after this, something went terribly wrong... stack_bottom = 0x7f8949817ea8 thread_stack 0x48000 mysqld(my_print_stacktrace+0x2e) [0x9c493e] mysqld(handle_segfault+0x3b3) [0x611eb3] /lib/x86_64-linux-gnu/libpthread.so.0(+0x10340) [0x7f8948a70340] mysqld() [0x75aaf0] mysqld(geometry::append_points(string*, unsigned int, char const*, unsigned int) const+0x4e) mysqld(gis_polygon::get_data_as_wkt(string*, char const**) const+0xbb) [0x75c68b] mysqld(item_func_as_wkt::val_str(string*)+0x145) [0x5d6f55]... mysqld(mysql_execute_command(thd*)+0x2d4e) [0x62066e] mysqld(mysql_parse(thd*, char*, unsigned int, char const**)+0x299) [0x623ff9] mysqld(dispatch_command(enum_server_command, THD*, char*, unsigned int)+0xb9b) [0x624b9b] mysqld(do_command(thd*)+0x101) [0x6255b1] mysqld(handle_one_connection+0xdf) [0x61690f] /lib/x86_64-linux-gnu/libpthread.so.0(+0x8182) [0x7f8948a68182] /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f8947f8347d] Trying to get some variables. Some pointers may be invalid and cause the dump to abort. Query (0x7f88cc004b98): select astext(0x0100000000030000000100000000000010) Connection ID (thread ID): 1 Status: NOT_KILLED Crash ist IMMER böse = IMMER ein Bug 17 / 39

Jeder hat seine Leidenschaft Es gibt Leute, die sammeln Briefmarken... Andere sammeln so was: # # Bug #68591: Geometry query crashes mysqld # http://bugs.mysql.com/bug.php?id=68591 # https://mariadb.atlassian.net/browse/mdev 4252 # https://bugzilla.redhat.com/show_bug.cgi?id=919247 # # Fixed in: MySQL 5.6.12, 5.5.32, 5.1.70 # MariaDB 5.5.30, 5.3.13, 5.2.15, 5.1.73 # Happens in: before # Does not happen in: # Public since 2013 03 # SELECT ASTEXT(0x0100000000030000000100000000000010); 18 / 39

Konfiguration Sicherheit Name Scope Dynamic allow_suspicious_udfs Global No automatic_sp_privileges Global Yes chroot Global No des_key_file Global No local_infile Global Yes old_passwords Both Yes safe_user_create Global Yes secure_auth Global Yes secure_file_priv Global No skip_grant_tables Global No skip_name_resolve Global No skip_networking Global No skip_show_database Global No 19 / 39

Konfiguration Ressourcen Schlechte Performance DoS Unterallokation Schlechte Performance (I/O Sättigung) Überallokation Swapping (slow) kill/crash (32-bit) oom-killer (service outage) Einfluss auf andere (VM, noisy neighbours) Kosten Zu fette Hardware 20 / 39

User Management Übersicht SELECT user, host, password FROM mysql.user; SHOW GRANTS FOR ''@localhost; Host: skip_name_resolve wenn DNS nicht getraut wird oder instabil ist IP address spoofing (soll nicht ganz einfach sein)? CREATE USER, DROP USER Abgelegt unter: mysql.user Anonymous User kann immer verbinden (USAGE), in Kombination mit test Schema, siehe oben. 21 / 39

Objekt Privilegien Was sind Objekte: Tabellen, Indices, Views, Procedures, Functions, Triggers, Events, Temporäre Tabellen Wer sollte was dürfen? read-only User: SELECT, SHOW DATABASES read-write User: UPDATE INSERT DELETE CREATE TEMPORARY TABLES, LOCK TABLES Schema Owner: ALTER ROUTINE, CREATE ROUTINE, EXECUTE, CREATE VIEW, SHOW VIEW, TRIGGER, INDEX, ALTER, EVENT, REFERENCES, DROP, CREATE Privilegien-Hierarchie: Global, Schema, Tabelle/Routine, Spalte GRANT... ON schema.table GRANT... ON mysql.xxx vermeiden! Liegen unter mysql.{user, db, table_privs, procs_priv, column_privs) 22 / 39

Globale/System Privilegien Globale Privilegien: ALL, USAGE, SUPER, SHUTDOWN, REPLICATION SLAVE, REPLICATION CLIENT, RELOAD, PROXY, PROCESS, CREATE USER, CREATE TABLESPACE, FILE, GRANT OPTION Liegen in mysql.user Was lässt sich so anstellen mit: ALL --> alles :-) USAGE --> verbinden, siehe oben SUPER --> CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, Daten änderungen (read_only) Replikation start/stop, Log ein/ausschalten, Definer in Stored Programs ändern (Möglichkeit Privilegien aufzubohren?) REPLICATION SLAVE --> Binary Logs remote lesen PROCESS --> Anderer User Prozesse/Statements einsehen GRANT OPTION --> Anderen Usern eigene Rechte geben FILE --> Jedes beliebige File auf dem DB-Server lesen (welches mysql User lesen kann) Beispiel FILE 23 / 39

Rollen / externe Authentifizierung MySQL kann native keine Rollen Nicht so tragisch, Rollen heute meist in Applikation abgebildet Rolen ab MySQL 5.7.7 mit "expanded Proxy User Support" MariaDB (10.0.5): CREATE ROLE myrole; GRANT... ON *.* to myrole; GRANT myrole to oli; MySQL Rollen mit PAM plugin http://mysqlblog.fivefarmers.com/2015/04/08/emulating-roles-with-expanded-proxy-usersupport-in-5-7-7/ https://www.percona.com/blog/2015/03/02/emulating-roles-percona-pam-pluginproxy-users/ PAM Authentication (Unix, LDAP) Percona, MariaDB und MySQL Enterprise 24 / 39

Verschlüsselung Wer ist der Angreifer? Client/Server SSL App: Record Encryption MariaDB 10.1.4 Table(space) Encryption Filesystem Encryption Keys aus Memory hacken Performance Einfluss Operations/Fehlerbehebung 25 / 39

Zutritt verschaffen ~/.my.cnf --> user / password ~/.mylogin.cnf --> Entschlüsseln /etc/mysql/conf.d/debian.cnf (= root) shell> history ~/.mysql_history $datadir/master.info skip_grant_tables So fertig Security? 26 / 39

Ups! 27 / 39

Backup / Restore Backup? Nur für Mädchen... Bei logischen Fehlern Ups Query! Hardware-Ausfall --> HA Lösung Typen von Backup Logische Backups (mysqldump) Physische Backups (LVM, xtrabackup) Delayed Replikation Restore MTTR (Zeit) Erlaubter Datenverlust? Point-in-Time-Recovery (Binary Logs) Automatisieren, Testen (regelmässig) Warum? Unser Konzept... 28 / 39

Restore regelmässig testen... Produktion Entwicklung Prod QA Test Dev bck DBA nightly restore Developer 29 / 39

Und jetzt das... 30 / 39

Hochverfügbarkeit (HA) Ja, wir haben Sicherheit! Ja, wir haben Backup! Was passiert bei Hardwareausfall??? MTTR bei Hardwareausfall? Redundanz Hilft aber nicht bei logischen Fehlern! Master/Slave, Galera Delayed Replikation für logische Fehler 31 / 39

Automatisches Failover KISS Ihr müsst mit Eurem HA umgehen können...! Umschalten voll manuell halb-automatisch voll-automatisch Wer entscheidet ob failover oder nicht? Voll-automatisch kling verlockend! Oft falsche Failovers, da schwierig zu entscheiden Wir empfehlen: halb-automatisch... 32 / 39

Monitoring Wie stellen wir fest, dass was schief läuft/lief? Überwachen (Monitoring) Notfall Trends MySQL Error log. Lösungen: FromDual Plugins für Nagios FromDual Performance Monitor für MySQL und MariaDB MySQL Enterprise Monitor Critical: DB up/down Filesystem full Replikation läuft Alles andere: Nice to have (Performance Graphen) 33 / 39

Wo lauert das Böse? Personen (eher Datenklau als Zerstörung) Hardware-Schrauber Unix-Admin (root) DBA (kein root?) Entwickler? Endnutzer (Sales?) Sonstige (Putzfrau, Chef,...) Hintermänner: Ehemalige Mitarbeiter Konkurrenz / Geheimdienste Kriminelle Organisationen, Erpressung, DoS Äussere Einflüsse (eher Zerstörung als Datenklau) Wasser (Stausee, Hochwasser, Flutwelle, Lawine) Feuer, Blitz, Sturm, KKW Erbeben, Erdrutsche Hochseefrachter :-) Terror- und/oder Bombenanschläge (Philipinen) Kriegerische Handlungen (Ukraine, nuclear bomb blast on the city of London ) Sonstige Sabotage-Akte 34 / 39

Angriffsvektoren Produktion Entwicklung Prod QA Test Dev File / Disk bck? 35 / 39

Beispiele aus der Praxis 36 / 39

Literatur FromDual Security: http:///security MySQL Docu: http://dev.mysql.com/doc/refman/5.6/en/security.html MySQL Enterprise Security: http://dev.mysql.com/doc/refman/5.6/en/mysql-enterprisesecurity.html Security in MySQL: http://dev.mysql.com/doc/mysqlsecurity-excerpt/5.6/en/index.html What is new in MySQL 5.7: http://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html Security Vulnerabilities Fixed in MariaDB: https://mariadb.com/kb/en/mariadb/security/ 37 / 39

Wir suchen noch: MySQL Datenbank Enthusiast/in für Support / remote-dba / Beratung 38 / 39

Q & A Fragen? Diskussion? Wir haben Zeit für ein persönliches Gespräch... FromDual bietet neutral und unabhängig: Beratung Remote-DBA Support für MySQL, Galera, Percona Server und MariaDB Schulung /presentations 39 / 39