Кіріспе

Қатты кодталған іздеу жолы – бағдарламалау термині.

Компьютерлік жүйеде rpath – орындалатын файлда немесе кітапханада қатты кодталған орындау кезіндегі іздеу жолын білдіреді. Динамикалық байланыс жүктегіштері rpath-ті қажетті кітапханаларды табу үшін пайдаланады. Нақтырақ айтқанда, ол орындалатын файлдың (немесе тағы бір ортақ кітапхананың) қанатында ортақ кітапханаларға жолды енгізеді. Бұл RPATH қанатындағы мән (орындалатын және байланыстырылатын формат стандарттарында осылай аталады) жүйелік әдепкі динамикалық байланыс іздеу жолдарын алмастыра немесе толықтыра алады. Орындалатын файлдың немесе ортақ кітапхананың rpath – ELF орындалатын файлының немесе ортақ кітапханалардың динамикалық бөліміндегі DT RPATH түріндегі, DT RPATH атрибуты деп аталатын қосымша жазба. Оны сілтемелеуші құрал осы жерде сақтай алады. chrpath және patchelf сияқты құралдар бұл жазбаны кейіннен жасауға немесе өзгертуге мүмкіндік береді.

Динамикалық сілтеуіштің DT_RPATH жазуын пайдалануы

ELF үшін әр түрлі динамикалық байланыстырғыштар DT RPATH атрибутын әртүрлі тәсілдермен іске асырады.

GNU-ның рөлі

GNU Linker (GNU ld) "жаңа dtags" деп аталатын мүмкіндікті іске асырады, оны LD LIBRARY PATH ортасының айнымалысынан төмен басымдыққа ие rpath енгізу үшін пайдалануға болады. Егер сілтегіште жаңа dtags мүмкіндігі қосылса (жаңа dtags қосу), GNU ld, DT RPATH атрибутын орнатудан басқа, DT RUNPATH атрибутын да сол мәнді қояды. Орындалу кезінде, егер динамикалық жүктегіш DT RUNPATH атрибутын тапса, ол DT RPATH атрибутының мәнін назарға алмайды, нәтижесінде LD LIBRARY PATH бірінші болып тексеріледі және DT RUNPATH атрибутындағы жолдар тек содан кейін ізделеді. ld динамикалық жүктегіш DT RPATH сияқты, DT RUNPATH орналасқан жерлерде өтпелі тәуелділіктерді іздемейді. rpath-ті сілтегішке көрсетудің орнына, LD RUN PATH ортасының айнымалысын сол мақсатта орнатуға болады.

Solaris ld.so

Solaris жүйесінің динамикалық байланыстырғышы, атап айтқанда SunOS 5.8 және оған ұқсас жүйелердегі /lib/ld.so, DT_RPATH атрибутын қараудан бұрын LD_LIBRARY_PATH айнымалысында көрсетілген каталогтарда кітапханаларды іздейді. Sun Microsystems динамикалық кітапханаларды жүктеуді алғаш рет енгізді. Кейіннен Sun, ld құралына rpath опциясын қосты және оны маңызды кітапханаларда қосымша қауіпсіздік мүмкіндігі ретінде пайдаланды. GNU ld да Sun стиліндегі динамикалық кітапханаларды қолдау үшін солай жасады.

Қауіпсіздік мәселелері

rpath және runpath қолданылуы, егер қолданылатын мән шабуылшының бақылауындағы каталогтарды қамтитын болса, қауіпсіздік тәуекелдерін тудыруы мүмкін. Бұл, шабуылшыға жазу мүмкіндігі бар жерді тікелей көрсетумен қатар, $ORIGIN сияқты айнымалылар арқылы немесе каталогты толтырмау арқылы салыстырмалы жол қолданылатын жағдайларды да қамтиды. Атап айтқанда, бұл қауіпсіз емес жол қолданылғанда setUID бинарлық файлдарын қауіпті пайдалануға мүмкіндік береді. Бұл бинарлық файлды шабуылшының бақылауындағы каталогтардың бірінен зиянды кітапханаларды жүктеуге итермелеу үшін қолданылуы мүмкін.