Rpath
কম্পিউটিংয়ে, rpath একটি এক্সিকিউটেবল ফাইল বা লাইব্রেরিতে হার্ড-কোডেড রান-টাইম অনুসন্ধান পথকে মনোনীত করে। ডাইনামিক লিঙ্কিং লোডারগুলি প্রয়োজনীয় লাইব্রেরিগুলি খুঁজে পেতে আরপ্যাথ ব্যবহার করে। বিশেষত, এটি একটি এক্সিকিউটেবলের (বা অন্য কোনও ভাগ করা লাইব্রেরি) শিরোনামে ভাগ করা লাইব্রেরির একটি পথকে এনকোড করে। এই আরপিএটিএইচ হেডার মান (এক্সিকিউটেবল এবং লিঙ্কযোগ্য ফরম্যাট হেডার স্ট্যান্ডার্ডে নামকরণ করা হয়েছে) সিস্টেম ডিফল্ট ডায়নামিক লিঙ্কিং সার্চ পাথগুলিকে ওভাররাইড বা পরিপূরক করতে পারে। একটি এক্সিকিউটেবল বা শেয়ার্ড লাইব্রেরির আরপ্যাথ হল ইএলএফ এক্সিকিউটেবল বা শেয়ার্ড লাইব্রেরির. ডায়নামিক বিভাগে একটি ঐচ্ছিক এন্ট্রি, যার ধরণ ডিটি _ আরপিএটিএইচ, যাকে ডিটি _ আরপিএটিএইচ অ্যাট্রিবিউট বলা হয়। লিঙ্কারের মাধ্যমে লিঙ্কের সময় এটি সেখানে সংরক্ষণ করা যেতে পারে। চরপথ এবং প্যাচেলফের মতো সরঞ্জামগুলি পরে এন্ট্রি তৈরি বা সংশোধন করতে পারে। ডাইনামিক লিঙ্কার দ্বারা ডিটি _ আরপিএটিএইচ এন্ট্রির ব্যবহার ইএলএফ-এর জন্য বিভিন্ন ডাইনামিক লিঙ্কার বিভিন্ন উপায়ে ডিটি _ আরপিএটিএইচ বৈশিষ্ট্যের ব্যবহার বাস্তবায়ন করে। জি. এন. ইউ <আই. ডি. 1> জি. এন. ইউ সি লাইব্রেরির গতিশীল সংযোগকারী নিম্নলিখিত স্থানগুলিতে ভাগ করা গ্রন্থাগারগুলির জন্য ক্রমানুসারে অনুসন্ধান করেঃ বাইনারির ডি. টি. _ আর. পি. এ. টি. এইচ গতিশীল বিভাগের বৈশিষ্ট্যের (কোলন-বিচ্ছিন্ন) পথ যদি থাকে এবং ডি. টি. _ আর. এন. পি. এ. টি. এইচ বৈশিষ্ট্য বিদ্যমান নেই। পরিবেশে পরিবর্তনশীল LD _ LIBRARY _ PATH-এর (কোলন-বিচ্ছিন্ন) পথ, যদি না এক্সিকিউটেবল একটি সেটুইড/সেটগিড বাইনারি হয়, সেক্ষেত্রে এটি উপেক্ষা করা হয়। LD _ LIBRARY _ PATH-কে ডাইনামিক লিঙ্কারকে-- লাইব্রেরি-পাথ বিকল্পের সাথে কল করে ওভাররাইড করা যেতে পারে। / lib/ld-linux.so.2-- লাইব্রেরি-পাথ $হোম/মাইলিবস মাইপ্রোগ্রাম)। বাইনারির DT _ RUNPATH গতিশীল বিভাগের বৈশিষ্ট্যের (কোলন-বিচ্ছিন্ন) পথগুলি উপস্থিত থাকলে। ldConfig ক্যাশে ফাইলের উপর ভিত্তি করে অনুসন্ধান করুন (প্রায়শই/ইত্যাদি/ld. so. ক্যাশে অবস্থিত) যার মধ্যে পূর্বে বর্ধিত লাইব্রেরি পথে পাওয়া প্রার্থী লাইব্রেরির একটি সংকলিত তালিকা রয়েছে (/ইত্যাদি/ld. so. কনফ দ্বারা সেট করা)। যাইহোক, যদি বাইনারিটি-z নোডেফল্টলিব লিঙ্কার বিকল্পের সাথে সংযুক্ত করা হয়, তবে ডিফল্ট লাইব্রেরি পথের লাইব্রেরিগুলি বাদ দেওয়া হয়। বিশ্বস্ত ডিফল্ট পাথ/lib, এবং তারপর/usr/lib। যদি বাইনারিটি-z নোডেফল্টলিব লিঙ্কার বিকল্পের সাথে সংযুক্ত থাকে, তবে এই পদক্ষেপটি বাদ দেওয়া হয়। এই সমস্ত স্থানে শেয়ারড লাইব্রেরি খুঁজে পেতে ব্যর্থ হলে "শেয়ারড অবজেক্ট ফাইল খুলতে পারবে নাঃ এরকম কোনও ফাইল বা ডিরেক্টরি নেই" ত্রুটি দেখা দেবে। দ্রষ্টব্যঃ রিডেল্ফ-ডি <বাইনারি _ নেম>। গ্রেপ 'আর। 'পিএটিএইচ' একটি বাইনারি ফাইলের আরপিএটিএইচ বা আরইউএনপিএটিএইচ প্রদর্শন করে। উদাহরণস্বরূপ, জি. সি. সি-তে আর. পি. এ. টি. এইচ-কে-ডব্লিউ. এল,-আর. পি. এইচ,/কাস্টম/আর. পি. এইচ/দ্বারা নির্দিষ্ট করা যেতে পারে। ডাইনামিক লিঙ্কারের বিকল্প-- ইনহিবিট-আরপাথ লিস্ট এটিকে লিস্টে বস্তুর নামের ডিটি _ আরপিএটিএইচ এবং ডিটি _ আরইউএনপিএটিএইচ বৈশিষ্ট্যগুলি উপেক্ষা করার নির্দেশ দেয়। তালিকাতে একটি প্রধান প্রোগ্রাম নির্দিষ্ট করতে, খালি স্ট্রিং দিন। এনভায়রনমেন্ট ভেরিয়েবল LD _ PRELOAD দ্বারা নির্দিষ্ট গ্রন্থাগারগুলি এবং তারপরে/ইত্যাদি/ld. so. লোড-এ তালিকাভুক্ত গ্রন্থাগারগুলি অনুসন্ধান শুরু হওয়ার আগে লোড করা হয়। এইভাবে অনুরোধকৃত গ্রন্থাগারের কিছু (বা সমস্ত) স্বাভাবিক কার্যকারিতা প্রতিস্থাপনের জন্য একটি প্রি-লোড ব্যবহার করা যেতে পারে, অথবা এটি কেবল এমন একটি গ্রন্থাগার সরবরাহ করতে ব্যবহার করা যেতে পারে যা অন্যথায় পাওয়া যেত না। স্ট্যাটিক লাইব্রেরিগুলি অনুসন্ধান করা হয় এবং লিঙ্কের সময় ইএলএফ ফাইলের সাথে সংযুক্ত করা হয় এবং রান টাইমে অনুসন্ধান করা হয় না। জিএনইউ লিঙ্কার (জিএনইউ এলডি) একটি বৈশিষ্ট্য প্রয়োগ করে যাকে এটি "নতুন-ট্যাগ" বলে, যা এলডি _ লিব্রারি _ পাথ পরিবেশ পরিবর্তনশীলের চেয়ে কম অগ্রাধিকারের একটি আরপ্যাথ সন্নিবেশ করতে ব্যবহার করা যেতে পারে। যদি নতুন-ট্যাগ বৈশিষ্ট্যটি লিঙ্কার (-- সক্ষম-নতুন-ট্যাগ)-এ সক্রিয় করা থাকে, তবে জি. এন. ইউ. এল. ডি, ডি. টি. আর. পি. এ. টি. এইচ বৈশিষ্ট্য সেট করার পাশাপাশি, ডি. টি. আর. এন. পি. এ. টি. এইচ বৈশিষ্ট্যটিও একই স্ট্রিং-এ সেট করে। রান টাইমে, যদি ডাইনামিক লিঙ্কার একটি DT _ RUNPATH অ্যাট্রিবিউট খুঁজে পায়, তবে এটি DT _ RPATH অ্যাট্রিবিউটের মান উপেক্ষা করে, যার ফলে LD _ LIBRARY _ PATH প্রথমে চেক করা হয় এবং DT _ RUNPATH অ্যাট্রিবিউটের পাথগুলি কেবল পরে অনুসন্ধান করা হয়। এলডি ডাইনামিক লিঙ্কারটি ডিটি _ আরপিএটিএইচ-এর মতো ট্রানজিটিভ নির্ভরতার জন্য ডিটি _ আরইউএনপিএটিএইচ অবস্থানগুলি অনুসন্ধান করে না। লিঙ্কারের জন্য-rpath নির্দিষ্ট করার পরিবর্তে, এনভায়রনমেন্ট ভেরিয়েবল LD _ RUN _ PATH একই প্রভাব সেট করা যেতে পারে। সোলারিস ld.so সোলারিসের গতিশীল সংযোগকারী, বিশেষত/লিব/ld.so সানওএস 5.8 এবং অনুরূপ সিস্টেমগুলি ডিটি _ আরপিএটিএইচ বৈশিষ্ট্যটি দেখার আগে এলডি _ লিব্রারি _ পিএটিএইচ ভেরিয়েবলে নির্দিষ্ট ডিরেক্টরিগুলিতে লাইব্রেরিগুলির সন্ধান করে। সান মাইক্রোসিস্টেমস প্রথম ডাইনামিক লাইব্রেরি লোডিং প্রবর্তন করে। সান পরে এলডি-তে আরপাথ বিকল্পটি যুক্ত করে এবং একটি অতিরিক্ত নিরাপত্তা বৈশিষ্ট্য হিসাবে প্রয়োজনীয় গ্রন্থাগারগুলিতে এটি ব্যবহার করে। জি. এন. ইউ. এল. ডি সান-স্টাইল ডাইনামিক লাইব্রেরিগুলিকে সমর্থন করার জন্য একই কাজ করেছিল। উদাহরণস্বরূপ, $cc-ভাগাভাগি করা-Wl,-soname, 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,-soname, lib termcap.so.2-o lib termcap.so.2 $objdump-x termcap.so.2 NEEDED libc.so.6 SONAME termcap.so.2 ওল্ড লিনাক্স/সান উপরেরটি ব্যবহার করেছে, যা ব্যবহারকারীকে যে কোনও প্রোগ্রামকে যে কোনও termcap.so ব্যবহার করার নির্দেশ দেয় যা তারা নির্দিষ্ট করে, বা যা/usr/স্থানীয়/lib (n)-এ পাওয়া যায় তা ld.so.conf-এর মতো অনুসন্ধান নিয়ম ব্যবহার করে। যাইহোক, জি. এন. ইউ. এল. ডি সর্বদা আগে নির্বিশেষে/lib বা/usr/lib ব্যবহার করে, তাই প্রথম/lib/টর্মক্যাপ. তাই/usr/স্থানীয়/lib-এ স্থানান্তরিত হয় এবং যা ld.so.conf-এ উল্লিখিত, যা চলন্ত libs এবং ld.so.conf ব্যবহার করতে সক্ষম করে। একটি পছন্দের অনুশীলন হল উপলব্ধ বৈশিষ্ট্যগুলি ব্যবহার করার জন্য "" ব্যবহার করা এবং প্রোগ্রামগুলির চেক সংস্করণ (সমস্ত লিবগুলি এটি সমর্থন করে) রাখা, তবে ধীর কম্পিউটিং গতি এবং সঠিকভাবে কোড করার সময়ের অভাবের কারণে এটি প্রায়শই পুরানো রিলিজগুলিতে বাদ দেওয়া হত। বলা হচ্ছে, এই ধরনের জিনিসের উপর নির্ভর করার সিদ্ধান্ত নেওয়ার আগে একটি নির্দিষ্ট প্ল্যাটফর্মে পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন। আজকের রিলিজ অ্যাডমিনিস্ট্রেটররা অতীতের নির্দেশিকা বা ডকুমেন্টেশনকে সম্মান করার নিশ্চয়তা দেয় না। কিছু ইউনিক্স জাত সম্পূর্ণ ভিন্ন উপায়ে লিঙ্ক এবং লোড করে। rpath একটি নির্দিষ্ট বিতরণের সাথে পাঠানো ld-এর জন্য নির্দিষ্ট। সবশেষে, যেমন বলা হয়েছে, আরপ্যাথ একটি নিরাপত্তা বৈশিষ্ট্য তবে "বাধ্যতামূলক অ্যাক্সেস কন্ট্রোল" (এম. এ. সি) এবং অন্যান্য কৌশলগুলি লিব পড়া এবং লেখা নিয়ন্ত্রণের জন্য আরপ্যাথের মতো কার্যকর বা আরও কার্যকর হতে পারে। দীর্ঘ এবং জটিল মেক (1) স্ক্রিপ্টিংয়ের কারণে আজকের সংকলক ব্যবহার করে আরপ্যাথের উপর নিয়ন্ত্রণ প্রায়শই প্রায় অসম্ভব। এর চেয়েও খারাপ বিষয় হল, কিছু বিল্ড স্ক্রিপ্ট এটিকে একটি বিকল্প হিসাবে উপস্থাপন করলেও-- Disable-rpath কে উপেক্ষা করে। সংকলন করার জন্য প্রতিটি বিজোড় প্রোগ্রামে বিল্ড স্ক্রিপ্টিং ঠিক করা সময়সাপেক্ষ এবং হতাশাজনক এবং সম্ভবত অসম্ভব হবে। একটি সাধারণ এস. এইচ (1) "মোড়ক" আসল এল. ডি-কে ld.bin নামে ডাকতে পারে। মোড়কটি এলডি আহ্বান করার আগে ইন/আউট বিকল্পটি ফিল্টার করতে পারে। #!/বিন/শ #-এখানে এলডি বিকল্পগুলি ফিল্টার করুন-ld.bin $অপ্টস তবে, মনে রাখবেন যে কিছু বিল্ড ভুলভাবে আরপ্যাথ-লিঙ্কের পরিবর্তে আরপ্যাথ ব্যবহার করে বা বিল্ড ডিরেক্টরিতে থাকা মধ্যবর্তী পণ্যগুলি সনাক্ত করতে-এইভাবে চূড়ান্ত পণ্যটিতে পিছনের দিকে আরপ্যাথের দাবি করে, যা "আরপ্যাথ কী" সম্পর্কিত একটি নতুন সমস্যা। নিরাপত্তা বিবেচনা আরপাথ এবং রানপথের ব্যবহার নিরাপত্তা ঝুঁকি উপস্থাপন করতে পারে যেখানে প্রয়োগ করা মানটিতে আক্রমণকারীর নিয়ন্ত্রণে থাকা ডিরেক্টরিগুলি অন্তর্ভুক্ত থাকে। এর মধ্যে এমন ক্ষেত্রে অন্তর্ভুক্ত থাকতে পারে যেখানে সংজ্ঞায়িত মানটি স্পষ্টভাবে আক্রমণকারীর লিখনযোগ্য অবস্থানের উল্লেখ করে তবে এমন উদাহরণও রয়েছে যেখানে একটি আপেক্ষিক পথ ব্যবহার করা হয়, হয় এর উপস্থিতির মাধ্যমে। অথবা., $ORIGIN ইত্যাদির মাধ্যমে অথবা যেখানে একটি ডিরেক্টরি বিবৃতি অপ্রচলিত রেখে দেওয়া হয়। বিশেষত, এটি সেটইউআইডি বাইনারিগুলিকে কাজে লাগানোর অনুমতি দিতে পারে, যেখানে একটি অনিরাপদ পথ ব্যবহার করা হয়। আক্রমণকারীর নিয়ন্ত্রণে থাকা এক বা অন্য ডিরেক্টরি থেকে দূষিত লাইব্রেরিগুলি লোড করার জন্য বাইনারিকে প্রতারিত করার জন্য এটি ব্যবহার করা যেতে পারে। রেফারেন্স এক্সটার্নাল লিঙ্ক chrpath-একটি এক্সিকিউটেবলের DT _ RPATH অ্যাট্রিবিউট পরিবর্তন করার এবং এটিকে একটি DT _ RUNPATH অ্যাট্রিবিউটে রূপান্তর করার একটি টুল ফ্রিবিএসডি ডেভেল/chrpath পোর্ট-বিদ্যমান ELF বাইনারি প্যাচইএলএফ-এ DT _ RPATH সংশোধন করার টুল-ডাইনামিক লিঙ্কার এবং ELF এক্সিকিউটেবলের DT _ RUNPATH অ্যাট্রিবিউট পরিবর্তন করার জন্য একটি ছোট ইউটিলিটি। - ডিটি _ আরপিএটিএইচ কম্পিউটার লাইব্রেরি অপারেটিং সিস্টেম প্রযুক্তিতে আক্রমণ সহ রান-টাইম লিঙ্কারকে আক্রমণ করার কাগজ