PAM аутентификациясы қолмен жұмыс істейді, бірақ OpenVPN қызметі ретінде сәтсіз аяқталады
root shell-ден жұмыс істейтін және systemd астында сәтсіз аяқталатын PAM кіруі құпия сөзге емес, көмекшіге нұсқайды. Артықшылықтарды, файлға қатынауды және SELinux-ты бөліңіз.
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 әлі де оған қызмет көрсететінін растаңыз.