パスワードでプログラムの実行を保護したい。
Bashでそれを行うにはどうすればよいですか?
stty_orig=$(stty -g) # save original terminal setting.
stty -echo # turn-off echoing.
IFS= read -r passwd # read the password
stty "$stty_orig" # restore terminal setting.
このコマンドは、stdinからvar pwdを読み取ります(エコーは無効になっています)。
IFS= read -s -p Password: pwd
IFSの設定を解除すると、パスワードの先頭と末尾の空白が許可されます(一部の環境ではサポートされている可能性があるため、スクリプトによるユーザー資格情報の入力時にサポートするのが最善です)。
先頭/末尾の空白が適切に処理されていることを検証するには、次を使用できます。
echo -n "$pwd" | hexdump -C
注:コンソールにダンプするため、実際のパスワードでは使用しないでください!
HT:IFSの設定解除に関するこの追加情報については、Ron DuPlain氏。
プログラムにパラメーターとして提供するためにパスワードを取得する必要がある場合は、エコーをオフにするだけのユニコーンアドバイスが適しています。
スクリプトでpasswdチェックを実行しても機能しません-ユーザーがbashスクリプトを実行できる場合、ユーザーはそれを読み取り、passwdを表示する権限も持っています。
Passwdを持つユーザーのみにプログラムの実行を許可する場合、安全な方法は、プログラムを所有する新しいユーザーアカウントを作成し、「Sudo」を使用してそのユーザーとしてプログラムを実行するスクリプトを作成することです。ユーザーは安全な方法でpasswdを使用します。