systemd қатайтуын OpenVPN-нің user түсуіне үймелемеңіз
Ең аз артықшылықты екі рецепт бірге алғанда қатаңырақ болмайды. Кімнің сәйкестікті ауыстыратынын таңдап, содан кейін өкілеттікті бүкіл өмірлік циклге бөліңіз.
Бір-біріне жабыстырылған ең аз артықшылықты екі рецепт қатаңырақ орналастыру бермейді. Бір модель демонға артықшылықтармен бастауға және инициализациядан кейін артықшылықсыз тіркелгіге түсуге мүмкіндік береді; екіншісі қызмет менеджеріне оны бірінші нұсқаудан бастап шектелген сәйкестікпен іске қосуға мүмкіндік береді. Әрқайсысы жеке жұмыс істейді, ал үйлесім жиі екі жұмыстың бірін де таза орындай алмайтын қызмет жасайды. Қалғаны шешімді ретімен қарастырады.
Екі модель, ауысудың бір иесі
Бірінші модель демонға тиесілі. Қауымдастық OpenVPN нұсқасындағы user және group опциялары туннель мен кілттер орнатылғаннан кейін сәйкестікті ауыстырады, ал persist-key мен persist-tun бұл ресурстарды кейін де пайдалануға жарамды етіп ұстайды.
Екінші модель қызмет менеджеріне тиесілі. systemd-тің User= немесе Group= параметрі процестің қай сәйкестікпен басталатынын анықтайды, ал мүмкіндік директивалары оның нені ұстай алатынын анықтайды. Модельдер арасында таңдау қауіпсіздік мәселесі болмас бұрын қаптама мәселесі, және пакетті ұстаушы оған әлдеқашан жауап берген. Сіздің міндетіңіз үшінші нұсқаны ойлап табу емес, сол жауапты табу.
Екеуі де заңды. Қате — оларды бір дизайнның қабаттары деп санау, өйткені екінші модель біріншісінің сәйкестік ауысуын процеске енді рұқсат етілмейтін операцияға айналдыруы мүмкін.
Сәйкестіктің қайда өзгеретінін анықтаңыз
Егер юнит әлдеқашан арнайы тіркелгі ретінде басталса, демонға басқа тіркелгі болу туралы нұсқау қатайтылған қызмет ешқашан жасамауы тиіс setuid ауысуын талап етеді. Сәтсіздік іске қосылуда рұқсат қатесі ретінде көрінеді, анық саясат хабарламасы ретінде емес. Бұл жетіспейтін мүмкіндік сияқты оқылады, бұл адамдарды сәйкестік сұрағына емес, кеңірек шектеулер жиынына итермелейді.
Бірдеңені өңдеу алдында орнатылған пакеттің нақты нені ұсынатынын оқыңыз, оның drop-in каталогын қоса. Кейбір юниттер демонның өз түсуін әдейі тастап кетеді, өйткені менеджер оны әлдеқашан басқарады, ал кейбіреулері инициализациядан кейінгі ауысу үшін сол опцияларға сүйенеді. Қай модельді мұра еткеніңізді білмей, екеуінің бірін алып тастау — жұмыс істеп тұрған қызметтің іске қосылудан қалу жолы.
Таңдалған модельді бір жолға жазыңыз: менеджерге тиесілі ме, әлде демонға тиесілі ме. Әрбір кейінгі директива сол сөйлемге сәйкес болуы керек, ал аралас юнитті ымыра емес, қате деп санау керек.
Мүмкіндіктер — шектеулер, сый емес
Мүмкіндік шектеулер жиыны процестің ең көбі нені ұстай алатынын айтады. Бұл төбе, және онда мүмкіндікті тізімдеу өздігінен ештеңе бермейді, сондықтан кең шектеулер жиыны бар юнит те туннель жасай алмауы мүмкін.
Мүмкіндікті қызметтің айналадағы жиынына шынымен орналастыратын нәрсе — AmbientCapabilities=. systemd орындау анықтамалығы екі директиваны бөлек құжаттайды, және дәл осы айырмашылық интернеттегі мүмкіндіктер туралы шатастыратын кеңестердің көбін түсіндіреді.
Мүмкіндікті сәтсіз операция оны анықтағаннан кейін ғана қосыңыз. Кеңірек шектеулер жиыны нақты себепті жасырады және қызметті дизайн көздегеннен де артық артықшылықпен қалдырады. Бұл юнитті қарауды да қиындатады, өйткені төбе енді жұмысты сипаттамайды. Нақты ақау жойылған соң артық мүмкіндікті алып тастаңыз.
Өкілеттікті өмірлік циклге бөліңіз
Процестің әр кезеңде не істеуі керегін тізімдеңіз: іске қосу, тұрақты күй, қайта аутентификация және бөлшектеу. Интерфейс жасау, маршруттарды өзгерту, қорғалған кілтті оқу және көмекшіні шақыру бәрі бір мезетте немесе бір талаптармен бола бермейді. Тізімді мүмкіндік бойынша сұрыптамас бұрын кезең бойынша сұрыптаңыз.
Тұрақтылық опциялары қайта келіссөздер барысында ресурстарды сақтайды және ешқашан болмаған рұқсаттарды бермейді. Процесс іске қосылуда оқи алмайтын кілт кейін де оқылмайтын күйде қалады, тұрақтылық жалаушалары не десе де. Жалаушалар бұрыннан жұмыс істеген нәрсені сақтайды.
Ортақ емес, арнайы тіркелгіні пайдаланыңыз. OpenVPN әзірлеушілері nobody тіркелгісін жалпы мысал ретінде пайдалану әдетінен сақтандырады, өйткені хосттағы басқа қызметтер әлдеқашан сол тіркелгімен жұмыс істеуі мүмкін, ал сіз ойлаған оқшаулау онда жоқ.
Жергілікті жүктемені өзгертетін мүмкіндіктер, мысалы деректер арнасын түсіру немесе басқаша байланысатын құрастыру, қандай операциялар қажет екенін жылжытуы мүмкін. Пакет өзгергенде картаны қарап шығыңыз, тек бірдеңе бұзылғанда ғана емес.
Жоспарды жазып қойып, қалпына келтіру рұқсатын сақтаңыз
Орналастыру жазбасы менеджерді, іске қосу сәйкестігін, көзделген тұрақты сәйкестікті және әрбір рұқсатты оны талап ететін операциямен бірге атауы керек. Дәл сол жазба келесі өзгерісті эксперимент емес, қаралымға жарамды етеді.
Өңдеу кезінде консольге рұқсатты ашық ұстаңыз, өйткені іске қосылуда сәтсіздікке ұшыраған юнитті қашықтан жөндеу қиын. Өзгерісті аяқталды деп жарияламас бұрын қайта іске қосуды және толық қайта жүктеуді сынаңыз. Қайта іске қосудан өткен юнит желі көтерілмей тұрып та сәтсіздікке ұшырауы мүмкін.
Табыс — түсінілген ең аз өкілеттіктегі өмірлік цикл, ал root емес атаумен кездейсоқ жұмыс істеп тұрған процесс емес.