Демон chroot катасын жазат жана профиль мурунтан эле кенен көрүнөт, ошондуктан азгырма чечим — жол эрежесин кеңейтип, кайра баштоо. Бул адатта эч нерсени өзгөртпөйт, анткени chroot профиль эч качан өткөрө албаган артыкчылык менен башкарылат. Кайсы катмарга тийүүнү чечүү үчүн үч арзан текшерүү керек: процесске эмнени кармоого уруксат, саясат эмнеге уруксат берет жана иштетүүчү ошол экөө маанилүү болгонго чейин эмнени алып салды.

Эки өзүнчө дарбаза, жана бирөө гана AppArmorдуку

chroot процесстин иштеп жаткан колдонуучу ат мейкиндигинде CAP_SYS_CHROOT талап кылат. Бул кадимки Linux артыкчылыгы, ядро чакыруу жолдор менен бир нерсе кылганга чейин текшерет. Өзүнчө, аткаруучу AppArmor профили мүмкүнчүлүктү процессте болсо да четке кага алат, анткени милдеттүү саясат кирүү далилдеринин ордуна алар менен бирге каралат. Айырмачылык иш жүзүндө маанилүү: эки катмар ар башка файлдарда жашайт жана адатта аларды ар башка адамдар кармайт.

Бул эки дарбаза бир эле errno менен ишке ашпайт. Экөө тең EPERM чыгарат жана экөө тең демон журналында жалпы уруксат даттануусу катары көрүнөт, ошондуктан профилдин ичин болжолдоо ушунча убакытты текке кетирет. Сиз кошмок болгон жол эрежеси chroot ийгиликтүү болгондон кийинки файлга жетүүнү көзөмөлдөйт; анын операциянын жалпы уруксат берилишине эч кандай тиешеси жок.

Үчүнчү дарбаза экөөнүн тең үстүндө турат. Эгер кызмат менеджери же каптоочу процессти чектөөчү жыйындысында мүмкүнчүлүк жок баштаган болсо, эч кандай AppArmor өзгөртүүсү аны кайтара албайт, ал эми профилге мүмкүнчүлүктөрдү кошуу ядро аткарбай турган ниетти гана жазат.

Саясатты түзөтүүдөн мурун артыкчылык абалын окуңуз

Активдүү деп эсептеген конфигурациядан эмес, иштеп жаткан процесстен баштаңыз. Абал файлы беш мүмкүнчүлүк маскасын жана no-new-privileges желегин көрсөтөт, жана алар ар башка суроолорго жооп берет:

grep -E '^(CapInh|CapPrm|CapEff|CapBnd|CapAmb|NoNewPrivs):' /proc/$(pidof openvpn)/status
sudo aa-status | grep -i openvpn

CapEff — чакыруу үчүн маанилүү жыйынды: CapBnd ичинде бар, бирок CapEff ичинде жок мүмкүнчүлүк төбө тарабынан уруксат берилген, бирок азыр кармалбайт. CapAmb бинардык адаттагы setuid маанисинде артыкчылыктуу болбогондо маанилүү, анткени чөйрө мүмкүнчүлүктөрү — кызматтын файл мүмкүнчүлүктөрү жок exec аркылуу артыкчылыкты сактоо жолу. CapInh exec аркылуу мураска өтө турган биттерди кармайт, бирок аткарылуучу файлдын мурастык жыйындысы уруксат бергенде гана, ошондуктан ал жердеги бир бит өзү алдынча эч нерсе бербейт.

Андан кийин кайсы профиль чындап бекитилгенин тастыктаңыз. Процесс күтпөгөн профиль аты менен чектелиши мүмкүн, өзгөчө дистрибутив өзүнүн бирдик файлы менен профилин чогуу жеткиргенде, жана /proc/PID/attr/current окуу муну бир сапта чечет. Түзөтүлгөн файлыңызды ядро билдирген профиль менен салыштыруу — себепти оңдоо менен эч ким жүктөбөгөн файлды түзөтүүнүн ортосундагы айырма.

Мүмкүнчүлүк эрежесин аудит изи айтканда гана кошуңуз

Ядро жана аудит жазуулары баш тарткан катмарды атайт. Операциясы capable жана аты sys_chroot болгон, аны жараткан профиль менен бирге келген баш тартууну издеңиз. Эгер ал жазуу болсо, процесс мүмкүнчүлүктү мурунтан кармаган жана AppArmor баш тарткан, ал эми максаттуу өзгөртүү чыныгы профилдин ичиндеги мүмкүнчүлүк эрежеси:

capability sys_chroot,

Аны чындап бекитилген профилде фрагмент катары кармаңыз жана ачкыч сөздү башка окуу куралынан эреже көчүрүүнүн ордуна apparmor.d профилдеринин маалымдамасы менен салыштырыңыз. Аны жалпы include ичине салуу ошол файлды тарткан ар бир чектелген программага берет, ал эми профилди complain режимине которуу бул маселени чечүүнүн ордуна кийинки баш тартууну жашырат. Профиль эрежеси саясаттын баш тартуусун алып салат; ал артыкчылык жаратпайт, ошондуктан натыйжалуу жыйындысында CAP_SYS_CHROOT эч качан болбогон процесс эреже болсо да ишке ашпайт.

Эгер аудит жазуусу AppArmor баш тартуусун таптакыр көрсөтпөсө, профилди түзөтүүнү токтотуңуз. Сиз кирүү далилдеринин маселесин көрүп турасыз, ал эми калган иш бирдик файлында же ата-эне процессте, саясат тилинде эмес.

Кызмат менеджери өзүнүн төбөсүн кармайт

systemd ар бир кызматка мүмкүнчүлүктөрдүн чектөөчү жыйындысын коёт, жана демейки боюнча ал жыйынды кууш. Ал жерде чыгарылгандын баары профиль эмне десе да процесс үчүн жеткиликсиз, ошондуктан катууланган бирдиктер демонду кол менен баштаганда иштеген операцияда ишке ашпай калышы мүмкүн. Тиешелүү директиваларды бирдиктен окуу оңой жана колдонмо ишке ашпоочулукту билдиргенде көзгө илинбей калуу да оңой. Таратуу пакети жеткирген drop-in файлдары — эч ким жөндөгөнүн эстебеген төбөнүн адаттагы булагы.

Төбөнү көтөрүү жана мүмкүнчүлүк берүү — эки өзгөртүү, бир эмес. Чектөөчү жыйындыдагы жазуу процесс мүмкүнчүлүктү кармай аларын айтат; ал аны натыйжалуу жыйындыга кошпойт, ал эми NoNewPrivs кийинки көтөрүүнүн ийгиликтүү болушуна тоскоолдук кылышы мүмкүн, калганынын баары туура келсе да. Операцияга керектүүнү гана кошуңуз, калган катуулоону сактаңыз жана бир чакырууну өткөрүү үчүн бардык мүмкүнчүлүктөрдү берүүнүн кыска жолунан баш тартыңыз.

Бул жерде тартип да маанилүү. Адегенде бирдиктин төбөсүн өзгөртүңүз, CapEff эми ал битти камтый турганын тастыктаңыз, анан гана AppArmor дагы баш тартабы деп чечиңиз. Эки өзгөртүүнү бирге жасоо, ишке ашпоочулук уланса, сизди кайра болжолдоого калтырат.

Баш тартуу жоюлгандан кийин түрмөнүн өзүн текшериңиз

Ийгиликтүү chroot тамырды жылдырат, ошондуктан демон кийин тийген ар бир жол жаңы дарактын ичинде чечилет. Жетишпеген конфигурация, жок түзмөк түйүнү же көчүрүлбөгөн сертификат папкасы эми файл катасы катары көрүнөт, жана ал ката мүмкүнчүлүктүн эмес, жайгашуунун маселеси. Дагы бир кенен уруксат кошуунун ордуна кийинки окуяны окуңуз. Жылдыруу салыштырма жолдун маанисин да өзгөртөт, ошондуктан катуулоо колдонмолору демон конфигурациясында абсолюттук жолдорду талап кылат.

chroot эмнени кылбасын эстеп калуу да пайдалуу. Бул жолдун чеги, sandbox эмес: артыкчылыкты сактаган процесс андан качып кете алат, ошондуктан мүмкүнчүлүк адатта чакыруудан кийин ташталат жана ошондуктан чектөө демондун айланасында калышы керек. AppArmor профилин, мүмкүнчүлүктөрдүн чектөөчү жыйындысын жана файлдык системанын чектөөлөрүн чогуу кармоо — бул көнүгүүнүн максаты, кызмат көтөрүлгөндө алып сала турган калдык эмес.

Чечим эрежеси кыска. Эгер аудит жазуусу AppArmorду атаса, бекитилген профилге бир мүмкүнчүлүк эрежесин кошуңуз. Эгер натыйжалуу жыйынды бош болсо, бирдиктин төбөсүн жана артыкчылыктан баш тартуу тартибин оңдоңуз. Эгер профиль сиз түзөткөн профиль болбосо, түзөтүүнү токтотуп, чыныгысын табыңыз.

Тектеш макалалар