На каком ресурсе Chef можно выполнить несколько строк кода BASH, используя свойство Sensititve Chef? - PullRequest
0 голосов
/ 01 мая 2018

Я бы хотел запретить вывод на клиентский шеф-повар при запуске кода BASH с шаблонами и рецептов, которые могут содержать переменные с конфиденциальными данными.

В моем случае я автоматизирую созданного пользователя MySQL, который берет переменную из пакета с зашифрованными данными, а также вручную защищает / укрепляет установку MySQL (через командную строку). Когда я запускаю chef-client, он показывает переменную, выводимую пользователю, включая пароль MySQL.

«execute» разрешает чувствительное свойство, но эта проблема связана со сценарием bash, который использует переменную (-и) несколько раз, а не только одну строку. Я мог бы сделать это, используя продолжение амперсандов '&&', но это выглядело бы грязно, чем дольше сценарий получался.

'script' и 'bash' не позволяют использовать 'Sensitive' в качестве свойства, и возвращает ошибку 'неинициализированная константа'. Этот вид отстой, так как это было бы такой замечательной возможностью здесь.

Мысли о том, как скрыть переменные скрипта от вывода chef-клиента?

dbag = data_bag_item('pass', 'mysql')
db_pass = dbag["mysqlpass"]

bash 'install_mysql' do
  sensitive True
  code <<-EOC
    systemctl start mysqld.service && systemctl enable mysqld.service
    mysqladmin -u root password #{db_pass}
    # automate secure mysql install
    mysql -u root -p#{db_pass} -e "UPDATE mysql.user SET Password=PASSWORD('#{db_pass}') WHERE User='root'"
    mysql -u root -p#{db_pass} -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
    mysql -u root -p#{db_pass} -e "DELETE FROM mysql.user WHERE User=''"
    mysql -u root -p#{db_pass} -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'"
    mysql -u root -p#{db_pass} -e "FLUSH PRIVILEGES"
    # create mysql user, and pass
    mysql -e "CREATE DATABASE mysqldb;" -u root -p#{db_pass}
    mysql -e "GRANT ALL PRIVILEGES ON mysqldb.* TO "mysqluser"@"localhost" IDENTIFIED BY '#{db_pass}';" -u root -p#{db_pass}
    mysql -e 'FLUSH PRIVILEGES;' -u root -p#{db_pass}
  EOC
end

Я также пробовал:

script 'install_mysql' do
  sensitive True
  ...
end

и

cookbook_file '/tmp/install_mysql.sh'
  source install_mysql.sh
  ...
end

execute 'install_mysql' do
  sensitive True
  command "/tmp/install_mysql.sh"
end

1 Ответ

0 голосов
/ 02 мая 2018

В комментариях true и false строчные в Ruby. Использование True заставляет Ruby пытаться найти const, который не существует.

...