{"id":211,"date":"2013-08-13T14:33:53","date_gmt":"2013-08-13T12:33:53","guid":{"rendered":"http:\/\/www.makes-it-work.de\/?p=211"},"modified":"2014-09-24T17:06:37","modified_gmt":"2014-09-24T15:06:37","slug":"mysql-datenbank-backup-via-mysqldump-ohne-root-passwort","status":"publish","type":"post","link":"https:\/\/www.makes-it-work.de\/en\/2013\/08\/13\/mysql-datenbank-backup-via-mysqldump-ohne-root-passwort\/","title":{"rendered":"Mysql Datenbank Backup via mysqldump ohne Root Passwort"},"content":{"rendered":"<p><strong>Datenbank-Backups<\/strong> geh\u00f6ren zum t\u00e4glich Brot eines Systemadministrators. Gerne werden hierf\u00fcr kleine <strong>Shell-Skripte<\/strong> auf Basis von <em>mysqldump<\/em> gebastelt, die via <strong>Cronjob<\/strong> angesto\u00dfen werden.<\/p>\n<p>Leider finden sich in der Praxis immer wieder Skripte folgender Art:<\/p>\n<pre lang=\"bash\" line=\"1\" escaped=\"true\">#!\/bin\/bash\r\n\/usr\/bin\/mysqldump -uroot -pSecretPassword mydatabase &gt; backup`date +%Y-%m-%d`.sql<\/pre>\n<p>Nicht nur unn\u00f6tig, sondern auch ein <strong>Sicherheitsrisiko<\/strong> stellt hier die Verwendung des Root-Users dar.<\/p>\n<p><!--more--><\/p>\n<p>Zur Laufzeit von <em>mysqldump<\/em> kann theoretisch das Passwort ausgelesen werden, da es direkt als Shell-Argument angegeben wurde (auch wenn <em>mysqldump<\/em> sich davor mittlerweile sch\u00fctzt).<\/p>\n<p>Noch schlimmer wird es, wenn der Befehl manuell im Terminal eingegeben wird. Ein einfacher Aufruf von &#8220;<em>history<\/em>&#8221; w\u00fcrde jedem, der entsprechenden Shell-Zugang hat, das Passwort anzeigen.<\/p>\n<p>Ein weiteres denkbares Szenario ist, dass dieses Skript unbeabsichtigt f\u00fcr andere Shell-User des gleichen Systems lesbar ist. Schlimmster Fall w\u00e4re hier sicher, wenn der User www-data Lesezugriff auf dieses Backup-Skript h\u00e4tte und es auch noch in einem Verzeichnis liegen w\u00fcrde, das von dem Web-Server ausgeliefert wird.<\/p>\n<p>All diese Szenarien sind nat\u00fcrlich<strong> h\u00f6chst kritisch<\/strong>. F\u00e4llt einem Angreifer durch diese Leichtsinnigkeit das Root-Passwort in die H\u00e4nde, dann stehen ihm alle T\u00fcren offen, da der Root-User absolut keinen Einschr\u00e4nkungen hinsichtlich der Berechtigungen unterliegt.<\/p>\n<p>&nbsp;<\/p>\n<p><strong style=\"font-size: 18px;\">Besser:<\/strong><\/p>\n<ol>\n<li>Es sollte ein<strong> eigener Mysql-Benutzer<\/strong> angelegt werden, der nur <strong>Leserechte<\/strong> erh\u00e4lt.<br \/>\nSollte dieser Account einem Angreifer in die H\u00e4nde fallen, so kann er &#8220;nur&#8221; die Daten, die gesichert werden, <strong>lesen<\/strong>. Dies ist nat\u00fcrlich auch nicht w\u00fcnschenswert, allerdings &#8220;weniger schlimm&#8221; als wenn ein Angreifer freien Zugriff auf alle Daten des Mysql-Servers (\u00fcber alle Datebanken hinweg) erh\u00e4lt und Daten beliebig <strong>l\u00f6schen<\/strong> und <strong>manipulieren<\/strong> kann (evtl. sogar unbemerkt).<br \/>\nEin eigener Backup-User mit Leserechten auf alle Tabellen aller Datenbanken kann via SQL wie folgt angelegt werden:<\/p>\n<pre lang=\"sql\" line=\"1\" escaped=\"true\">CREATE USER 'backup'@'localhost' IDENTIFIED BY 'mRQZCMNd4fb79mtLB8';\r\nGRANT SELECT ON *.* TO 'backup'@'localhost';<\/pre>\n<p>Die Befehle k\u00f6nnen nat\u00fcrlich leicht abgewandelt werden, je nach entsprechendem Anwendungsfall.<\/p>\n<p>Siehe:<br \/>\n<a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/create-user.html\" target=\"_blank\">http:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/create-user.html<\/a><br \/>\n<a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/grant.html\" target=\"_blank\">http:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/grant.html<\/a><\/p>\n<p>&nbsp;<\/li>\n<li>Ein eigener Backup-User ist schonmal der erste richtige Schritt. Allerdings sollte auch dieser keiner unbefugten Person in die H\u00e4nde fallen, denn Lesezugriff auf die Datenbank ist in den meisten F\u00e4llen kritisch genug. Um nun diesen Backup-User m\u00f6glichst <strong>abzusichern<\/strong>, sollte das Passwort auch hier <span style=\"text-decoration: underline;\">nicht<\/span> als Shell-Argument an <em>mysqldump<\/em> \u00fcbergeben werden. Alle wichtigen mysql-Binaries (<em>mysql<\/em>, <em>mysqldump<\/em>, <em>mysqladmin<\/em> usw.) unterst\u00fctzen es einen <strong>Standard-Account<\/strong> (inkl. Passwort) in einer Config-Datei (&#8220;<strong>.my.cnf<\/strong>&#8220;) zu hinterlegen. Diese muss im <strong>Home-Verzeichnis<\/strong> des Shell-Users angelegt werden, unter dem sp\u00e4ter mysqldump (oder das entsprechende Shell-Skript, das mysqldump aufruft) ausgef\u00fchrt wird.<br \/>\nHier ein Beispiel f\u00fcr den Shell-User <em>root<\/em><\/p>\n<pre lang=\"bash\" line=\"1\" escaped=\"true\">root@db:~# cat \/root\/.my.cnf\r\n[mysqldump]\r\nuser=backup\r\npassword=mRQZCMNd4fb79mtLB8<\/pre>\n<p>Der Wert in den eckigen Klammern gibt an, f\u00fcr welche Binary die nachfolgenden Angaben gelten. Der Rest sollte selbsterkl\u00e4rend sein.<\/p>\n<p><strong><span style=\"color: #ff0000;\">Wichtig:<\/span><\/strong><br \/>\nDie <strong>Dateirechte<\/strong> f\u00fcr die <strong>.my.cnf<\/strong> m\u00fcssen <span style=\"text-decoration: underline;\">unbedingt<\/span> \u00fcberpr\u00fcft werden und so angepasst werden, dass <span style=\"text-decoration: underline;\">niemand<\/span> au\u00dfer der Shell-User, in dessen Home-Verzeichnis die Datei liegt, Lesezugriff auf die Datei hat.<\/p>\n<p>Folgendes Beispiel w\u00fcrde dies bei unserer Datei sicherstellen:<\/p>\n<pre lang=\"bash\" line=\"1\" escaped=\"true\">root@db:~# chmod 0600 \/root\/.my.cnf\r\nroot@db:~# ls -la \/root\/.my.cnf\r\n-rw------- 1 root root 118  4. Jul 2012  \/root\/.my.cnf<\/pre>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Wurden diese Steps umgesetzt, kann in Zukunft <em>mysqldump<\/em> ohne Logindaten aufgerufen werden.<\/p>\n<p>Das eingangs erw\u00e4hnte Backup-Skript k\u00f6nnte dann so aussehen:<\/p>\n<pre lang=\"bash\" line=\"1\" escaped=\"true\">#!\/bin\/bash\r\n\/usr\/bin\/mysqldump mydatabase &gt; backup`date +%Y-%m-%d`.sql<\/pre>\n<p>So lange kein Unbefugter Zugriff auf den entsprechenden Shell-User erlangt, sollte der MySQL-Backupvorgang mit deutlich verbesserter Sicherheit laufen.<\/p>\n<p>&nbsp;<\/p>\n<p><strong style=\"font-size: 18px;\">Fazit:<\/strong><br \/>\nMit 2 <strong>einfachen Schritten<\/strong> (eigener Backup-User nur mit Leserechten + Passwort das Users nicht direkt angeben) kann die Sicherheit des Mysql-Servers doch erheblich gesteigert werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Datenbank-Backups geh\u00f6ren zum t\u00e4glich Brot eines Systemadministrators. Gerne werden hierf\u00fcr kleine Shell-Skripte auf Basis von mysqldump gebastelt, die via Cronjob angesto\u00dfen werden. Leider finden sich in der Praxis immer wieder Skripte folgender Art: #!\/bin\/bash \/usr\/bin\/mysqldump -uroot -pSecretPassword mydatabase &gt; backup`date +%Y-%m-%d`.sql Nicht nur unn\u00f6tig, sondern auch ein Sicherheitsrisiko stellt hier die Verwendung des Root-Users dar.<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_ti_tpc_template_sync":false,"_ti_tpc_template_id":"","_links_to":"","_links_to_target":""},"categories":[95,94],"tags":[52,51,50],"translation":{"provider":"WPGlobus","version":"2.12.0","language":"en","enabled_languages":["de","en"],"languages":{"de":{"title":true,"content":true,"excerpt":false},"en":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v14.4.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Mysql Datenbank Backup via mysqldump ohne Root Passwort - Makes IT work - der Blog von OMG.de<\/title>\n<meta name=\"robots\" content=\"index, follow\" \/>\n<meta name=\"googlebot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta name=\"bingbot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.makes-it-work.de\/2013\/08\/13\/mysql-datenbank-backup-via-mysqldump-ohne-root-passwort\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mysql Datenbank Backup via mysqldump ohne Root Passwort - Makes IT work - der Blog von OMG.de\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.makes-it-work.de\/2013\/08\/13\/mysql-datenbank-backup-via-mysqldump-ohne-root-passwort\/\" \/>\n<meta property=\"og:site_name\" content=\"Makes IT work - der Blog von OMG.de\" \/>\n<meta property=\"article:published_time\" content=\"2013-08-13T12:33:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-09-24T15:06:37+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@omgde\" \/>\n<meta name=\"twitter:site\" content=\"@omgde\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.makes-it-work.de\/en\/#organization\",\"name\":\"OMG.de\",\"url\":\"https:\/\/www.makes-it-work.de\/en\/\",\"sameAs\":[\"https:\/\/twitter.com\/omgde\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.makes-it-work.de\/en\/#logo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.makes-it-work.de\/wp-content\/uploads\/2021\/11\/Logo_OMG_PNG-Kopie.png\",\"width\":358,\"height\":356,\"caption\":\"OMG.de\"},\"image\":{\"@id\":\"https:\/\/www.makes-it-work.de\/en\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.makes-it-work.de\/en\/#website\",\"url\":\"https:\/\/www.makes-it-work.de\/en\/\",\"name\":\"Makes IT work - der Blog von OMG.de\",\"description\":\"Themen und News rundum IT und Technik. Von den Spezialisten der OMG.de GmbH.\",\"publisher\":{\"@id\":\"https:\/\/www.makes-it-work.de\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/www.makes-it-work.de\/en\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.makes-it-work.de\/2013\/08\/13\/mysql-datenbank-backup-via-mysqldump-ohne-root-passwort\/#webpage\",\"url\":\"https:\/\/www.makes-it-work.de\/2013\/08\/13\/mysql-datenbank-backup-via-mysqldump-ohne-root-passwort\/\",\"name\":\"Mysql Datenbank Backup via mysqldump ohne Root Passwort - Makes IT work - der Blog von OMG.de\",\"isPartOf\":{\"@id\":\"https:\/\/www.makes-it-work.de\/en\/#website\"},\"datePublished\":\"2013-08-13T12:33:53+00:00\",\"dateModified\":\"2014-09-24T15:06:37+00:00\",\"description\":\"Um mysqldump ohne Root-Passwort z.B. in Bash-Skripten sicher verwenden zu k\\u00f6nnen, gibt es ein paar kleine Tricks, die wir hier zeigen.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.makes-it-work.de\/2013\/08\/13\/mysql-datenbank-backup-via-mysqldump-ohne-root-passwort\/\"]}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.makes-it-work.de\/2013\/08\/13\/mysql-datenbank-backup-via-mysqldump-ohne-root-passwort\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.makes-it-work.de\/2013\/08\/13\/mysql-datenbank-backup-via-mysqldump-ohne-root-passwort\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.makes-it-work.de\/en\/#\/schema\/person\/d47f64c40cf8bb33fa90ccfe8f82f6d8\"},\"headline\":\"Mysql Datenbank Backup via mysqldump ohne Root Passwort\",\"datePublished\":\"2013-08-13T12:33:53+00:00\",\"dateModified\":\"2014-09-24T15:06:37+00:00\",\"commentCount\":1,\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.makes-it-work.de\/2013\/08\/13\/mysql-datenbank-backup-via-mysqldump-ohne-root-passwort\/#webpage\"},\"publisher\":{\"@id\":\"https:\/\/www.makes-it-work.de\/en\/#organization\"},\"keywords\":\"Backup,Datenbank,MySQL\",\"articleSection\":\"Blog,Code\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.makes-it-work.de\/2013\/08\/13\/mysql-datenbank-backup-via-mysqldump-ohne-root-passwort\/#respond\"]}]},{\"@type\":[\"Person\"],\"@id\":\"https:\/\/www.makes-it-work.de\/en\/#\/schema\/person\/d47f64c40cf8bb33fa90ccfe8f82f6d8\",\"name\":\"Pascal Rilka\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.makes-it-work.de\/en\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2bcf33f17e56ffd1190345200be701cd?s=96&d=mm&r=g\",\"caption\":\"Pascal Rilka\"},\"description\":\"Pascal Rilka ist als Webentwickler bei ActiView daf\\u00fcr zust\\u00e4ndig, dass auch gro\\u00dfe individuelle Internet-Projekte mit moderner Technik umgesetzt werden, zum Beispiel mit stark angepassten CakePHP-L\\u00f6sungen. Er ist Liebhaber von Git und SASS.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.makes-it-work.de\/en\/wp-json\/wp\/v2\/posts\/211"}],"collection":[{"href":"https:\/\/www.makes-it-work.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.makes-it-work.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.makes-it-work.de\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.makes-it-work.de\/en\/wp-json\/wp\/v2\/comments?post=211"}],"version-history":[{"count":9,"href":"https:\/\/www.makes-it-work.de\/en\/wp-json\/wp\/v2\/posts\/211\/revisions"}],"predecessor-version":[{"id":240,"href":"https:\/\/www.makes-it-work.de\/en\/wp-json\/wp\/v2\/posts\/211\/revisions\/240"}],"wp:attachment":[{"href":"https:\/\/www.makes-it-work.de\/en\/wp-json\/wp\/v2\/media?parent=211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.makes-it-work.de\/en\/wp-json\/wp\/v2\/categories?post=211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.makes-it-work.de\/en\/wp-json\/wp\/v2\/tags?post=211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}