2012-01-18 17 views
0

パスワードを使用してシステムにログインするスクリプトがあります。これらのパスワードはiniファイルに保存され、スクリプト(Perl)によって消費されます。パスワードの暗号化とパスワードの保存 - Perl

私は暗号化されたパスワードを保存して(今はどちらのパッケージを使用するかわからない)、同じコードをPerlコードで解読することを考えていました。

しかし、論理的には、暗号化されたパスワードと解読ロジックをコードに格納するのは意味がありません。

これらのファイルはソース管理されており、ほとんどのユーザーがアクセスできます。

何が良い方法かもしれないと思います。

私はPerlを使用して、私が使用することができますどのモジュールに関するいかなる提案は

カルティク

おかげ

P.S. :-)歓迎される

Perlファイルは、サーバーで実行されるスケジュールされたスクリプトであり、ソース管理ツールに格納されています。ユーザーは、これらのスクリプトとのやりとりがありませんが、誰かがソルスコントロールにアクセスしたときに表示されます。

+0

iniファイルを読み込んだらプレーンテキストのパスワードが必要かどうかは疑問ではありません。パスワードが必要な場合は、暗号化の理由はそれほどありません。あなたのプログラムは何らかの形でそれらを解読する必要があり、人々はおそらくコードにアクセスできるので、必要であれば人々はパスワードを解読することができます。あなたの質問を明確にする。 – ruz

答えて

2

私はパスワードを解読してはいけないと思います。あなたはパスワードのmd5の合計を保存する必要があります。ユーザーがログインしたいときは、パスワードとして入力したmd5の合計を計算し、ファイル内の値と比較します。

もちろん、md5以外の方法もありますが、これはほんの一例です。 SHAまたは他の一方向ハッシュ方法を使用できます。

この方法を使用すると、忘れたパスワードを復元できなくなります。忘れたパスワードを置き換えるには、新しいパスワードを生成する必要があります。

私はPerlを知らないが、md5またはSHA1の実装が利用可能であると確信している。

+0

これは実際にはPerlでスケジュールされたスクリプトで、ユーザーの操作はありません。 – KK99

+2

@KarthikKrishnan:違いはありません。 Maciekの説明された戦略はまだ有効です。とにかく暗号化されたパスワードを解読する必要はありません。あなたがそうした場合、最初にそれらを暗号化するのはどうしてですか? – flesk

+1

PerlはC関数 'crypt'を組み込みとして実装しており、' Digest :: MD5'と 'Digest :: SHA'はコアモジュールです。 – flesk

4

これは実際、Perlとはほとんど関係がありません。シェルとファイルシステムで動作します。

リモートサービスにアクセスするためにパスワードが必要な場合は、それを保存する必要があります。暗号化されたものであろうとなかろうと、それらはおそらくディスク上のどこかに置かれなければなりません。特に、ユーザーセッション(例えば、GNOME)から実行されないときはそうです。

パブリックVCSにパスワードを保存することは非常に悪い考えです。 VCSディレクトリの外では、コードを保存し、パスワードを別のファイルに保存する必要があります。たとえば、/opt/some-project/scriptsにレポのコピーがある場合は、パスワードファイルの横に/opt/some-project/passwdと入力します。

最も重要な問題は、passwdファイルのファイルアクセス許可です。所有者だけがアクセスできるようにしてください。ルートは最高です。その後

、ルートのcrontabに、このようなスクリプトを実行します。

<user>はユーザー(rootではない!)あなたのようにスクリプトを実行したい、とスクリプトは標準として、パスワードファイルを受信して​​いる
cat /opt/some-project/passwd | sudo -U <user> perl /opt/some-project/run-with-passwd-on-stdin 

入力。

このようにして、ファイルのアクセス許可が正しく、rootアカウントが侵害されていない限り、パスワードファイルは保護されます。

関連する問題