LoginSignup
7

More than 5 years have passed since last update.

chef使いのための、ガチでないパスワードの難読化

Posted at

chefで共通cookbookつくったりしていると出てくるのがパスワード。ガチなパスワードな場合はEncrypted data bagsに入れるのがいいと思いますが、サーバ上には平文保存するようなちょっとしたものにはオーバースペック、というか面倒ですよね。

というわけで、ぱっと見でわからなくなる程度のライトなやつ。
ちなみに 英数字(小文字のみ) しか使えません!!

やりかた

パスワード文字列の難読化

シェルで難読化文字列を得ます。

get_encode_password
$ irb
irb(main):001:0> "password".to_i 36
=> 1982613533017

難読化したパスワードをattributeにセット

knife node edit等でパスワードをattributeに入れます。

knife_node_edit
{
  "name": "testserver01",
  "chef_environment": "_default",
  "normal": {
  ¦ "tags": [

  ¦ ],
  ¦ "yurui": {
  ¦ ¦ "password": 1982613533017
  ¦ } 
  },  
  "run_list": [
  ¦ "recipe[yurui::password]"
  ]
}

使うときに復号化

テンプレートファイルなどで以下のようにして復号化

sample_template
password=<%= node[:yurui][:password].to_s 36 %>

これだけでなんと不思議、元のパスワードが復号化されます。
attributeに難読化状態で入れておけば、cookbookやnodeのjsonファイルなどをgitに入れる段で難読化されるので、恥ずかしいパスワード文字列がぱっと見ではわからなくなります。

あとがき

data bags使うのめんどいなーと思いながらぐぐっていたときに発見したブログが元ネタです。

大文字が混ざっちゃってる場合は、一番楽なのはBase64とかでしょうか。

base64_sample
irb(main):001:0> require 'base64'
=> true
irb(main):002:0> encoded_pass = Base64.encode64('P@ssw0rd')
=> "UEBzc3cwcmQ=\n"
irb(main):003:0> decoded_pass = Base64.decode64('UEBzc3cwcmQ=\n')
=> "P@ssw0rd"

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7