Argumen proses terlihat oleh semua pengguna, tetapi lingkungan hanya dapat dilihat oleh pengguna yang sama ( setidaknya di Linux , dan saya pikir pada setiap varian unix modern). Jadi mengirimkan kata sandi melalui variabel lingkungan adalah aman. Jika seseorang dapat membaca variabel lingkungan Anda, mereka dapat menjalankan proses seperti Anda, jadi itu sudah berakhir.
Konten lingkungan berisiko berisiko bocor secara tidak langsung, misalnya jika Anda menjalankan ps
untuk menyelidiki sesuatu dan secara tidak sengaja menyalin-menempelkan hasilnya termasuk variabel lingkungan rahasia di tempat umum. Risiko lain adalah bahwa Anda meneruskan variabel lingkungan ke program yang tidak memerlukannya (termasuk anak-anak dari proses yang membutuhkan kata sandi) dan program itu memaparkan variabel lingkungannya karena tidak mengharapkannya dirahasiakan. Seberapa buruk risiko kebocoran sekunder ini tergantung pada apa proses dengan kata sandi itu (berapa lama itu berjalan? Apakah itu menjalankan subproses?).
Lebih mudah untuk memastikan bahwa kata sandi tidak akan bocor secara tidak sengaja dengan melewatkannya melalui saluran yang tidak dirancang untuk dikuping, seperti pipa. Ini cukup mudah dilakukan di sisi pengirim. Misalnya, jika Anda memiliki kata sandi dalam variabel shell, Anda bisa melakukannya
echo "$password" | theprogram
jika theprogram
mengharapkan kata sandi pada input standarnya. Perhatikan bahwa ini aman karena echo
merupakan builtin; itu tidak akan aman dengan perintah eksternal karena argumen akan diekspos dalam ps
output. Cara lain untuk mencapai efek yang sama adalah dengan dokumen di sini:
theprogram <<EOF
$password
EOF
Beberapa program yang memerlukan kata sandi dapat diperintahkan untuk membacanya dari deskriptor file tertentu. Anda dapat menggunakan deskriptor file selain dari input standar jika Anda membutuhkan input standar untuk hal lain. Misalnya dengan gpg
:
get-encrypted-data | gpg --passphrase-fd 3 --decrypt … 3<<EOP >decrypted-data
$password
EOP
Jika program tidak bisa disuruh membaca dari deskriptor file tetapi bisa disuruh baca dari file, Anda bisa menyuruhnya membaca dari deskriptor file dengan menggunakan nama file seperti `/ dev / fd / 3.
theprogram --password-from-file=/dev/fd/3 3<<EOF
$password
EOF
Di ksh, bash atau zsh, Anda bisa melakukan ini dengan lebih ringkas melalui proses substitusi.
theprogram --password-from-file=<(echo "$password")