Saya menggunakan Wayang untuk menyediakan MySQL dengan kelas parameter:
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'],
}
}
Bagaimana saya bisa melindungi $password
? Saat ini, saya menghapus izin dunia yang dapat dibaca dari file definisi simpul dan secara eksplisit memberikan puppet
izin baca melalui ACL.
Saya berasumsi orang lain telah menemukan situasi yang sama jadi mungkin ada praktik yang lebih baik.
sumber
Orang lain mungkin dapat menunjukkan beberapa plug-in atau serupa yang mengoreksi saya, tetapi cara umum untuk melakukannya adalah dengan menyimpan kata sandi yang dienkripsi , bukan kata sandi teks biasa.
Namun, saya dapat memberitahu Anda sekarang, MySQL tidak mengizinkan Anda untuk menggunakan kata sandi terenkripsi - jika tidak, itu AKAN menjadi kata sandinya, dan hash akan memungkinkan Anda untuk login.
Ada banyak "peretasan" di sekitar yang memungkinkan Anda untuk menggunakan utilitas pihak ketiga seperti Hiera dan GPG . Jelas, Anda dapat menggulung sendiri - tetapi bahkan milis Wayang sendiri menyarankan metode ini .
sumber
Anda tidak menentukan dari siapa Anda melindungi kata sandi ini. Saya akan menganggap itu sysadmin lain atau mungkin pengembang yang memiliki akses ke master boneka dan / atau kotak klien tetapi tidak perlu mengetahui kata sandi root.
Untuk mengatur kata sandi pada awalnya, Anda dapat menggunakan sintaks ini:
Yang akan memungkinkan Anda untuk menyimpan kata sandi terenkripsi dalam konfigurasi boneka Anda bukan yang plaintext.
Untuk menggunakan
mysqladmin
danmysql
klien pada baris perintah, yang terbaik yang bisa saya pikirkan adalah menambahkan.my.cnf
file ke konfigurasi boneka Anda yang akan disebarkan ke direktori home pengguna yang sesuai. File di master boneka dan di klien harus memiliki izin file yang sesuai dan membatasi.Ada banyak cara di sekitar izin file tersebut ketika Anda menambahkan boneka ke dalam campuran (seperti menulis exec () yang menarik file dari klien) tetapi tampaknya ada perbaikan dibandingkan menyimpan kata sandi dalam file yang dapat dibaca dunia. Ini akan lebih sulit jika Anda menggunakan sistem versi untuk konfigurasi boneka Anda.
sumber
IDENTIFIED BY PASSWORD '*HASH-HERE'
bukannyaIDENTIFIED BY 'PASSWORD-HERE'
memasukkan MySQL hash langsung keuser
tabel. Anda kemudian harus menggunakan kata sandi yang menghasilkan hash untuk masuk. Anda dapat melihat seperti apa bentuk perintah hibah dengan hash kata sandi dengan masuk secara normal dan mengetikSHOW GRANTS;
. Anda juga dapat memeriksa pengguna lain denganSHOW GRANTS FOR user@host;
Tautan ini menyarankan dua metode: menggunakan variabel lingkungan, dan menggunakan subkulit.
Saya pikir Anda juga dapat membuat pembungkus sederhana di sekitar perintah Anda
mysqladmin
dan meneruskan kata sandi Anda yang terenkripsi. Pembungkus ini kemudian akan mendekripsi kata sandi dan meneruskannya kemysqladmin
. Anda perlu melindungi pembungkus Anda karena mengandung bagian dekripsi.Anda dapat memilih cara yang Anda rasa lebih aman berdasarkan lingkungan Anda dan siapa yang memiliki akses ke sistem Anda.
sumber