Kukla'da bir şifre değişkenini nasıl güvence altına alırım (bu durumda bir MySQL şifresi)?


13

Parametreli bir sınıf ile MySQL sağlamak için Kukla kullanıyorum:

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'],
        }
}

Nasıl koruyabilirim $password? Şu anda, varsayılan dünya tarafından okunabilir izni düğüm tanımı dosyasından kaldırdım ve açıkça puppetACL aracılığıyla okuma izni verdim .

Başkalarının da benzer bir durumla karşılaştığını varsayıyorum, belki de daha iyi bir uygulama var.

Yanıtlar:


3

Kukla ve MySQL ile çalışırken, kök parolayı /root/.my.cnf dosyasına koyma, bu dosyayı kilitleme ve SSH erişimini veritabanı sunucusuna kısıtlama eğilimindeyim.

Evet, kök parolayı db sunucusunda açık metin olarak saklamak en güvenli çözüm değildir. Ancak, mysql kök parolasını bu dosyaya yazarsanız, mysql kök hesabının localhost'tan oturum açmaya izin vermesini sağlamak, parolayı kukladan ve işlem listesi pstablosunun dışında tutar.

Ayrıca, birinin /root/.my.cnf adresinden dosyayı okumak için kök erişimi varsa, muhtemelen veritabanına anında kök erişimi elde etmek için yerel MySQL arka plan programını durdurma ve kullanıcı tablosu olmadan arka plan programını yeniden başlatma erişimi vardır.


2
Mysql 5.6 ve üstü için mysql_config_editor kullanın. Sonra en azından şifre düz metin olmayacak.
Kejau Touray

1

Başka biri muhtemelen beni düzelten bazı eklentileri veya benzerlerini gösterebilir, ancak bununla ilgili genel yol , düz metin parolayı değil, şifrelenmiş parolayı saklamaktır .

Ancak, size şu anda söyleyebilirim, MySQL şifreli bir şifre kullanmanıza izin vermez - aksi takdirde, şifre OLABİLİR ve karma yine de giriş yapmanıza izin verecektir.

Etrafınızda Hiera ve GPG gibi üçüncü taraf yardımcı programları kullanmanıza izin veren birçok "hack" vardır . Açıkçası, kendinizinkini döndürebilirsiniz - ancak Kukla'nın kendi posta listeleri bile bu yöntemi önerir .


1

Bu şifreyi kimden koruduğunuzu belirtmediniz. Diğer sysadmin'ler veya muhtemelen kukla ustası ve / veya istemci kutularına erişimi olan ancak kök parolayı bilmeleri gerekmeyen geliştiriciler olduğunu varsayacağım.

Başlangıçta şifreyi ayarlamak için bu sözdizimini kullanabilirsiniz:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6DF1FC54F0CCD999F55D59D3D88526878230C77C' WITH GRANT OPTION;

Bu, şifreli bir parolayı düz metin yerine kukla yapılandırmanızda saklamanızı sağlar.

Kullanmak mysqladminve mysqlkomut satırında istemci için düşünebildiğim en iyi .my.cnf, kukla yapılandırmanıza uygun bir kullanıcının ana dizinine dağıtılan bir dosya eklemektir . Hem kukla yöneticisi hem de istemcilerdeki dosya uygun, kısıtlayıcı dosya izinlerine sahip olmalıdır.

Karışıma kukla eklediğinizde (dosya istemcilerden dosyayı çeken bir exec () yazmak gibi) bu dosya izinleri etrafında birçok yol vardır, ancak parolayı dünya tarafından okunabilir bir dosyada saklamanın üzerinde bir gelişme gibi görünmektedir. Kukla yapılandırmanız için bir sürüm sistemi kullanıyorsanız bu daha zor olacaktır.


1
Ancak birisi şifrelenmiş parolayı alırsa, giriş yapmak için yalnızca şifrelenmiş dizeyi kullanamazlar mı?
Andrew M.

@Redmumba Tüm testlerim bunu gösteriyor. Belki de Ladadadada'nın üzerinde çalışabileceği bir şeyi kaçırıyorum.
Belmin Fernandez

3
Hayır IDENTIFIED BY PASSWORD '*HASH-HERE'. IDENTIFIED BY 'PASSWORD-HERE'MySQL yerine kullandığınızda , karma doğrudan usertabloya eklenir . Daha sonra, oturum açmak için bu hash'i oluşturan şifreyi kullanmanız gerekir. Normal olarak giriş yapıp yazarak şifre karması ile hibe komutunuzun nasıl görüneceğini görebilirsiniz SHOW GRANTS;. Ayrıca diğer kullanıcıları kontrol edebilirsinizSHOW GRANTS FOR user@host;
Ladadadada

Ah, bu yüzden hash'i giriş yapmak için kullanamazsınız. Ancak, veritabanına bağlanması gereken bir müşterisi varsa (örneğin, ön ucu), düşünce için yiyecek olan şifrelenmiş parolayı saklamanın bir yoluna ihtiyacı olacaktır.
Andrew M.

0

Bu bağlantı iki yöntem önerir: ortam değişkenlerini kullanma ve alt kabuk kullanma.

Ayrıca komutunuzun etrafında basit bir sarıcı oluşturabilir mysqladminve şifrelenmiş parolanızı ona aktarabilirsiniz. Bu paket daha sonra parolanın şifresini çözer ve adresine iletir mysqladmin. Şifre çözme kısmını içerdiğinden ambalajınızı korumanız gerekir.

Ortamınıza ve sisteminize kimlerin erişimi olduğunu daha güvenli hissetme şeklinizi seçebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.