Я использую Puppet для обеспечения MySQL параметризованным классом:
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'],
}
}
Как я могу защитить $password
? В настоящее время я удалил разрешение на чтение по умолчанию из файла определения узла и явно дал puppet
разрешение на чтение через ACL.
Я предполагаю, что другие сталкивались с подобной ситуацией, так что, возможно, есть лучшая практика.
источник
Кто-то другой, вероятно, может указать на какой-нибудь плагин или подобное, что исправляет меня, но общий способ сделать это - сохранить зашифрованный пароль, а не простой текстовый пароль.
Тем не менее, я могу сказать вам прямо сейчас, MySQL не позволяет вам использовать зашифрованный пароль - в противном случае, это был бы пароль, и хеш позволил бы вам войти в любом случае.
Существует множество «хаков», которые позволяют использовать сторонние утилиты, такие как Hiera и GPG . Очевидно, вы можете свернуть свои собственные, но даже собственные списки рассылки Puppet предлагают этот метод .
источник
Вы не указали, от кого вы защищаете этот пароль. Я собираюсь предположить, что это другие системные администраторы или, возможно, разработчики, которые имеют доступ к хозяину puppet и / или клиентским окнам, но не должны знать пароль пользователя root.
Для первоначальной установки пароля вы можете использовать этот синтаксис:
Что позволит вам хранить зашифрованный пароль в конфигурации марионетки вместо открытого текста.
Для использования
mysqladmin
иmysql
клиента в командной строке лучшее, что я могу придумать, - это добавить.my.cnf
файл в конфигурацию вашего марионетки, который будет развернут в домашнем каталоге соответствующего пользователя. Файл как в мастере puppet, так и на клиентах должен иметь соответствующие ограничительные права доступа к файлу.Существует множество способов обойти эти права доступа к файлам, когда вы добавляете puppet в смесь (например, написание exec (), который извлекает файл из клиентов), но это может показаться улучшением по сравнению с хранением пароля в общедоступном файле. Это будет сложнее, если вы используете систему управления версиями для вашего марионеточного конфига.
источник
IDENTIFIED BY PASSWORD '*HASH-HERE'
вместоIDENTIFIED BY 'PASSWORD-HERE'
MySQL, вставляет хеш непосредственно вuser
таблицу. Затем вы должны использовать пароль, который сгенерировал этот хеш для входа в систему. Чтобы увидеть, как будет выглядеть ваша команда предоставления с хешем пароля, войдите в систему и введите егоSHOW GRANTS;
. Вы также можете проверить других пользователейSHOW GRANTS FOR user@host;
Эта ссылка предлагает два метода: использование переменных среды и использование subshell.
Я думаю, что вы также можете создать простую оболочку вокруг вашей команды
mysqladmin
и передать ей зашифрованный пароль. Эта обёртка расшифровывает пароль и передает егоmysqladmin
. Вы должны защитить свою оболочку, так как она содержит часть расшифровки.Вы можете выбрать способ, которым вы чувствуете, что это более безопасно, в зависимости от вашей среды и того, кто имеет доступ к вашей системе.
источник