Posted at

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

More than 5 years have passed since last update.

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使うのめんどいなーと思いながらぐぐっていたときに発見したブログが元ネタです。

http://d.hatena.ne.jp/ku-ma-me/20091215/p1

大文字が混ざっちゃってる場合は、一番楽なのは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"