4

スクリプトにパスワードの入力を求めますが、1回に1回だけ入力します。セッション(30分としましょう)。スクリプトの実行間でユーザーのログイン資格情報を安全に保存することは可能ですか?これはbashスクリプトである必要があります。これは、何もインストールする権限がないいくつかの異なるタイプのUNIXで実行する必要があるためです。

ログインクレデンシャルを書き込むテキストファイルを暗号化することを考えていましたが、そのファイルのパスワードはどこに保存しますか?問題を再現したようです。

私は、暗号化されたスクリプトを実行するユーティリティについて知っていますが、後でデバッグする必要があるかもしれないスクリプト内にマスターパスワードを保持するという考えが好きではないため、それらを使用することには非常に反対です。

編集:これはサーバーログオンスクリプトではありませんが、私が制御できないWebサーバーで認証します。

編集2:編集されたセッション期間

4

3 に答える 3

2

スクリプトの「複数の呼び出し」が実行していることに応じて、サーバーとクライアントの2つのスクリプトを使用し、名前付きパイプを使用して通信することでこれを実行できます。警告:これは移植できない可能性があります。

スクリプト1「サーバー」:

#!/bin/bash

trigger_file=/tmp/trigger
read -s -p "Enter password: "  password
echo 
echo "Starting service"
mknod $trigger_file p
cmd=
while [ "$cmd" != "exit" ]; do
    read cmd < $trigger_file
    echo "received command: $cmd"
    curl -u username:$password http://www.example.com/ 
done
rm $trigger_file

スクリプト2「クライアント」:

#!/bin/bash

trigger_file=/tmp/trigger
cmd=$1
echo "sending command: $cmd"
echo $cmd > $trigger_file

ランニング:

$ ./server
Enter password: .....
Starting service
received command: go

他のウィンドウ:

$ ./client go
sending command: go

編集:

これは、統合された自動起動サーバー/クライアントバージョンです。

#!/bin/bash

trigger_file=/tmp/trigger
cmd=$1

if [ -z "$cmd" ]; then
   echo "usage: $0 cmd"
   exit 1
fi

if [ "$cmd" = "server" ]; then
    read -s password
    echo "Starting service"
    mknod $trigger_file p
    cmd=
    while [ "$cmd" != "exit" ]; do
        read cmd < $trigger_file
        echo "($$) received command $cmd (pass: $password)"
        curl -u username:$password http://www.example.com/ 
    done
    echo exiting
    rm $trigger_file
    exit
elif [ ! -e $trigger_file ]; then
    read -s -p "Enter password: " password
    echo 
    echo $password | $0 server &
    while [ ! -e $trigger_file ]; do
      sleep 1
    done
fi

echo "sending command: $cmd"
echo $cmd > $trigger_file
于 2012-09-11T19:44:00.053 に答える
1

アクセス可能な場所にパスワードを保存すると、問題が再現されるのは正しいことです。また、プログラムを実行するたびにではなく、1日に1回クレデンシャルを要求することは、システムのセキュリティの観点から、認証システムをまったく持たないことと本質的に同じです。簡単に読み取れる場所(プレーンテキストまたはプレーンテキストキーで暗号化されているかどうか)にパスワードを設定すると、適切なシステム知識/スキャンツールを持っている人にパスワードを設定することで得られるセキュリティが失われます。

この問題(およびより安全なメカニズムの1つ)を解決する従来の方法は、パスワードの代わりにSSHキーを使用することです。ユーザーがキーを取得したら、手動で認証を再入力する必要はありません。さらにセキュリティを強化するために、スクリプト/実行可能ファイルに対する実行権限のみを持つユーザーとしてSSHキーログインを行うことができます。したがって、スクリプトの動作を変更したり、ファイルを読み取って複製したりすることはできません。そうすれば、ファイルの実際の所有者は、他のユーザーを制限付き使用モードに保ちながら、認証を必要とせずにスクリプトを簡単に編集/実行できます。

于 2012-09-11T16:54:27.030 に答える
0

通常、パスワードは(セキュリティ上の理由で)保存されず、むしろパスワードhashが保存されます。ユーザーがパスワードを入力するたびに、認証のためにハッシュが比較されます。ただし、要件は「パスワードの記憶」機能のようなものです(WebブラウザーやWindowsアプリなど)。この場合、パスワードをフラットファイルに保存してgpgから、ファイルの暗号化などを使用する方法は他にありませんが、最終的keyには暗号化用のを使用することになります。

ユーザーに1日に1回クレデンシャルを要求するという全体的な設計は、クレデンシャルを要求しないのと同じくらい優れています。厳重に保護されたシステムでは、特にバックエンドサーバーの操作が非アクティブであるためにユーザーをログオフするために、適切なタイムアウトを設定する必要があります。

于 2012-09-11T18:20:05.957 に答える