İşlem argümanları tüm kullanıcılar tarafından görülebilir, ancak ortam yalnızca aynı kullanıcı tarafından görülebilir ( en azından Linux'ta ve her modern unix varyantında düşünüyorum). Böylece bir ortam değişkeninden şifre geçmek güvenlidir. Birisi ortam değişkenlerinizi okuyabilirse, işlemleri sizin gibi yürütebilir, bu yüzden zaten oyun biter.
Çevrenin içeriği dolaylı olarak sızıntı riskiyle karşı karşıyadır; örneğin, bir şeyi ps
araştırmaya çalışırsanız ve gizli bir ortamdaki gizli ortam değişkenleri de dahil olmak üzere sonucu yanlışlıkla kopyalayıp yapıştırırsanız. Başka bir risk, ortam değişkenini, ona ihtiyaç duymayan bir programa (parolaya ihtiyaç duyan sürecin çocukları dahil) geçirmeniz ve bu programın ortam değişkenlerini gizli olmalarını beklemediği için ortaya çıkarmasıdır. Bu ikincil sızıntı riskinin ne kadar kötü olduğu, parola ile yapılan işlemin ne yaptığına bağlıdır (ne kadar süre çalışır? Alt işlemleri çalıştırıyor mu?).
Parolanın, boru gibi gizlice gizlenecek şekilde tasarlanmamış bir kanaldan geçerek yanlışlıkla sızmamasını sağlamak daha kolaydır. Gönderen tarafta bunu yapmak oldukça kolaydır. Örneğin, bir kabuk değişkeninde parolanız varsa,
echo "$password" | theprogram
eğer theprogram
standart girişinde şifre bekleniyorsa. Bunun bir güvenli olduğu echo
için güvenli olduğunu unutmayın ; argüman ps
çıktıda açıklanacağı için harici bir komutla güvenli olmazdı . Aynı etkiyi elde etmenin başka bir yolu da buradaki bir belgedir:
theprogram <<EOF
$password
EOF
Şifre gerektiren bazı programlara şifreyi belirli bir dosya tanımlayıcıdan okuması söylenebilir. Başka bir şey için standart girdiye ihtiyacınız varsa, standart girdi dışında bir dosya tanımlayıcı kullanabilirsiniz. Örneğin gpg
:
get-encrypted-data | gpg --passphrase-fd 3 --decrypt … 3<<EOP >decrypted-data
$password
EOP
Programın bir dosya tanımlayıcısından okuması söylenemez, ancak bir dosyadan okuması söylenebilirse, / dev / fd / 3 gibi bir dosya adı kullanarak bir dosya tanımlayıcısından okumasını söyleyebilirsiniz.
theprogram --password-from-file=/dev/fd/3 3<<EOF
$password
EOF
Ksh, bash veya zsh olarak, bunu işlem ikamesi yoluyla daha kısaca yapabilirsiniz.
theprogram --password-from-file=<(echo "$password")