PAM аркылуу аутентификация кардарды кол менен иштеткенде ийгиликтүү болушу мүмкүн, ал эми systemd ошол эле профилди баштаганда AUTH_FAILED менен ишке ашпай калышы мүмкүн. Бул иштетүүлөрдүн ортосунда сырсөз өзгөрбөйт; өзгөргөн нерсе — PAM'га суроо берген процесстин айланасындагы чектөөлөрдүн жыйындысы. PAM өзүнүн эсептик маалыматтарын өзгөртүү жөндөмү бар жардамчы аркылуу жооп берет жана так ушул жөндөмдү катууландырылган unit алып салат. Мүмкүнчүлүктөр тизмесине тийүүдөн мурун ошол жардамчыны жана ага керек болгон чекти табыңыз.

unix_chkpwd — PAM суроосуна жооп берүүчү бинардык файл

Жергиликтүү сырсөз аутентификациясы менен pam_unix hash файлын өзү сейрек окуйт. Ал unix_chkpwd программасын иштетет, аны дистрибутивдер setuid root же setgid shadow катары орнотушат, ошондуктан /etc/shadow окууга тиешеси жок процесстин атынан бир сырсөздү текшерүүгө болот. Ошол инсандыкты алуу жөндөмүн алып салыңыз, жардамчы текшерүүнү бүтүрө албайт, ошондуктан модуль жөнөкөй аутентификация катасын кайтарат.

Андан кийин ката кардар көрө алган ар бир журналда эсептик маалыматтардын маселеси сыяктуу көрүнөт. Бул — тузак: кардар PAM ага эмне дегенин билдирет, ал эми PAM стек «жок» дегенин гана билдирет. Жардамчыны root катары кол менен иштетүү да эч нерсени далилдебейт, анткени ал кызмат эч качан колдонбогон артыкчылык жолун сынайт. systemd чындыгында жүктөгөн unit'ти окуңуз, андан кийин жасалган аракет үчүн тутумдук журналды окуңуз. Бул эки көз караш sandbox маселесин туура эмес сырсөз маселесинен ажыратат.

Сырсөз журналын окуудан мурун unit'ти окуңуз

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

systemctl cat [email protected]
systemctl show [email protected] -p User -p Group -p CapabilityBoundingSet -p AmbientCapabilities -p NoNewPrivileges
journalctl -u [email protected] -b

Биринчи команда unit жана анын drop-in'дери кайдан келерин көрсөтөт, бул маанилүү, анткени айлар мурун кошулган кайра аныктоо анын эмне үчүн бар экени тууралуу эстутумдан узак жашайт. Экинчиси кийинки эки бөлүм көз каранды болгон sandbox маанилерин басып чыгарат.

Көргөнүңүздү ошол эле дистрибутив жана версиянын иштеп жаткан хост менен салыштырыңыз. User, CapabilityBoundingSet же NoNewPrivileges ичиндеги айырма — так из; проза комментарийлериндеги айырма эмес. Бир нерсени өзгөртүүдөн мурун маанилерди жазып алыңыз, анткени кыймылдаган максат менен кийинки салыштыруу эч нерсени далилдебейт. Эгер кызмат бош bounding жыйындысы бар артыкчылыксыз эсеп менен иштесе, жардамчынын иштей турган жумушу дээрлик жок.

Эсептик маалыматтарды трансформациялоо, файлга кирүү жана саясат — үч чек

exec учурунда эмне болорунен баштаңыз. setuid бинардык же файлдык мүмкүнчүлүктөрү бар файл эсептик маалыматтарды трансформациялоону пайда кылат, ошондуктан пайда болгон инсандык чакыруучунун уландысы эмес. Bounding жыйынды мындай файл эмнени ала аларын чектейт, ал эми NoNewPrivileges setuid, setgid жана файлдык мүмкүнчүлүктөрдү алууну толугу менен бөгөттөйт. Ошол үчөөнүн кайсынысы болбосун жардамчыны токтото алат, ал эми кызматтын бардык башка функциялары бузулбай калат.

Андан кийин кенен дискрециялык айланып өтүүнү тар окууга кирүүдөн бөлүңүз. CAP_DAC_OVERRIDE дискрециялык текшерүүлөрдү дээрлик бардык жерде өткөрүп жиберет, ал эми CAP_DAC_READ_SEARCH өзүнүн кошумча ыйгарым укуктары менен окууну жана каталогдордон өтүүнү камтыйт. Алар таасир радиусу ар башка куралдар жана экөө тең «PAM shadow файлын окусун» деген сүйлөмдүн жазылышы эмес.

Акырында милдеттүү саясат бул аракетке жалпы жонунан уруксат береби, ошону сураңыз. Linux мүмкүнчүлүгү SELinux'ту жокко чыгарбайт жана аны кармоо type enforcement эрежеси тууралуу эч нерсени далилдебейт. Файлга кирүүдөн баш тартууну жана мүмкүнчүлүктөн баш тартууну ар башка далил катары караңыз, анткени алар ар башка оңдоолорду жана көбүнчө ар башка ээлерди аташат. Жазманын ар бир талаасын окуңуз, жалгыз denied сөзүн эмес. Кайсы аткарылуучу файл аракет жасады, кайсы доменде иштеди, кандай типтеги максатка тийди, кандай объект классы катышты жана саясат кандай уруксаттан баш тартты — ар бири жоопту ар башкача тарылтат.

Баш тартууну аудит журналынан чыгарыңыз

Күчүндөгү хосттогу аудит изи баш тартууну жаза турган жалгыз жер. Акыркы окуяларды сураңыз жана аларды ишке ашпаган кирүүнүн убакыт белгисине карата окуңуз, тергөөнү баштаган убакытка карата эмес.

ausearch -m AVC,USER_AVC -ts recent

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

Red Hat'тын SELinux маселелерин чечүү боюнча жетекчилиги белгилерди жана конфигурацияны текшерүүнү allow эрежелерин түзүүдөн мурун коёт, бул ушул маселе үчүн да туура тартип. Туура эмес белгиленген жардамчы бинардык жана саясаттагы кемтик окшош баш тартууларды пайда кылат, бирок ар башка оңдоолорду талап кылат. Белгилөө катасы үчүн allow эрежесин түзүү кемчиликти жашырат жана кийинки пакет жаңыртуу аны кайра киргизүүгө жол берет. Кандайдыр бир саясатты жазганга чейин орнотулган жардамчыдагы белгини ырастаңыз.

Өзгөртүүнү бир кабыл алынган жана бир четке кагылган кирүү менен далилдеңиз

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

Чыныгы туташуу аракетин жасаңыз жана дароо журналды окуңуз. Оңдоону далилдеген сап — ошол аракеттин pam_unix(openvpn:auth) жазуусу: анда аутентификация ийгиликтүү деп жазылышы керек жана эч бир AVC жазуусу ошол эле секундду көрсөтпөшү керек.

journalctl -u [email protected] -n 30 --no-pager
ss -tnp | grep openvpn

Иштеп жаткан туннелге кайра туташуу да керек, анткени sandbox өзгөртүүлөрү экинчи туташууну биринчиден көбүрөөк бузат. Кайра туташкандан кийин түзүлгөн сокетти текшериңиз жана ошол эле unit ага дагы эле кызмат көрсөтүп жатканын ырастаңыз.

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