प्रक्रिया तर्क सभी उपयोगकर्ताओं के लिए दिखाई देते हैं, लेकिन पर्यावरण केवल एक ही उपयोगकर्ता ( कम से कम लिनक्स पर , और मैं हर आधुनिक यूनिक्स संस्करण पर सोचता हूं) के लिए दिखाई देता हूं। इसलिए एक पर्यावरण चर के माध्यम से पासवर्ड पास करना सुरक्षित है। यदि कोई आपके पर्यावरण चर को पढ़ सकता है, तो वे आपके रूप में प्रक्रियाओं को निष्पादित कर सकते हैं, इसलिए यह पहले से ही गेम है।
पर्यावरण की सामग्री अप्रत्यक्ष रूप से लीक होने के कुछ जोखिम पर है, उदाहरण के लिए यदि आप ps
किसी चीज़ की जांच करने के लिए दौड़ते हैं और गलती से किसी सार्वजनिक स्थान पर गोपनीय वातावरण चर सहित परिणाम को कॉपी-पेस्ट करते हैं। एक और जोखिम यह है कि आप पर्यावरण चर को एक ऐसे प्रोग्राम में पास करते हैं, जिसमें इसकी आवश्यकता नहीं होती है (इस प्रक्रिया के बच्चों के लिए जिसमें पासवर्ड की आवश्यकता होती है) और यह प्रोग्राम इसके पर्यावरण चर को उजागर करता है क्योंकि इससे उन्हें गोपनीय होने की उम्मीद नहीं थी। माध्यमिक रिसाव के ये जोखिम कितने बुरे हैं, यह इस बात पर निर्भर करता है कि पासवर्ड के साथ प्रक्रिया क्या करती है (यह कितने समय तक चलती है? क्या यह एंटीप्रोसेस चलाती है?)।
यह सुनिश्चित करना आसान है कि पासवर्ड गलती से किसी ऐसे चैनल से गुजर कर लीक न हो जाए, जिसे पाइप के रूप में ई-मेल करने के लिए डिज़ाइन नहीं किया गया है। यह भेजने के पक्ष में करना बहुत आसान है। उदाहरण के लिए, यदि आपके पास शेल चर में पासवर्ड है, तो आप बस कर सकते हैं
echo "$password" | theprogram
अगर theprogram
इसके मानक इनपुट पर पासवर्ड की उम्मीद है। ध्यान दें कि यह सुरक्षित है क्योंकि echo
एक बिलिन है; यह एक बाहरी आदेश के साथ सुरक्षित नहीं होगा क्योंकि ps
आउटपुट में तर्क उजागर किया जाएगा । उसी प्रभाव को प्राप्त करने का एक और तरीका यहां एक दस्तावेज के साथ है:
theprogram <<EOF
$password
EOF
कुछ प्रोग्राम जिन्हें पासवर्ड की आवश्यकता होती है, उन्हें एक विशिष्ट फ़ाइल डिस्क्रिप्टर से पढ़ने के लिए कहा जा सकता है। यदि आपको किसी और चीज़ के लिए मानक इनपुट की आवश्यकता है, तो आप मानक इनपुट के अलावा फ़ाइल डिस्क्रिप्टर का उपयोग कर सकते हैं। उदाहरण के लिए, साथ gpg
:
get-encrypted-data | gpg --passphrase-fd 3 --decrypt … 3<<EOP >decrypted-data
$password
EOP
यदि प्रोग्राम को फ़ाइल डिस्क्रिप्टर से पढ़ने के लिए नहीं कहा जा सकता है, लेकिन किसी फ़ाइल से पढ़ने के लिए कहा जा सकता है, तो आप इसे एक फ़ाइल डिस्क्रिप्टर से पढ़ने के लिए कह सकते हैं जैसे `/ dev / fd / 3।
theprogram --password-from-file=/dev/fd/3 3<<EOF
$password
EOF
Ksh, bash या zsh में, आप इसे प्रक्रिया प्रतिस्थापन के माध्यम से और अधिक संक्षेप में कर सकते हैं।
theprogram --password-from-file=<(echo "$password")