Ich verwende Puppet, um MySQL mit einer parametrisierten Klasse auszustatten:
class mysql::server( $password ) {
package { 'mysql-server': ensure => installed }
package { 'mysql': ensure => installed }
service { 'mysqld':
enable => true,
ensure => running,
require => Package['mysql-server'],
}
exec { 'set-mysql-password':
unless => "mysqladmin -uroot -p$password status",
path => ['/bin', '/usr/bin'],
command => "mysqladmin -uroot password $password",
require => Service['mysqld'],
}
}
Wie kann ich schützen $password
? Derzeit habe ich die standardmäßige weltweite puppet
Leseberechtigung aus der Knotendefinitionsdatei entfernt und die Leseberechtigung explizit über ACL erteilt.
Ich gehe davon aus, dass andere auf eine ähnliche Situation gestoßen sind, also gibt es vielleicht eine bessere Praxis.
quelle
Jemand anders kann wahrscheinlich auf ein Plug-In oder ähnliches hinweisen, das mich korrigiert. Die allgemeine Vorgehensweise besteht jedoch darin, das verschlüsselte Kennwort und nicht das Nur-Text-Kennwort zu speichern .
Allerdings kann ich Ihnen jetzt sagen, dass MySQL die Verwendung eines verschlüsselten Passworts nicht zulässt - andernfalls wäre das das Passwort und der Hash würde es Ihnen ermöglichen, sich trotzdem anzumelden.
Es gibt viele "Hacks", mit denen Sie Dienstprogramme von Drittanbietern wie Hiera und GPG verwenden können . Natürlich können Sie auch Ihre eigenen Mailinglisten erstellen - aber selbst Puppets eigene Mailinglisten schlagen diese Methode vor .
quelle
Sie haben nicht angegeben, vor wem Sie dieses Passwort schützen. Ich gehe davon aus, dass es andere Sysadmins oder möglicherweise Entwickler sind, die Zugriff auf den Puppet-Master und / oder die Client-Boxen haben, aber das Root-Passwort nicht kennen müssen.
Zum Festlegen des Kennworts können Sie zunächst die folgende Syntax verwenden:
Damit können Sie ein verschlüsseltes Passwort in Ihrer Puppet-Konfiguration anstelle eines Klartext-Passworts speichern.
Für die Verwendung
mysqladmin
und denmysql
Client in der Befehlszeile ist das Beste, was ich mir vorstellen kann, eine.my.cnf
Datei zu Ihrer Puppet-Konfiguration hinzuzufügen , die im Home-Verzeichnis eines entsprechenden Benutzers bereitgestellt wird. Die Datei sowohl im Puppenmaster als auch auf den Clients sollte über entsprechende, einschränkende Dateiberechtigungen verfügen.Es gibt viele Möglichkeiten, diese Dateiberechtigungen zu umgehen, wenn Sie der Mischung eine Marionette hinzufügen (z. B. das Schreiben einer exec (), die die Datei von den Clients abruft). Dies scheint jedoch eine Verbesserung gegenüber dem Speichern des Kennworts in einer weltweit lesbaren Datei zu sein. Dies wäre schwieriger, wenn Sie ein Versionierungssystem für Ihre Puppet-Konfiguration verwenden.
quelle
IDENTIFIED BY PASSWORD '*HASH-HERE'
anstelle vonIDENTIFIED BY 'PASSWORD-HERE'
MySQL verwenden, wird der Hash direkt in dieuser
Tabelle eingefügt. Sie müssen dann das Kennwort verwenden, das diesen Hash generiert hat, um sich anzumelden. Sie können sehen, wie Ihr Grant-Befehl mit dem Kennwort-Hash aussehen würde, indem Sie sich normal anmelden und Folgendes eingebenSHOW GRANTS;
. Sie können auch andere Benutzer mitSHOW GRANTS FOR user@host;
Dieser Link schlägt zwei Methoden vor: Verwendung von Umgebungsvariablen und Verwendung von Subshell.
Ich denke, Sie können auch einen einfachen Wrapper um Ihren Befehl erstellen
mysqladmin
und Ihr verschlüsseltes Kennwort übergeben. Dieser Wrapper entschlüsselt dann das Passwort und übergibt es anmysqladmin
. Sie müssen Ihren Wrapper schützen, da er den Entschlüsselungsteil enthält.Sie können je nach Ihrer Umgebung und dem Zugriff auf Ihr System festlegen, wie Sie sich sicherer fühlen.
quelle