Rpath
کمپیوٹنگ میں، آر پیتھ ایک قابل عمل فائل یا لائبریری میں ہارڈ کوڈڈ رن ٹائم سرچ پاتھ کو نامزد کرتا ہے۔ متحرک لنک کرنے والے لوڈر مطلوبہ لائبریریوں کو تلاش کرنے کے لیے آر پیتھ کا استعمال کرتے ہیں۔ خاص طور پر، یہ مشترکہ لائبریریوں کے راستے کو ایک قابل عمل (یا کسی اور مشترکہ لائبریری) کے ہیڈر میں انکوڈ کرتا ہے۔ یہ آر پی اے ٹی ایچ ہیڈر ویلیو (جس کا نام قابل عمل اور لنک ایبل فارمیٹ ہیڈر معیارات میں رکھا گیا ہے) سسٹم ڈیفالٹ ڈائنامک لنکنگ سرچ پاتھز کو یا تو اوور رائیڈ کر سکتا ہے یا اس کی تکمیل کر سکتا ہے۔ ایک قابل عمل یا مشترکہ لائبریری کا آر پیتھ ای ایل ایف قابل عمل یا مشترکہ لائبریریوں کے. ڈائنامک سیکشن میں ایک اختیاری اندراج ہے، جس کی قسم DT _ RPATH ہے، جسے DT _ RPATH خاصیت کہا جاتا ہے۔ اسے لنکر کے ذریعے لنک کے وقت وہاں محفوظ کیا جا سکتا ہے۔ چارپاتھ اور پیچلف جیسے ٹولز بعد میں اندراج بنا سکتے ہیں یا اس میں ترمیم کر سکتے ہیں۔ متحرک لنکر کے ذریعے DT _ RPATH اندراج کا استعمال ELF کے لیے مختلف متحرک لنکر DT _ RPATH خاصیت کے استعمال کو مختلف طریقوں سے نافذ کرتے ہیں۔ گنو ld.so گنو سی لائبریری کا متحرک لنکر درج ذیل مقامات پر مشترکہ لائبریریوں کی تلاش کرتا ہے: بائنری کے DT _ RPATH متحرک سیکشن کی خاصیت میں (کالون سے الگ) راستے اگر موجود ہیں اور DT _ RUNPATH خاصیت موجود نہیں ہے۔ ماحولیاتی متغیر LD _ LIBRARY _ PATH میں (کالون سے الگ) راستے، جب تک کہ قابل عمل سیٹوئڈ/سیٹگیڈ بائنری نہ ہو، اس صورت میں اسے نظر انداز کر دیا جاتا ہے۔ LD _ LIBRARY _ PATH کو ڈائنامک لنکر کو-- لائبریری-پاتھ (مثال کے طور پر) آپشن کے ساتھ کال کر کے اوور رائڈ کیا جا سکتا ہے۔ / lib/ld-linux.so.2-- لائبریری-پاتھ $ہوم/مائیلیبس مائی پروگرام)۔ اگر موجود ہو تو بائنری کے DT _ RUNPATH متحرک حصے کی خاصیت میں (کالون سے الگ) راستے۔ ایل ڈی کونفگ کیش فائل (اکثر/et/ld. so. cache پر واقع) کی بنیاد پر تلاش کریں جس میں امیدوار لائبریریوں کی ایک مرتب شدہ فہرست ہوتی ہے جو پہلے آگمینٹڈ لائبریری پاتھ (/et/ld. so. conf کے ذریعہ سیٹ) میں پائی جاتی تھی۔ اگر، تاہم، بائنری کو-z نوڈیفولٹ لیب لنکر آپشن کے ساتھ منسلک کیا گیا تھا، تو ڈیفالٹ لائبریری کے راستوں میں موجود لائبریریوں کو چھوڑ دیا جاتا ہے۔ قابل اعتماد ڈیفالٹ پاتھ/lib میں، اور پھر/usr/lib۔ اگر بائنری کو-z نوڈیفولٹ لیب لنکر آپشن سے منسلک کیا گیا تھا، تو یہ مرحلہ چھوڑ دیا جاتا ہے۔ ان تمام مقامات پر مشترکہ لائبریری کو تلاش کرنے میں ناکامی "مشترکہ آبجیکٹ فائل نہیں کھول سکتی: ایسی کوئی فائل یا ڈائرکٹری نہیں" کی غلطی کو جنم دے گی۔ نوٹ: خود کو پڑھیں-d <bाइनरी _ نام> | گریپ 'R۔ * پی اے ٹی ایچ 'بائنری فائل کے آر پی اے ٹی ایچ یا رن پیتھ کو ظاہر کرتا ہے۔ مثال کے طور پر، جی سی سی میں، کوئی بھی آر پی اے ٹی ایچ کو-ڈبلیو ایل،-آر پیتھ،/کسٹم/آر پیتھ/سے متعین کر سکتا ہے۔ ڈائنامک لنکر کا آپشن-- انہیبٹ-آرپاتھ لسٹ اسے لسٹ میں آبجیکٹ کے ناموں کی DT _ RPATH اور DT _ RUNPATH صفات کو نظر انداز کرنے کی ہدایت دیتا ہے۔ فہرست میں مرکزی پروگرام کی وضاحت کے لیے خالی سٹرنگ دیں۔ ماحولیاتی متغیر LD _ PRELOAD کے ذریعہ متعین کردہ لائبریریاں اور پھر/et/ld. so. preलोड میں درج لائبریریوں کو تلاش شروع ہونے سے پہلے لوڈ کیا جاتا ہے۔ اس طرح ایک پری لوڈ کو درخواست کردہ لائبریری کی کچھ (یا تمام) معمول کی فعالیتوں کو تبدیل کرنے کے لیے استعمال کیا جا سکتا ہے، یا اسے صرف ایک ایسی لائبریری فراہم کرنے کے لیے استعمال کیا جا سکتا ہے جو بصورت دیگر نہیں ملتی۔ جامد کتب خانوں کو تلاش کیا جاتا ہے اور لنک کے وقت ای ایل ایف فائل میں منسلک کیا جاتا ہے اور رن ٹائم پر نہیں تلاش کیا جاتا ہے۔ جی این یو ایل ڈی کا کردار جی این یو لنکر (جی این یو ایل ڈی) ایک ایسی خصوصیت کو لاگو کرتا ہے جسے وہ "نیو-ڈی ٹیگز" کہتا ہے، جسے ایل ڈی _ لائبری _ پی اے ٹی ایچ ماحولیاتی متغیر سے کم ترجیح والے آر پیتھ کو داخل کرنے کے لیے استعمال کیا جا سکتا ہے۔ اگر نئے ڈی ٹیگز کی خصوصیت لنکر (-- enable-new-dtags) میں فعال ہے، تو جی این یو ایل ڈی، ڈی ٹی آر پی اے ٹی ویٹ سیٹ کرنے کے علاوہ، ڈی ٹی آر یو این پی اے ٹی ویٹ کو بھی اسی سٹرنگ پر سیٹ کرتا ہے۔ رن ٹائم پر، اگر متحرک لنکر کو DT _ RUNPATH خاصیت مل جاتی ہے، تو یہ DT _ RPATH خاصیت کی قدر کو نظر انداز کر دیتا ہے، اس اثر کے ساتھ کہ LD _ LIBRARY _ PATH کو پہلے چیک کیا جاتا ہے اور DT _ RUNPATH خاصیت میں راستے صرف بعد میں تلاش کیے جاتے ہیں۔ ایل ڈی ڈائنامک لنکر ڈی ٹی آر پی اے ٹی ایچ کے برعکس ٹرانزیٹیو ڈیپینڈینسیوں کے لیے ڈی ٹی آر یو این پی اے ٹی ایچ مقامات کی تلاش نہیں کرتا ہے۔ لنکر کے لیے-rpath کی وضاحت کرنے کے بجائے، ماحولیاتی متغیر LD _ RUN _ PATH کو اسی اثر پر سیٹ کیا جا سکتا ہے۔ سولر کا متحرک لنکر، خاص طور پر سن او ایس 5.1 کا/lib/ld.so اور اسی طرح کے نظام DT _ RPATH خاصیت کو دیکھنے سے پہلے LD _ LIBRARY _ PATH متغیر میں مخصوص ڈائریکٹریز میں لائبریریوں کی تلاش کرتے ہیں۔ سن مائیکرو سسٹمز نے سب سے پہلے متحرک لائبریری لوڈنگ متعارف کرائی۔ سن نے بعد میں ایل ڈی میں آرپاتھ آپشن شامل کیا اور اسے ایک اضافی حفاظتی خصوصیت کے طور پر ضروری کتب خانوں میں استعمال کیا۔ جی این یو ایل ڈی نے سن طرز کی متحرک لائبریریوں کو سپورٹ کرنے کے لیے بھی ایسا ہی کیا۔ مثال $cc-شیئرڈ-Wl،-سونام، termcap.so. 4،-rpath،/lib/termcap.so. 4-o termcap.so. 4 $objdump-x termcap.so. 4 ضرورت libc.so.6 SONAME termcap.so. 4 RPATH/lib/termcap.so. 4 اس مثال میں، جی این یو یا سن ایل ڈی (ld.so) اس کی ضرورت والے پروگرام کے لیے ٹرم کیپ لوڈ کرنے سے انکار کر دے گا جب تک کہ فائل termcap.so/lib/میں نہ ہو اور اس کا نام termcap.so. 4 نہ ہو۔ نظر انداز کیا جاتا ہے۔ اگر/lib/termcap.so. 4 کو ریمیڈیٹ کرنے کے لیے ہٹا دیا جاتا ہے، تو شیل ختم ہو جاتا ہے (کوئی متبادل termcap.so کو لوڈ نہیں کر سکتا اور ریسکیو ڈسک کی ضرورت ہوتی ہے، لیکن یہ بھی کہ اگر کسی نئے termcap.so. 4 میں RPATH/lib ہے، ld.so اسے لوڈ کرنے کے لیے استعمال کرنے سے انکار کر دے گا جب تک کہ یہ/lib/termcap.so. 4 کو بند نہ کر دے)۔ لیکن ایک اور مسئلہ ہے: کچھ لبز کو/لب میں کاپی کرنا محفوظ نہیں ہے کیونکہ وہ "استعمال میں ہیں"، جس سے لب ٹیسٹر بننے والے کو مزید محدود کیا جاتا ہے۔ مزید برآں، بمقابلہ کا مطلب ہے کہ بنیادی termcap.so کی ضرورت والے پروگراموں کو مسترد کر دیا گیا ہے کیونکہ اوپر کی لائبریری نے بنیادی سپورٹ تک اے بی آئی کی رسائی کو حذف کر دیا ہے۔ $cc-شیئرڈ-Wl،-سونام، lib termcap.so.2-o lib termcap.so.2 $objdump-x termcap.so.2 Need libc.so.6 SONAME termcap.so.2 اولڈ لینکس/سن نے اوپر استعمال کیا ہے، جو صارف کو کسی بھی پروگرام کو کسی بھی termcap.so کو استعمال کرنے کی ہدایت دیتا ہے جس میں وہ وضاحت کرتے ہیں، یا جو/usr/مقامی/lib (n) میں پایا جاتا ہے وہ تلاش کے قواعد جیسے ld.so.conf کا استعمال کرتے ہوئے۔ تاہم، جی این یو ایل ڈی ہمیشہ پہلے سے قطع نظر/lib یا/usr/lib استعمال کرتا ہے، لہذا پہلے/lib/ٹرم کیپ. so کو/usr/مقامی/lib پر منتقل کر دیا جاتا ہے اور جس کا ذکر ld.so.conf میں کیا گیا ہے، جو حرکت پذیر libs اور ld.so.conf کے استعمال یا استعمال کرنے کے قابل بناتا ہے۔ ایک ترجیحی عمل یہ ہے کہ دستیاب خصوصیات کو استعمال کرنے کے لیے "" اور پروگرام چیک ورژن (تمام لیب اس کی حمایت کرتے ہیں) کا استعمال کیا جائے، لیکن کمپیوٹنگ کی سست رفتار اور صحیح طریقے سے کوڈ کرنے کے لیے وقت کی کمی کی وجہ سے اکثر پرانی ریلیزز میں اسے چھوڑ دیا جاتا تھا۔ یہ کہا جا رہا ہے، اس پر انحصار کرنے کا فیصلہ کرنے سے پہلے کسی دیئے گئے پلیٹ فارم پر اس قسم کی چیز کو اچھی طرح سے آزمائیں۔ آج ریلیز کے منتظمین کو ماضی کے رہنما خطوط یا دستاویزات کا احترام کرنے کی ضمانت نہیں ہے۔ کچھ یونکس اقسام بالکل مختلف طریقے سے لنک اور لوڈ ہوتی ہیں۔ آر پیتھ ایک مخصوص تقسیم کے ساتھ بھیجے گئے ایل ڈی کے لیے مخصوص ہے۔ آخر میں، جیسا کہ کہا گیا ہے، آر پیتھ ایک حفاظتی خصوصیت ہے تاہم "لازمی رسائی کنٹرول" (ایم اے سی) اور دیگر تکنیکیں لب ریڈنگ اور رائٹنگ کو کنٹرول کرنے کے لیے آر پیتھ سے زیادہ موثر یا زیادہ موثر ہو سکتی ہیں۔ طویل اور پیچیدہ میک (1) اسکرپٹنگ کو دیکھتے ہوئے آج کے مرتبوں کا استعمال کرتے ہوئے آر پیتھ پر قابو پانا اکثر ناممکن ہوتا ہے۔ اس سے بھی بدتر بات یہ ہے کہ کچھ بلڈ اسکرپٹ-- ڈس ایبل-آرپتھ کو نظر انداز کر دیتے ہیں حالانکہ وہ اسے ایک آپشن کے طور پر پیش کرتے ہیں۔ مرتب کرنے کے لیے ہر عجیب پروگرام میں بلڈ اسکرپٹنگ کو ٹھیک کرنا وقت طلب اور مایوس کن اور شاید ناقابل عمل ہوگا۔ ایک سادہ ایس ایچ (1) "ریپر" حقیقی ایل ڈی کو کال کر سکتا ہے، جس کا نام ld.bin ہے۔ ریپر ایل ڈی لگانے سے پہلے ان/آؤٹ آپشن کو فلٹر کر سکتا ہے۔ #!/بن/ش #-فلٹر ایل ڈی آپشنز یہاں-ld.bin $آپٹس تاہم، نوٹ کریں کہ کچھ بلڈز غلط طریقے سے آر پیتھ لنک کے بجائے آر پیتھ کا استعمال کرتے ہیں یا انٹرمیڈیٹ پروڈکٹس کا پتہ لگانے کے لیے جو بلڈ ڈائرکٹری میں رہتے ہیں-اس طرح حتمی پروڈکٹ میں پیچھے کی طرف آر پیتھ کا مطالبہ کرتے ہیں، جو کہ "آر پیتھ کیا ہے" سے متعلق ایک نیا مسئلہ ہے۔ حفاظتی تحفظات آر پیتھ اور رن پیتھ کا استعمال حفاظتی خطرات پیش کر سکتا ہے جہاں لاگو ہونے والی قیمت میں حملہ آور کے کنٹرول میں ڈائریکٹریز شامل ہوتی ہیں۔ اس میں ایسے معاملات شامل ہو سکتے ہیں جہاں بیان کردہ قدر واضح طور پر حملہ آور کے قابل تحریر مقام کا حوالہ دیتی ہے بلکہ ایسی مثالیں بھی جہاں رشتہ دار راستہ استعمال کیا جاتا ہے، یا تو اس کی موجودگی کے ذریعے۔ یا، $ORIGIN وغیرہ کے ذریعے یا جہاں ڈائرکٹری کا بیان غیر آباد رہ جاتا ہے۔ خاص طور پر، یہ سیٹ یو آئی ڈی بائنری کا استحصال کرنے کی اجازت دے سکتا ہے، جہاں ایک غیر محفوظ راستہ استعمال کیا جاتا ہے۔ حملہ آور کے کنٹرول میں ایک یا دوسری ڈائریکٹریز سے بدنیتی پر مبنی لائبریریوں کو لوڈ کرنے میں بائنری کو دھوکہ دینے کے لیے اس کا فائدہ اٹھایا جا سکتا ہے۔ حوالہ جات بیرونی روابط chrpath-ایک ایسا ٹول جو کسی قابل عمل کی DT _ RPATH خاصیت کو تبدیل کرتا ہے اور اسے DT _ RUNPATH خاصیت میں تبدیل کرتا ہے۔ فری بی ایس ڈی ڈویل/chrpath پورٹ-موجودہ ELF بائنری پیچ ای ایل ایف میں DT _ RPATH میں ترمیم کرنے کا ٹول-متحرک لنکر اور ELF قابل عمل کی DT _ RUNPATH خاصیت میں ترمیم کرنے کے لیے ایک چھوٹی سی افادیت۔ - رن ٹائم لنکر پر حملہ کرنے پر کاغذ بشمول DT _ RPATH کمپیوٹر لائبریریوں پر حملے آپریٹنگ سسٹم ٹیکنالوجی