के साथ एलडी_PRELOAD मैं एक पुस्तकालय को प्रीलोड करने के लिए LD_PRELOAD
का उपयोग करने की कोशिश कर रहा हूं जिसमें सेटुइड अनुमतियां हैं। पहली बार में LD_PRELOAD
की कोशिश की, और ऐसा लग रहा था जैसे कि यह setuid बाइनरी के साथ पर ध्यान नहीं दिया जा रहा था, हालांकि यह काम कर रहा था जब मैं ls
की तरह दूसरों के साथ की कोशिश की, dir
आदिसेटयूड बाइनरी
LD_PRELOAD के प्रलेखन से:
LD_PRELOAD
A whitespace-separated list of additional, user-specified, ELF shared
libraries to be loaded before all others. This can be used to
selectively override functions in other shared libraries. For set-
user-ID/set-group-ID ELF binaries, only libraries in the standard
search directories that are also set-user-ID will be loaded.
मैंने पुस्तकालय को /usr/lib
, /usr/local/lib
, और /usr/lib64
पर उपरोक्त इस दस्तावेज़ के अनुसार सेटयूड अनुमतियों के साथ रखने की कोशिश की, लेकिन यह अभी भी काम नहीं कर रहा है। अगर मैं LD_PRELOAD
उस मामले में एक पथ नहीं देता जहां मेरे पास सेटयूड के साथ मानक डीआईआरएस में लाइब्रेरी है, तो यह लाइब्रेरी नहीं लग रहा है। अगर मैं इसे रास्ता देता हूं, तो यह कुछ भी नहीं करता है।
सेटुइड बाइनरी एक मूल अनुमति बाइनरी है जो गैर रूट उपयोगकर्ता खोल में चलता है। कोई विचार? निश्चित नहीं है कि क्या मुझे पथ खो रहा है, एक पर्यावरण परिवर्तनीय है, या मैं ऊपर दिए गए दस्तावेज को गलत समझ रहा हूं।
संपादित: अनुमतियों का अनुरोध किया हैं:
लाइब्रेरी:
-rwsr-sr-x 1 root root 72580 2012-02-10 07:51
ऐप:
-rwsr-xr-x 1 root root 137517601 2012-02-10
env | grep LD
LD_LIBRARY_PATH=/usr/lib (I added this manually myself, usually LD_LIBRARY_PATH is empty)
क्या आप SELinux चला रहे हैं? –
हां, सूज़ एंटरप्राइज़ 11.1 वह है जो मैं वर्तमान में चल रहा हूं .. –
यह आखिरकार काम करता था। परीक्षणों के पूरे सेट में, मैंने कुछ गड़बड़ करनी होगी। इसे lib64 में सही अनुमतियों (setuid) के साथ डालकर और LD_PRELOAD को पथ प्रदान नहीं किया। मदद के लिए आप सभी का धन्यवाद! –