Root у тэрмінале, адмоўлена пад SELinux: чаму хук не спраўляецца
Хук, які бездакорна працуе ўручную, можа быць адхілены ўнутры службы. Параўнайце дамен працэсу, метку файла і адхіленае дазвол перад рэдагаваннем.
Вы запусціце скрыпт up ад імя root, ён завяршаецца, і той жа скрыпт падае, калі яго выклікае служба. Нішто ў дазволах на файл не змянілася, таму натуральны наступны крок — зноў іх паслабіць, што нічога не выпраўляе. На хасту з SELinux вырашальным фактарам часта з'яўляецца не тое, хто такі працэс, а тое, у якім дамене ён працуе, і root унутры абмежаванага дамена застаецца абмежаваным.
Той жа загад, два розныя дамены бяспекі
Прымусовае дастасаванне тыпаў ацэньвае зыходны дамен, мэтавую метку і запытаную аперацыю разам. Ваша сесія тэрмінала працуе ў неабмежаваным або адміністратыўным дамене, а дэман працуе ў тым дамене, які прызначаны яго юніту. Такім чынам, аднолькавыя загады даюць розныя рашэнні, і гэтая розніца з'яўляецца наўмыснай, а не памылкай у палітыцы.
Менавіта таму параўнанне двух запускаў карыснае толькі тады, калі вы параўноўваеце іх кантэксты. Запусціце той жа загад з абалонкі і з хука, і версія з абалонкі даказвае, што бінарны файл існуе і аргументы правільныя; яна нічога не даказвае пра тое, ці дазволена службе выконваць яго. Запусціце яго абодвума спосабамі і параўнайце дамены, а не толькі коды выхаду. Менавіта гэтае параўнанне пераўтварае расплывістую скаргу на дазволы ў канкрэтнае пытанне пра адзін дамен і адну метку.
Класічная форма гэтай няспраўнасці — дапаможнік, які выклікае знешні інструмент. Сам хук можа быць дазволены, тады як інструмент, які ён выклікае, нясе метку, якую дамен службы не можа выконваць, або піша ў каталог, метка якога гэта забараняе.
Чытайце запіс AVC побач з памылкай хука
Адмова AVC называе палі, якія вырашаюць справу: зыходны кантэкст працэсу, мэтавы кантэкст аб'екта, клас аб'екта і канкрэтны дазвол, які быў адхілены. Прачытайце ўсе чатыры, перш чым будаваць тэорыю, бо адмова на выкананне і адмова на запіс маюць цалкам розныя выпраўленні.
ausearch -m AVC,USER_AVC -ts recent
ls -Z /usr/local/sbin/vpn-up.sh
ps -eZ | grep openvpn
Зыходны кантэкст павінен адпавядаць дамену, у якім служба фактычна працуе, а мэтавы кантэкст — метцы файла або каталога, якога датычылася аперацыя. Калі любы з іх не супадае з памылкай, якую вы шукаеце, вы чытаеце іншую падзею.
Звярніце ўвагу на версію палітыкі і дакладны шлях да выкананага файла побач з запісам. Імя дамена, якое сустракаецца ў палітыцы аднаго дыстрыбутыва, з'яўляецца доказам пра гэтую ўстаноўку, а не гарантыяй, што іншая зборка пастаўляе тыя ж правілы. Менавіта гэты кантэкст дазваляе камусьці іншаму паўтарыць вашу выснову на сваім хасту. Без яго запіс чытаецца як анекдот, а не як доказ.
Метка, канфігурацыя або палітыка: тры выпраўленні
Першае выпраўленне — метка, якая не адпавядае ўсталяванаму месцу файла. Скрыпт, скапіяваны на месца праз cp або напісаны рэдактарам, можа несці стандартную метку, якую дамен службы не можа выкарыстоўваць, і аднаўленне чаканага кантэксту выпраўляе гэта, не кранаючы палітыку наогул.
Другое — канфігурацыя. Дыстрыбутыў можа прапанаваць падтрыманы спосаб выканання аперацыі, дакументаваны каталог для дапаможніка або абноўлены пакет палітыкі, які ўжо дазваляе яе. Змяніць вашу схему на падтрыманую танней, чым пісаць палітыку, і гэта перажывае абнаўленні.
Трэцяе — правіла, якое сапраўды адсутнічае, і гэта павінна быць апошняй мерай. Стварыце кандыдата з дапамогай інструментаў аўдыту, прачытайце, што ён фактычна дазваляе, звузьце яго да аперацыі і дамена, якія вы назіралі, і дайце камусьці іншаму правесці агляд, перш чым ён наблізіцца да прадукцыі.
Чаму стары модуль дазволу не з'яўляецца адказам
Вынікі пошуку па гэтай няспраўнасці поўныя гатовых модуляў, часта для інструмента, які хук больш не выклікае. Усталяванне аднаго дае дазволы, якія могуць не мець нічога агульнага з вашай адмовай, і пакідае сапраўдную неадпаведнасць на месцы, дадаючы пастаянную дзірку.
Ён таксама хавае наступную няўдачу. Модуль, які дазваляе шырокі клас аперацый, прыбера гэтую памылку і ператворыць наступную ў нешта значна больш цяжкае для атрыбуцыі. Выдаленне модуля пазней — таксама змена, якую ніхто не хоча планаваць, таму абыходны шлях схільны станавіцца пастаянным.
Дысцыплінаванае параўнанне — паміж адмовай, якую вы можаце прачытаць, і зменай, якую вы прапануеце. Кіраўніцтва Red Hat па выпраўленні праблем SELinux ставіць праверкі метак і канфігурацыі перад згенераванай палітыкай менавіта з гэтай прычыны. Калі ў запісе няма адпаведнай адмовы, SELinux, верагодна, не ваша праблема, і праблемы з шляхам, sandbox або дазволамі ўсё яшчэ адкрытыя.