Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chef infra 我可以使用Chef的sensitiveve属性执行多行BASH代码,这是哪个Chef资源?_Chef Infra_Chef Recipe - Fatal编程技术网

Chef infra 我可以使用Chef的sensitiveve属性执行多行BASH代码,这是哪个Chef资源?

Chef infra 我可以使用Chef的sensitiveve属性执行多行BASH代码,这是哪个Chef资源?,chef-infra,chef-recipe,Chef Infra,Chef Recipe,我希望在运行带有模板的BASH代码和可能包含敏感数据的变量的配方时,防止任何输出到chef客户端 在我的例子中,我正在自动创建一个MySQL用户,该用户从加密的数据包中获取一个变量,并通过命令行手动保护/强化MySQL安装。当我运行chef客户端时,它向用户显示变量输出,包括MySQL密码 “execute”允许敏感属性,但这个问题涉及一个多次使用变量的bash脚本,而不仅仅是一行。我可以使用符号&&'的延续来完成,但是脚本越长,它看起来就越乱 “script”和“bash”不允许将“sensi

我希望在运行带有模板的BASH代码和可能包含敏感数据的变量的配方时,防止任何输出到chef客户端

在我的例子中,我正在自动创建一个MySQL用户,该用户从加密的数据包中获取一个变量,并通过命令行手动保护/强化MySQL安装。当我运行chef客户端时,它向用户显示变量输出,包括MySQL密码

“execute”允许敏感属性,但这个问题涉及一个多次使用变量的bash脚本,而不仅仅是一行。我可以使用符号&&'的延续来完成,但是脚本越长,它看起来就越乱

“script”和“bash”不允许将“sensitive”用作属性,并返回“uninitialized constant”错误。这真是糟透了,因为这是一个非常棒的功能

如何让脚本变量隐藏在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


在注释中回答,在Ruby中true和false是小写的。使用True会让Ruby尝试寻找一个不存在的常量。

顺便说一句,我倾向于建议将敏感数据放在环境中,而不是代码中。将密码放在命令行上会将其暴露给机器上运行的其他进程,同时mysql可能会在密码开始模糊后重写其命令行,但在重写之前仍有一个窗口,因此即使Chef本身没有登录密码,这也是危险的;它关于环境变量安全性的警告在现代Linux上是不适用的,但在其他方面,它的指导通常是准确的。这应该是正确的。Ruby小写拼写布尔。Ruby中的类是常量,因此类型是TrueClass和FalseClass:mysql\u secure\u安装可以在无人值守的情况下使用。请注意-use default和-defaults file/-defaults额外文件选项,专门针对这种情况。也就是说,我是一个老前辈,在20世纪90年代末努力阻止使用关系完整性、事务完整性、存储过程之后,我仍然认为MySQL团队对于一个严肃的数据库产品来说是完全不可信的,或者他们当时不支持的任何其他功能都是粗糙的,没有足够的好处来证明典型的非银行用例的性能成本。
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