ToC
最近、レンタルサーバーの移行をしました。
ながらく放置されているコンテンツをあらためて整理しなおし、ついでに小さな見直しもしてみました。
そのなかの1つの改善で、シェルスクリプトの平文パスワードの難読化もやってみました。
おはずかしながら…
あるシェルスクリプト処理でサービス接続用にパスワードが必要なのですが、パスワードが平文で むき出しな状態になっていました。
いろいろな理由があってのことだと思いますが、ありがちなパターン。こんな感じですね。
#!/bin/bash
USER_NAME="my_user_name"
PASSWORD="this_is_plain_text_password_1234"
これは、あまりにも脆弱すぎるのでセキュアにしておきたい。
いろいろな前提が必要となる仕組みだと、レンタルサーバーの範疇でできなかったり、
大事な情報とは言ってもそこそこなので、簡単な改善でできることは何かと考えて
openssl
を使った難読化を考えました。
秘密鍵を作成
秘密鍵はopensslのコマンドで作成が可能です。
鍵長を引数として指定するのですが、1024と書いてあるサイトが結構たくさんあります。 あまり今回の目的では、大きな違いはないと思いますが、世の中のオススメに従い2048ビット以上に しました。詳細は、従来の暗号技術の危険性の サイトが、詳しいです。
$ openssl genrsa 3072 > private-key.pem
Generating RSA private key, 3072 bit long modulus
............++
..........................................................................++
e is 65537 (0x10001)
ちゃんと3072ビットの鍵長の秘密鍵ができているようです。
$ openssl rsa -text < private-key.pem
Private-Key: (3072 bit)
modulus:
00:ca:a6:72:c4:b9:85:97:d3:61:ec:3b:bc:74:6f:
d6:40:08:6c:9a:30:b8:5a:30:23:d1:13:e5:7d:7a:
-続く-
作成した秘密鍵を使って、平文を難読化
早速、難読化をしてみましょう。
openssl
コマンドで、難読化パスワードファイル(pass.rsa
)を作成します。
$ echo 'this_is_plain_text_password_1234' | openssl rsautl -encrypt -inkey private-key.pem > pass.rsa
ちなみに復号は下記のコマンドで可能です。 確かに復号できていますね。
$ openssl rsautl -decrypt -inkey private-key.pem -in pass.rsa
this_is_plain_text_password_1234
ちなみにですが、異なる秘密鍵で暗号化した難読化パスワードファイル(pass2.rsa
)を
複合しようとすると、エラーになります。大丈夫そうですね。
$ openssl rsautl -decrypt -inkey private-key.pem -in pass2.rsa
RSA operation error
34381005096:error:0407109F:rsa routines:RSA_padding_check_PKCS1_type_2:pkcs decoding error:rsa_pk1.c:273:
34381005096:error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed:rsa_eay.c:602:
最後にシェルスクリプトに組み込み
これで、シェルスクリプトに組み込みができました。
ファイルの配置は多少考えたほうが良いかもしれませんが、平文でパスワードをシェルの中に 記載するよりは、セキュアになったのではないでしょうか。
#!/bin/bash
USER_NAME="my_user_name"
PASSWORD=$(openssl rsautl -decrypt -inkey private-key.pem -in pass.rsa)
参照
[amazon_link asins=‘4797382228,B06XJ88H1G,4798148814,4274065731,4908686009’ template=‘ProductCarousel’ store=‘lunalab-22’ marketplace=‘JP’ link_id=‘6ed9f1a1-9c21-11e7-b073-e76e7734fb4d’]