Linux жүйесіндегі файл рұқсаттары

Бәріңе сәлем. Біз жұмысқа белсенді кірісіп жатырмыз және қаңтар айында көптеген қуатты ұшыруларды дайындап жатырмыз. Сонымен қатар, барлығының сүйікті курсының жаңа ағынына жазылу жарияланды. «Linux әкімшісі». Іске қосу қарсаңында біз дәстүрлі түрде пайдалы материалдардың аудармаларымен бөлісеміз.

Linux жүйесіндегі файл рұқсаттары

Файл рұқсаттары SUID орындалатын файлдарына қауіпсіз балама ұсынады, бірақ бастапқыда аздап түсініксіз болып көрінуі мүмкін.


Екілік файлдар екенін бәріміз білеміз ОҢТҮСТІК болып табылады қауіпсіздік тұрғысынан дұрыс емес шешім. Бақытымызға орай, егер сіздің қолданбаңыз кейбір шектеулі артықшылықтарды қажет етсе, тиімдірек деп аталатын әдіс бар файл рұқсаттары.

Жоғарыдағы мақаланы егжей-тегжейлі оқудан аулақ болғыңыз келсе, уақытыңызды үнемдеймін: Негізінде, файл рұқсаттары түбір ретінде жұмыс істейтін процестерге мүмкіндік береді, сондықтан белгілі бір мүмкіндіктерді сақтау үшін бірдеңе жасауға рұқсат етіледі, шектеулі. бұл тізімолар артықшылықтарды алып тастағанда және артықшылығы жоқ пайдаланушы басқарғанда. Бұл дегеніміз, егер шабуылдаушы буфердің толып кетуін немесе басқа эксплуатацияны пайдаланып процесті бұзып үлгерсе, олар процеске шын мәнінде қажет болатын белгілі бір минималды артықшылықтардан басқа ештеңені пайдалана алмайды.

Рұқсаттар әдетте әрқашан түбір ретінде жұмыс істейтін қызметтер үшін тамаша, бірақ пәрмен жолы утилиталары туралы не деуге болады? Бақытымызға орай, бұл дұрыс утилиталар орнатылған жағдайда да қолдау көрсетіледі. Егер сіз Ubuntu пайдалансаңыз, сізге пакет қажет болады libcap2-bin. Сондай-ақ, сізге архаикалық емес ядроны (нұсқадан 2.6.24).

Бұл функциялар рұқсаттарды SUID битін орнатуға ұқсас орындалатын файлдармен байланыстыруға мүмкіндік береді, бірақ тек рұқсаттардың белгілі бір жинағы үшін. Утилита setcap файлға рұқсаттарды қосу және жою үшін пайдаланылады.

Бірінші қадам сізге қажет рұқсаттарды таңдау болып табылады. Осы мақала үшін желілік диагностика құралы бар деп ойлаймын tracewalkпайдалана алуы керек өңделмеген розеткалар. Бұл әдетте қолданбаны түбір ретінде іске қосуды талап етеді, бірақ қарау кезінде тізім тек рұқсат керек екен CAP_NET_RAW.

Сіз екілік файл орналасқан каталогта болсаңыз tracewalk, бұл рұқсатты келесідей қосуға болады:

sudo setcap cap_net_raw=eip tracewalk

Әзірше жұрнақты елемеу =eip шешу үшін мен бұл туралы бірнеше секундтан кейін сөйлесемін. Рұқсат атауы кіші әріппен жазылғанын ескеріңіз. Енді сіз рұқсаттарды дұрыс конфигурациялағаныңызды тексере аласыз:

setcap -v cap_new_raw=eip tracewalk

Немесе берілген орындалатын файл үшін орнатылған барлық рұқсаттарды тізімдей аласыз:

getcap tracewalk

Анықтама үшін орындалатын файлдан барлық рұқсаттарды мыналар арқылы жоюға болады:

setcap -r tracewalk

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

Сонда бұл оғаш жұрнақ нені білдіреді? =eip? Бұл рұқсаттардың табиғатын түсінуді талап етеді. Әрбір процесте рұқсаттардың үш жинағы бар - тиімді, мұрагерлік және рұқсат етілген:

  • Тиімді Рұқсаттар - бұл процесс іс жүзінде не істей алатынын анықтайтын рұқсаттар. Мысалы, егер ол өңделмеген розеткалармен жұмыс істей алмайды CAP_NET_RAW тиімді жиынтықта жоқ.
  • Қол жетімді рұқсаттар - тиісті қоңырауды пайдаланып, оларды сұраса, процеске рұқсат етілген рұқсаттар. Олар аталған рұқсатты сұрау үшін арнайы жазылмаған болса, процестің іс жүзінде ештеңе істеуіне жол бермейді. Бұл нақты талап етілетін кезең үшін ғана тиімді жиынға маңызды рұқсаттарды қосу үшін процестерді жазуға мүмкіндік береді.
  • Тұқым қуалайтын рұқсаттар - пайда болған еншілес процестің қолжетімді жинағында мұраға алынуы мүмкін рұқсаттар. Операция кезінде fork() немесе clone() еншілес процеске әрқашан ата-аналық процестің рұқсаттарының көшірмесі беріледі, себебі ол әлі де сол орында бірдей орындалатын файлды іске қосады. Тұқым қуалайтын жиын қашан пайдаланылады exec() (немесе баламасы) орындалатын файлды басқасымен ауыстыру үшін шақырылады. Осы кезде жаңа процесс үшін пайдаланылатын қолжетімді жиынды алу үшін процестің қол жетімді жиыны мұраға алынатын жиынмен маскирленеді.

Сонымен, утилита setcap берілген орындалатын файл үшін осы үш жиынның рұқсаттарын тәуелсіз қосуға мүмкіндік береді. Топтардың мағынасы файл рұқсаттары үшін сәл басқаша түсіндірілетінін ескеріңіз:

  • Қол жетімді файл рұқсаттары, тіпті оны шақырған ата-аналық процесте олар болмаса да, орындалатын файл үшін әрқашан қол жетімді болатын рұқсаттар. Олар бұрын «мәжбүрлі» рұқсаттар деп аталды.
  • Мұрагерлік файл рұқсаттары шақыру процесінің жинағынан рұқсаттарды жою үшін де пайдаланылуы мүмкін қосымша масканы анықтайды. Олар шақыру процесінің мұраланған жиынына қосымша қолданылады, сондықтан рұқсат тек екі жиында да бар болса ғана мұраға алынады.
  • Тиімді файл рұқсаттары шын мәнінде жиын емес, бір ғана бит және орнатылған болса, бұл барлық қол жетімді жиын жаңа процестің тиімді жиынына көшірілетінін білдіреді. Мұны сұрау үшін арнайы жазылмаған процестерге рұқсаттарды қосу үшін пайдалануға болады. Бұл бір бит болғандықтан, оны кез келген рұқсат үшін орнатсаңыз, ол барлық рұқсаттар үшін орнатылуы керек. Оны бұрынғы бит ретінде қарастыруға болады, себебі ол рұқсаттарды оларға қолдау көрсетпейтін қолданбаларға пайдалануға рұқсат беру үшін пайдаланылады.

арқылы рұқсаттарды көрсету кезінде setcap үш әріп e, i и p қатысты тиімді, тұқым қуалайтын және қол жетімді тиісінше жинайды. Сонымен, бұрынғы спецификация:

sudo setcap cap_net_raw=eip tracewalk

...қарар екенін көрсетеді CAP_NET_RAW қол жетімді және мұраланған жиындарға қосылуы керек және тиімді бит де орнатылуы керек. Бұл файлда бұрын орнатылған рұқсаттарды қайта анықтайды. Бір уақытта бірнеше рұқсаттарды орнату үшін үтірмен бөлінген тізімді пайдаланыңыз:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Рұқсаттар нұсқаулығы мұның барлығын толығырақ қарастырады, бірақ бұл пост не болып жатқанын аздап түсіндірді деп үміттенемін. Айта кету керек, бірнеше ескертулер мен айлалар қалды.

Біріншіден, файл мүмкіндіктері символдық сілтемелермен жұмыс істемейді - оларды екілік файлдың өзіне (яғни, символдық сілтеменің мақсаты) қолдану керек.

Екіншіден, олар интерпретацияланған сценарийлермен жұмыс істемейді. Мысалы, рұқсатты тағайындағыңыз келетін Python сценарийі болса, оны Python аудармашысының өзіне тағайындауыңыз керек. Әлбетте, бұл ықтимал қауіпсіздік мәселесі, өйткені сол аудармашымен орындалған барлық сценарийлер көрсетілген рұқсатқа ие болады, бірақ бұл оны SUID етуден әлдеқайда жақсырақ. Ең көп таралған уақытша шешім C тілінде бөлек орындалатын файлды немесе қажетті әрекеттерді орындай алатын және оны сценарийден шақыра алатын баламалы файлды жазу болып табылады. Бұл екілік файлды қолданатын Wireshark қолданатын тәсілге ұқсас /usr/bin/dumpcap артықшылықты операцияларды орындау үшін:

$ getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

Үшіншіден, орта айнымалы мәнін пайдалансаңыз, файл рұқсаттары өшіріледі LD_LIBRARY_PATH анық қауіпсіздік себептері бойынша(1). Осыған қатысты LD_PRELOAD, менің білуімше.

1. Өйткені, шабуылдаушы стандартты кітапханалардың бірін ауыстыра алады және оны пайдалана алады LD_LIBRARY_PATHөз кітапханасын жүйеге артықшылықпен шақыруға мәжбүрлеу, сондықтан шақырушы қолданба сияқты артықшылықтармен орындалатын өзінің еркін коды болуы.

Бар болғаны. Курс бағдарламасы туралы толық ақпаратты мына жерден табуға болады 24 қаңтарда өтетін вебинар.

Ақпарат көзі: www.habr.com

пікір қалдыру