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
カールプロセスのコマンドラインを見ると誰でもパスワードを見ることができます。ps
top
read
パスワードが必要な場合は、curl
次の手順を実行してください。
ユーザー名のみを指定すると、カールはパスワードの入力を求められます。
また見なさい:カールは、パスワードがps出力に表示されないようにどのように保護しますか?これには競争条件があります。カールを開始してコマンドラインをクリーンアップする間にパスワードが表示され、他の方法(Linuxなど)で非表示にしないと、そのウィンドウのすべてのhidepid
人に表示されます。
答え2
コマンドライン引数にパスワードを入力するのはcurl
非常に一般的です。パスワードを使用する最も安全な方法ではないかもしれませんが、完璧なものはなく、ほとんどの場合、選択肢はあまりありません。
しかし、パスワードを取得する能力はまったく必要ありません。簡単にこれを行うことができます:
read -rsp "Enter pw: " pw
curl -u "$(logname)":"$pw" "$url"
注:バックスラッシュエスケープ文字を文字通り読み取ることができるように、コマンド-r
にパラメータを追加しました。これは間違いなくパスワードでできることです。read