Бәріңе сәлем. Біз жұмысқа белсенді кірісіп жатырмыз және қаңтар айында көптеген қуатты ұшыруларды дайындап жатырмыз. Сонымен қатар, барлығының сүйікті курсының жаңа ағынына жазылу жарияланды.
Файл рұқсаттары 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
өз кітапханасын жүйеге артықшылықпен шақыруға мәжбүрлеу, сондықтан шақырушы қолданба сияқты артықшылықтармен орындалатын өзінің еркін коды болуы.
Бар болғаны. Курс бағдарламасы туралы толық ақпаратты мына жерден табуға болады
Ақпарат көзі: www.habr.com