2016-11-30 2 views
0

私は資源の一つでこれを持っている:私のテンプレートの一つは、物事が含まれている場合シェフ - リソースの更新を破ることなくbcryptハッシュを含むテンプレートを作成するにはどうすればいいですか?

service 'my_service' do 
    ... 
end 

template config_file do 
    source new_resource.template_file 
    variables({ 
    config: node[:a][:b][:c][:configs][new_resource.name] 
    }) 

    notifies :restart, "service[my_service]" 
end 

問題は、bcryptのパスワードとして生じる:

... 
passhash = <%= 
require 'bcrypt' 
::BCrypt::Password::create(@config[:password]) 
%> 

これは、テンプレートリソースを更新するようになります、毎回シェフの勤務ごとにサービスが再開されます。

実行ごとに異なるハッシュが生成されないようにするにはどうすればよいですか?

レシピに外ハッシュを生成しているようだ汚い、通常の属性にそれを保存...

+0

に消えているようですと塩。また、同一の入力を与えられれば、同じ出力が得られるはずです。 ':: BCrypt :: Password :: create'にsaltを与える方法はありますか? –

+0

残念ながら、いいえ。塩は乱数のセットのようには見えませんが、特殊な方法で、いくつかのC拡張で生成されます。理論的には、塩生成器には同じ一連のランダムストリームが供給される可能性がありますが、それは公開されていません。 –

答えて

1

bcryptのモジュールのcodeで少し掘りとnode['hostname']由来塩を使用した後ごとに異なる塩を与えるためにまだ各実行にコヒーレント塩を与えながらマシンは、この動作するはずです:

passhash = <%= 
require 'bcrypt' 
salt="$2a$05$Whatever_you_want#{node['hostname'].hash.to_s}" 
::BCrypt::Engine.hash_secret(@config[:password],salt) 
%> 

例をダミーデータでIRBに:

require 'bcrypt' 
irb(main):067:0> salt="$2a$05$abcdefghijklmnopqrstuvwxyz" 
=> "$2a$05$abcdefghijklmnopqrstuvwxyz" 
irb(main):068:0> BCrypt::Engine.hash_secret("toto",salt) 
=> "$2a$05$abcdefghijklmnopqrstuuysiG0IbQUOykz7YKwKH2q3gpjfBWJZG" 
irb(main):069:0> BCrypt::Engine.hash_secret("toto",salt) 
=> "$2a$05$abcdefghijklmnopqrstuuysiG0IbQUOykz7YKwKH2q3gpjfBWJZG" 

塩は切り捨てられます。最後の$の後の部分は22文字より長くなければなりません。 Validation code is here

塩の開始が/etc/shadowのエントリとおりであり、陰窩方法(bcryptのため2a)、第二の部分は、次の塩自体がパスワードハッシュが続き、wikipediaに従ってキーイングのラウンド数です。

+0

BCryptハッシュは複数の反復で生成されているようです。少なくともこれが元の塩の世代と同じくらい安全であることはわかっていますか? –

+0

これは塩の2番目の部分です.05はデフォルト値です.10を使用して硬化させることができます。 – Tensibai

+1

@ÁkosVandra根本的な方法はまだbcryptですが、塩が推測できればそれほど難しくないと主張するかもしれませんが、あなたが影にアクセスするときは同じことです。反復回数は、生のブリーフィング暗号関数[ここ](https://github.com/rg3/)で使用される2番目のパラメータです(2番目と3番目の '$ 'の範囲は0から30までです。 bcrypt/blob/master/crypt_blowfish/crypt_blowfish.c#L688)を使用して、実行する反復回数を決定します。 – Tensibai

0

最も洗練されたソリューションではありませんが、シェフファイルキャッシュに値をキャッシュしています。おそらくヘルパー

 "<%= @config[:auth][:username] %>": "<%= 
      require 'bcrypt' 

      hash_cache_file = File.join(Chef::Config[:file_cache_path], 'pass_hash.bcrypt') 

      oldhash = ::BCrypt::Password.new(File.read(hash_cache_file).strip) if File.exist?(hash_cache_file) 

      if oldhash == @config[:auth][:password] 
       oldhash 
      else 
       ::BCrypt::Password::create(@config[:auth][:password]).tap do |newhash| 
        File.open(hash_cache_file, 'w') { |file| file.write(newhash) } 
       end 
      end 
     %>" 
0

にコードをリファクタリングする必要があり、私が何シェフに精通していませんが、平文のパスワードをbcryptのを期待bcryptのはシェフ12

opt/chef/embedded/bin/irb 
 
irb(main):001:0> require 'bcrypt' 
 
LoadError: cannot load such file -- bcrypt 
 
\t from /opt/chef/embedded/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
 
\t from /opt/chef/embedded/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
 
\t from (irb):1 
 
\t from /opt/chef/embedded/bin/irb:11:in `<main>' 
 
    
 
    
 
ls lib/ruby/gems/2.3.0/gems/ 
 
addressable-2.4.0  hashie-3.5.3     net-telnet-0.1.1   rspec-its-1.2.0 
 
appbundler-0.10.0  highline-1.7.8    nokogiri-1.7.0.1   rspec_junit_formatter-0.2.3 
 
ast-2.3.0    iniparse-1.4.2    ohai-8.23.0     rspec-mocks-3.5.0 
 
binding_of_caller-0.7.2 ipaddress-0.8.3    parser-2.4.0.0    rspec-support-3.5.0 
 
builder-3.2.3   json-2.0.3     plist-3.2.0     rubocop-0.47.1 
 
bundler-1.12.5   libyajl2-1.2.0    power_assert-0.2.6   rubygems-update-2.6.10 
 
byebug-9.0.6    method_source-0.8.2   powerpack-0.1.1    ruby-prof-0.16.2 
 
chef-12.19.36   mini_portile2-2.1.0   proxifier-1.0.3    ruby-progressbar-1.8.1 
 
chef-config-12.19.36  minitest-5.8.3    pry-0.10.4     ruby-shadow-2.5.0 
 
cheffish-4.1.1   mixlib-archive-0.4.1   pry-byebug-3.4.2   serverspec-2.38.0 
 
chefstyle-0.5.0   mixlib-authentication-1.4.1 pry-remote-0.1.8   sfl-2.3 
 
chef-zero-5.3.0   mixlib-cli-1.7.0    pry-stack_explorer-0.4.9.2 simplecov-0.13.0 
 
coderay-1.1.1   mixlib-config-2.2.4   rack-2.0.1     simplecov-html-0.10.0 
 
debug_inspector-0.0.2 mixlib-log-1.7.1    rainbow-2.2.1    slop-3.6.0 
 
did_you_mean-1.0.0  mixlib-shellout-2.2.7  rake-10.4.2     specinfra-2.66.9 
 
diff-lcs-1.3    multi_json-1.12.1   rake-11.3.0     syslog-logger-1.6.8 
 
docile-1.1.5    net-scp-1.2.1    rb-readline-0.5.4   systemu-2.6.5 
 
erubis-2.7.0    net-sftp-2.1.2    rdoc-4.2.1     test-unit-3.1.5 
 
ffi-1.9.17    net-ssh-4.0.1    rspec-3.5.0     unicode-display_width-1.1.3 
 
ffi-yajl-2.3.0   net-ssh-gateway-1.3.0  rspec-core-3.5.4   uuidtools-2.1.5 
 
fuzzyurl-0.9.0   net-ssh-multi-1.2.1   rspec-expectations-3.5.0 wmi-lite-1.0.0 
 

 

+0

いつでもchef_gemとして追加することができます –

関連する問題