猫を通してカールにパスワードを渡すのはどれほど安全ではありませんか?

猫を通してカールにパスワードを渡すのはどれほど安全ではありませんか?

curl何度も実行されるスクリプトがあります。

パスワードは一度だけ入力したいと思います(それで実行するたびにカールがパスワードを要求したくありません)。プロセスリストやファイル記述子などにパスワードを表示したくありません。

#!/bin/bash

read -p "Enter pw:" -s pw

provide_pw() {
    cat << END
"$pw"
END
}

for i in {1..10}; do
    curl -u $(logname):$(provide_pw) "$url"
done

この方法は安全ですか?これにより、他のユーザーが自分のパスワードを知ることができますか?

答え1

$(provide_pw)read、cat、およびheredocsに関連するすべての操作の場合、最終コマンドの置き換えは実際のパスワードに置き換えられます。その後、プロセスの詳細の一部になります。

~からman curl、について-u

動作するシステムでは、カールはプロセスのリストから与えられたオプション引数を隠します。

したがって、これらのシステムと適切に設定されたLinuxシステムではパスワードが他のユーザーに隠されますが、他の場所では、などを使用してhidepidカールプロセスのコマンドラインを見ると誰でもパスワードを見ることができます。pstop

readパスワードが必要な場合は、curl次の手順を実行してください。

ユーザー名のみを指定すると、カールはパスワードの入力を求められます。

また見なさい:カールは、パスワードがps出力に表示されないようにどのように保護しますか?これには競争条件があります。カールを開始してコマンドラインをクリーンアップする間にパスワードが表示され、他の方法(Linuxなど)で非表示にしないと、そのウィンドウのすべてのhidepid人に表示されます。

答え2

コマンドライン引数にパスワードを入力するのはcurl非常に一般的です。パスワードを使用する最も安全な方法ではないかもしれませんが、完璧なものはなく、ほとんどの場合、選択肢はあまりありません。

しかし、パスワードを取得する能力はまったく必要ありません。簡単にこれを行うことができます:

read -rsp "Enter pw: " pw
curl -u "$(logname)":"$pw" "$url"

注:バックスラッシュエスケープ文字を文字通り読み取ることができるように、コマンド-rにパラメータを追加しました。これは間違いなくパスワードでできることです。read

関連情報