web-dev-qa-db-ja.com

シェルスクリプトAIXで暗号化されたパスワードを使用する方法

データベースに接続していくつかの操作を実行するシェルスクリプトを作成しました

これは私のサンプルコードです

#!/usr/bin/ksh
. /home/ram/.profile

sqlplus username/pwd@TNS<<EOF
select sysdate from dual;
exit;
EOF

このコードをAIX systemで使用しています。pwdを暗号化します。

シェルにコマンドはありますか、cryptコマンドにセキュリティ上の問題があると聞きました

crypt(1)暗号化を解くプログラムは広く利用可能です。 Bob BaldwinのCrypt Breaker's Workbench [2]は、1984〜1985年に作成され、ユーザーが修正しなければならない一連の平文推測を提供するインタラクティブツールです。 Peter Selingerのunixcrypt-breaker [3]は、単純な統計モデルを使用してもっともらしい平文を推測し、ユーザーの操作を必要としません。(source -wikipedia)。

AIXでcryptコマンドを試しましたが、エラーがスローされます

[Shell-ksh]$uname    
AIX
[Shell-ksh]$crypt
ksh: crypt: command not found
[Shell-ksh]$echo $Shell
/usr/bin/ksh

シェルでパスワードを暗号化する安全な方法について知りたいのですが?

3
Jeyanthinath

シェルスクリプトでパスワードをハードコーディングする代わりに、Oracle password repositoryを使用してシェルスクリプトでパスワードを使用できます。

このツールは、単純なファイルを使用して、暗号化されたパスワードを格納します。このファイルを保護して、他のユーザーがアクセスできないようにすることができます。ツールは here にあります。このツールのインストール手順は here で確認できます。

1
Ramesh

userpassuser.txtpass.txtに保存されていると仮定します

暗号化:

$ openssl aes-256-cbc -salt -in user.txt -out user.txt.enc -pass file:pass.txt

で復号化:

$ openssl aes-256-cbc -d -salt -in user.txt.enc -out user.txt.dec -pass file:pass.txt

より安全な暗号化を実現するために、-S "your complex string"で独自の複雑なソルトを使用してみることができます。ただし、ほとんどの場合、これで十分です。

1
user55518

SSHトンネル の使用を見てください。ローカルポートでリッスンするようにデータベースを設定し、ユーザーがそのポートでパスワードなしで接続できるようにし(特定のインターフェイスで127.0.0.1以外のすべての接続を拒否)、SSHを使用してそのポートへのトンネルをネゴシエートできます。次に、証明書認証を使用してSSHに接続します。これは、なりすましが難しく、ハードコードされたパスワードもありません。このスクリプトがcronジョブで動作する必要がある場合、nologinシェルで実行されるサービスアカウントとして実行できます。

その時点で心配しているのはSSHキー管理であり、 this を支援するためのツールがたくさんあります。ローカルで秘密鍵を取得できるのはrootアクセス権を持つユーザーのみであり、その場合、暗号化されたパスワードストアも安全ではありません。

もう1つの利点は、スクリプトをリモートバージョン管理下に置くことができ、認証は実装の詳細に任され、コードが実装されているマシンを超えてコードがリークした場合にスクリプトから抽出できるものではないことです。

いくつかのデータベースはすでに証明書認証(たとえば、Postgresql)をサポートしていますが、SSHトンネルを使用すると、コマンドラインクライアントを持つすべてのデータベースで機能します。私はこれをMySQLとPostgresqlのスクリプトバックアップに使用しましたが、これは魅力のように機能します。

0
sean_m