Sudoのようなスクリプトのパスワードを覚えておいてください

Sudoのようなスクリプトのパスワードを覚えておいてください

Webサービスに認証するためにパスワードが必要なスクリプトがあります。事前定義されたユーザーの単一のパスワードで十分であり、可能であればパスワードを安全に保存する必要があります(通常のテキストではありません)。

当然、セキュリティ上の理由から、スクリプトにパスワードをプレーンテキストで書きたくないので、スクリプトでパスワードを尋ねるのに毎回入力するのが面倒です。

それでは、スクリプトを実行するたびにパスワードを入力する必要がないようにするにはどうすればよいですか(例:)sudo

この場合、スクリプトはPythonになっていますが、PHPやRubyなどの他の言語で再利用できるように、Bashで汎用ソリューションとして実装する方が良いと思いました。

擬似コード:

#!/bin/bash
pw = cache.load() or {
  pw = ask_user()
  cache.save(pw, 15min)
}
myscript.py pw

答え1

自分のパスワードストアを再発明しないでください。あなたが持っているものを使用してください。 Linuxの世界は主に次の点に焦点を当てています。GNOMEキーチェーン海馬キーリングをナビゲートして変更し、マスターパスワードを設定するための便利なGUIが提供されています。キーリングは、以下を使用してコマンドラインで照会できます。secret-tool便利です。

secret-tool store --label='Foobar webservice' service foobar account bob
pw=$(secret-tool lookup service foobar account bob)

リポジトリのパスワードは自動的に期限切れになりませんが、リポジトリへのアクセスは期限切れになります。

答え2

私も同様の状況で、gpg公開/秘密鍵暗号化を使用(乱用?)します。良い点は、ほとんどのシステムで特定のキーに対してアクセス制限が設定されていることです。パスワードは5〜10分間保持されるため、パスワードを1回だけ入力しても使用でき、次の間に有効期限が切れます。次のような非使用sudo

結果を (subprocess.check_output())に簡単に入れることができますbashPython暗号化、つまり保存の場合、アクセス制限パスワードに新しいパスワードを提供する必要もありません。

私は通常、そのペアへのアクセスを維持したくないので、一般的な公開/秘密鍵ペアを使用しません。後でわかったpassほぼ同じように動作し、複数のパスワードファイルを管理し、このプログラムが使用する同じ原則に基づいて、私が使用するPythonプログラムを設定します。

答え3

ここにあります:

#!/bin/bash

newTS=`date +%s`

if test -r ~/.password
then
        . ~/.password
else
        TS=0
fi

if test `expr $newTS - $TS` -gt 900
then
        # outdated password record
        rm -f ~/.password

        printf "Please enter your password: "
        read password

        printf "export TS=$newTS\nexport password=$password\n" > ~/.password
fi


echo "using password: $password"

~/.password注:名前を変更しないと、古いコードはファイルを上書きします。

関連情報