LD_LIBRARY_PATH स्क्रीन से परेशान है


13

screenबैश में चल रहा है चर LD_LIBRARY_PATH। मैंने कुछ पठन किया है और ऐसा लगता है कि यह अपेक्षित व्यवहार है, लेकिन मुझे इसके बारे में जानने की आवश्यकता है।

वर्कअराउंड LD_LIBRARY_PATH घोषणा को जोड़ रहा है ~/.bashrc। मेरे मामले में, LD_LIBRARY_PATH शेल के लॉन्च के बीच बहुत बदल जाता है और जब मैं स्क्रीन लगाता हूं, तो मुझे सत्र में LD_LIBRARY_PATH का वर्तमान मूल्य प्राप्त करने की आवश्यकता होती है screen


रन स्क्रीन से पहले आपके पास LD_KLIBRARY_PATH का निर्यात है?
किन्नौ ०२

सुपरसुसर प्रश्न।
कार्लफिलिप

क्षमा करें, क्या मैं किसी तरह इसे आगे बढ़ा सकता हूं, या मुझे हटा देना चाहिए और फिर से बेचना चाहिए?

यदि आपको पांच करीबी वोट मिल जाते हैं, तो यह अपने आप वहां टकरा जाएगा। एक और जाने के लिए!
थॉमस

जवाबों:


14

screenपर्यावरण चर को परेशान नहीं करता है; इसे लिनक्स द्वारा ही हटा दिया जाता है।

अधिकांश प्रणालियों पर, /usr/bin/screenनिष्पादन योग्य समूह के लिए सेटगिड बिट के साथ स्थापित किया जाता है utmp, ताकि utmpडेटाबेस को संशोधित करने में सक्षम हो । यह सॉकेट डायरेक्टरी ( ) तक पहुंच को नियंत्रित करने के लिए सेटगिड का भी उपयोग करता है /var/run/screen/

लिनक्स, जब एक पर setuid (या setgid ) कार्यक्रम, भाग गया है यह निश्चित वातावरण चर प्राप्त नहीं होता है (सहित LD_LIBRARY_PATH, कई अन्य LD_*चर, और HOSTALIASESनहीं तो आप एक छोटा सा पुस्तकालय और चाल लिख सकते हैं:), आदेश संभावित हमले अंक कम करने के लिए suया sudoइस तरह से अपने "बेहतर" कार्यों को कॉल करने में।


आप सेटगिड बिट को हटा सकते हैं screen, लेकिन आपको सॉकेट निर्देशिका को सभी के द्वारा पूरी तरह से सुलभ बनाना होगा (मोड 0777)। यह एक सुरक्षा जोखिम नहीं होना चाहिए, हालांकि, screenयह भी संलग्नक के यूआईडी की जांच करता है।

हालाँकि, आपको डेटाबेस को विश्व-योग्य नहीं बनाना चाहिए utmp


(नोट: मुझे यह निश्चित नहीं है कि कर्नेल द्वारा, या
ld-linux.so

वास्तव में ठीक काम किया। ये आदेश हैं जिन्हें करने की आवश्यकता है: chgrp root $(which screen)और chmod 777 /var/run/screen। आप इस छोटे बैश स्क्रिप्ट के साथ परीक्षण कर सकते हैं: while true; do echo $LD_LIBRARY_PATH; sleep 2; done आप देखेंगे कि पथ सफलतापूर्वक प्रदर्शित किया गया है। साभार ग्रैविटी
लेप

7

अपने में .screenrc, आप setenvस्क्रीन के वातावरण में एक मूल्य निर्धारित करने के लिए कमांड का उपयोग कर सकते हैं ।

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN

यह आपके शेल शुरू होने से पहले सेट किया गया है। स्पष्ट रूप LD_LIBRARY_PATH_SCREENसे स्क्रीन शुरू करने से पहले आपको सेट करने की आवश्यकता है।


1
ग्रेविटी का उत्तर देखें - LD_LIBRARY_PATH इस संदर्भ में एक विशेष चर है। भले ही यह काम किया हो (सेटेनव को '=', बीटीडब्ल्यू की आवश्यकता नहीं है) यह उस पर्यावरण चर का नाम बदलने में बहुत मददगार नहीं होगा जिसे हम सेट करने की कोशिश कर रहे हैं; कार्यक्रम अभी भी विहित नाम को देख रहे हैं (देखें stackoverflow.com/questions/13974069/… )।
एंड्रयू वुड

थान सुधार के लिए। मैंने सिंटैक्स को ठीक किया और यह भूल गया कि मेरे पास स्क्रीन शुरू करने वाले वातावरण में एक अलग चर था। _SCREENएक अपने आर सी फाइल में या एक आवरण स्क्रिप्ट है कि स्क्रीन शुरू होता है में सेट किया जा सकता है।
दोज

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.