मैं bash
में उपयोगिता का संग्रह लिख रहा हूं जिसमें एक सामान्य पुस्तकालय है। मेरे द्वारा लिखे गए प्रत्येक स्क्रिप्ट में कोड का एक ब्लॉक होना चाहिए जो निष्पादन योग्य से संबंधित लाइब्रेरी का पथ निर्धारित करता है। नहीं वास्तविक कोड है, लेकिन एक उदाहरण:क्या मैं अपने पर्यावरण चर पर भरोसा कर सकता हूं?
#!/bin/bash
DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. $DIR/../lib/utilities/functions
एक प्रस्तावना है कि पुस्तकालय के लिए खोज करने की कोशिश करता है के बजाय
, मैं उज्जवल विचार पुस्तकालयों स्थान इंगित करने के लिए एक वातावरण चर का उपयोग करने के लिए किया था।
#!/bin/bash
. $TOOLS_LIBRARY_PATH
मैं उस पर्यावरण चर सेट करने के लिए एक रैपर प्रोग्राम का उपयोग कर सकता हूं, या मैं इसे अपने पथ में सेट कर सकता हूं। bash
टूलसेट को व्यवस्थित करने के बेहतर तरीके हो सकते हैं, लेकिन सवाल यह है:
क्या मैं अपने पर्यावरण चर पर भरोसा कर सकता हूं?
यह उन लोगों में से एक है, मैंने कभी-कभी-कभी-कभी-कभी-इस तरह के प्रश्नों के बारे में सोचा नहीं है। अन्य भाषाओं में प्रोग्रामिंग करते समय, पुस्तकालयों को खोजने के लिए पथ का उपयोग किया जाता है, (उदाहरण के लिए LD_LIBRARY_PATH
, PYTHONPATH
, PERLLIB
, RUBYLIB
, CLASSPATH
, NODE_PATH
), लेकिन मुझे कभी भी रोकना नहीं था और यह कैसे असुरक्षित हो सकता था इसके बारे में सोचना पड़ा।
वास्तव में, LD_LIBRARY_PATH
में Why LD_LIBRARY_PATH
is bad है जिसका उपयोग इसके उपयोग को हतोत्साहित करने के लिए किया गया है। रूबी और पर्ल लाइब्रेरी पथ पर्यावरण चर को अनदेखा किया जाता है यदि उनके सुरक्षा तंत्र का उपयोग किया जाता है, $SAFE
और -T
(taint mode) क्रमशः।
मेरे विचार अब तक ...
- उपयोगकर्ता अपनी पसंद के एक पुस्तकालय के लिए
TOOLS_PATH_LIBRARY
सेट कर सकते हैं, लेकिन उपयोगिता उनके यूआईडी के तहत चलाया जाएगा। वे आसानी सेbash
के साथ अपनी दुर्भावनापूर्ण लाइब्रेरी चला सकते थे। - मेरे उपकरण
sudo
कुछ चीजें। कोई भी इसकाTOOLS_PATH_LIBRARY
सेट कर सकता है जो इसका लाभ उठाता है। लेकिन, उपकरणsudo
के माध्यम से नहीं चलाए जाते हैं, वे केवलsudo
को यहां और वहां आमंत्रित करते हैं। किसी भी मामले में उपयोगकर्ता कोsudoer
होना होगा, वे सीधेsudo
पर कॉल कर सकते हैं। - यदि मैं
TOOLS_PATH_LIBRARY
पर भरोसा नहीं कर सकता, तो मैंPATH
पर भरोसा नहीं कर सकता। सभी प्रोग्राम आमंत्रणों को पूर्ण पथ का उपयोग करना चाहिए। - मैंने शैल प्रोग्राम को पूर्ण प्रोग्राम के लिए उपनाम का उपयोग किया है, ताकि
ls
पर कॉल करने के बजाय,LS=/bin/ls
जैसे चर का उपयोग करें। जो मैंने पढ़ा है, उससे यह उपयोगकर्ताओं के खिलाफ एलियास के रूप में प्रोग्राम डिफ़ॉल्ट को फिर से परिभाषित करने के खिलाफ है। देखें: PATH, functions and security. Bash scripting best practices. । - पर्ल का taint mode सभी पर्यावरण चरों को "दांतेदार" के रूप में मानता है, जो फोरबोडिंग है, यही कारण है कि मैं पर्यावरण के जोखिमों के बारे में तर्क करने की कोशिश कर रहा हूं।
- एक उपयोगकर्ता के लिए किसी और के पर्यावरण को बदलने के लिए यह संभव नहीं है, जब तक वह उपयोगकर्ता रूट न हो। इस प्रकार, मैं केवल विशेषाधिकारों को बढ़ाने के लिए अपने पर्यावरण को बदलने वाले उपयोगकर्ता के बारे में चिंतित हूं। देखें: Is there a way to change another process's environment variables?
मैं rubber ducked इस तरह की है एक जवाब में, लेकिन मैं अभी भी है क्योंकि यह एक पैट जवाब नहीं है, यह पोस्ट करने के लिए, जा रहा हूँ।
अद्यतन: पुस्तकालयों और निष्पादन योग्य पथों को निर्दिष्ट करने के लिए पर्यावरण चर के उपयोग के आसपास सुरक्षा समस्याएं क्या हैं?
बेशक आप नहीं कर सकते हैं। आप कभी भी कुछ भी भरोसा नहीं कर सकते। लेकिन अगर आपको लगता है कि यह सही नहीं है, तो आप कहाँ हैं? आप कुछ भी नहीं कर सकते –
यदि आप इसे अतिरिक्त चर के बिना सभी निर्देशिकाओं को हल कर सकते हैं, तो इसे अपने प्रत्यक्ष उपयोगकर्ताओं के लिए दयालु बनाएं। लेकिन बैकडोर को पर्यावरण परिवर्तक के रूप में भी छोड़ दें जो आपकी लाइब्रेरी के साथ एकीकृत होने जा रहे हैं।मान लें कि चर सही ढंग से सेट हैं (क्रिस मॉर्गन की टिप्पणी "क्यों" के लिए देखें)। – bobah
अच्छी पोस्ट, आपने कई मुद्दों की पहचान की है। दिलचस्प चीजें, लेकिन लगता है कि आप विश्लेषण पक्षाघात पर सीमाबद्ध हैं (जैसे क्रिस कहते हैं)। सुरक्षा परतों के बारे में है, है ना? यदि आप अपने उपयोगकर्ताओं पर भरोसा नहीं कर सकते हैं, तो आपको पैर में शूटिंग करने से रोकने के लिए आपको और परतों की आवश्यकता है। लोग सुरक्षा मुद्दों में पीएचडी प्राप्त कर सकते हैं, और फिर भी उनके मिल्स्पेक या बैंकिंग-सुरक्षित सिस्टम को हैक किया जाता है, इसलिए आपको यह पता लगाना होगा कि सफल अनुलग्नक की संभावना बनाम एक अनुलग्नक की तैयारी के बीच समय-समय पर व्यापार-बंद खर्च किया गया है। आपके वर्तमान प्रोजेक्ट के लिए, इसके वैध उपयोगकर्ता और अन्य हिस्सेदार धारक। सौभाग्य। – shellter