Korzystam z Puppet, aby zapewnić MySQL sparametryzowaną klasę:
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'],
}
}
Jak mogę chronić $password
? Obecnie usunąłem domyślne uprawnienia do odczytu świata z pliku definicji węzła i wyraźnie dałem puppet
uprawnienia odczytu przez ACL.
Zakładam, że inni zetknęli się z podobną sytuacją, więc być może istnieje lepsza praktyka.
źródło
Ktoś inny prawdopodobnie wskaże jakąś wtyczkę lub podobną, która mnie poprawia, ale ogólnym sposobem na zrobienie tego jest przechowywanie zaszyfrowanego hasła, a nie hasła w postaci zwykłego tekstu.
Jednak mogę wam teraz powiedzieć, że MySQL nie pozwala na użycie zaszyfrowanego hasła - w przeciwnym razie, TO MUSI być hasłem, a skrót pozwala na zalogowanie się mimo to.
Wokół jest wiele „hacków”, które pozwalają korzystać z narzędzi innych firm, takich jak Hiera i GPG . Oczywiście możesz rzucić własne - ale nawet własne listy mailingowe Puppet sugerują tę metodę .
źródło
Nie określiłeś, przed kim chronisz to hasło. Zakładam, że inni sysadmini lub potencjalnie programiści mają dostęp do mastera kukiełkowego i / lub skrzynek klienta, ale nie muszą znać hasła roota.
Aby wstępnie ustawić hasło, możesz użyć tej składni:
Co pozwoliłoby Ci przechowywać zaszyfrowane hasło w konfiguracji lalek zamiast hasła w postaci zwykłego tekstu.
Aby użyć
mysqladmin
imysql
klienta w wierszu poleceń, najlepsze, co mogę wymyślić, to dodać.my.cnf
plik do konfiguracji lalek, który zostanie wdrożony w katalogu osobistym odpowiedniego użytkownika. Plik zarówno w master marionetce, jak i na klientach powinien mieć odpowiednie, restrykcyjne uprawnienia do plików.Istnieje wiele sposobów na obejście tych uprawnień do plików, gdy dodajesz marionetkę do miksu (np. Napisanie exec (), który ściąga plik z klientów), ale wydaje się, że byłoby to lepsze niż przechowywanie hasła w pliku czytelnym dla świata. Byłoby to trudniejsze, jeśli używasz systemu kontroli wersji dla konfiguracji lalek.
źródło
IDENTIFIED BY PASSWORD '*HASH-HERE'
zamiastIDENTIFIED BY 'PASSWORD-HERE'
MySQL, wstawia skrót bezpośrednio douser
tabeli. Następnie musisz użyć hasła, które wygenerowało ten skrót, aby się zalogować. Możesz zobaczyć, jak wyglądałoby Twoje polecenie grantu z skrótem hasła, logując się normalnie i wpisującSHOW GRANTS;
. Możesz także sprawdzić innych użytkowników za pomocąSHOW GRANTS FOR user@host;
Ten link sugeruje dwie metody: użycie zmiennych środowiskowych i użycie podpowłoki.
Myślę, że możesz również utworzyć proste opakowanie wokół polecenia
mysqladmin
i przekazać do niego zaszyfrowane hasło. To opakowanie odszyfruje hasło i przekaże je domysqladmin
. Musisz chronić swoje opakowanie, ponieważ zawiera ono część deszyfrującą.Możesz wybrać sposób, w jaki uważasz, że jest bardziej bezpieczny, w zależności od środowiska i tego, kto ma dostęp do twojego systemu.
źródło