Два залепени рецепта со најмалку привилегии не даваат построго распоредување. Едниот модел му дозволува на демонот да стартува со привилегии и по иницијализацијата да се спушти на сметка без привилегии; другиот му дозволува на менаџерот на услуги да го стартува со ограничен идентитет уште од првата наредба. Секој работи сам, а комбинацијата често дава услуга што не може чисто да ја заврши ниту едната од двете работи. Останатото го поминува решението по ред.

Два модели, еден сопственик на преминот

Првиот модел му припаѓа на демонот. Опциите OpenVPN од заедницата user и group го менуваат идентитетот откако тунелот и клучевите се поставени, а persist-key заедно со persist-tun ги чуваат тие ресурси употребливи потоа.

Вториот модел му припаѓа на менаџерот на услуги. Поставката systemd User= или Group= одлучува под кој идентитет процесот стартува, а директивите за можности одлучуваат што смее да држи. Изборот меѓу моделите е прашање на пакување пред да биде безбедносно прашање, и одржувачот на пакетот веќе одговорил на него. Ваша задача е да го најдете тој одговор, а не да измислите трета опција.

Двата се легитимни. Грешката е да се третираат како слоеви на еден дизајн, бидејќи вториот модел може да ја направи промената на идентитетот од првиот операција што на процесот повеќе не му е дозволена.

Одлучете каде се менува идентитетот

Ако единицата веќе стартува како посветена сметка, додавањето наредба за демонот да стане друга сметка бара setuid премин што зацврстена услуга никогаш не требало да го направи. Неуспехот се појавува како грешка со дозвола при стартување, а не како јасна порака за политика. Ова се чита како можост што недостига, што ги турка луѓето кон пошироко множество ограничувања наместо кон прашањето за идентитетот.

Прочитајте што навистина доставува инсталираниот пакет пред да уредите нешто, вклучително неговиот drop-in директориум. Некои единици намерно го испуштаат сопствениот пад на демонот затоа што менаџерот веќе се грижи за тоа, а некои се потпираат на тие опции за преминот по иницијализацијата. Отстранувањето на било која од двете без да знаете кој модел сте го наследиле е начинот на кој работна услуга престанува да стартува.

Запишете го избраниот модел во еден ред: сопственост на менаџерот или сопственост на демонот. Секоја подоцнежна директива мора да биде во согласност со таа реченица, а мешаната единица треба да се третира како грешка, а не како компромис.

Можностите се граници, не дарови

Множеството ограничувања на можности кажува што процесот смее најмногу да држи. Тоа е таван, и наведувањето можост таму само по себе не дава ништо, затоа единица со дарежливо множество ограничувања сепак може да не успее да создаде тунел.

Она што навистина ја става можноста во околното множество на услугата е AmbientCapabilities=. референцата за извршување на systemd ги документира двете директиви одделно, и таа разлика го објаснува најголемиот дел од збунувачките совети за можности на интернет.

Додајте можост само откако операцијата што не успева ќе ја идентификува. Поширокото множество ограничувања ја крие вистинската причина и ја остава услугата со поголеми привилегии отколку што дизајнот предвидел. Тоа ја отежнува и проверката на единицата, бидејќи таванот повеќе не ја опишува работата. Отстранете ја дополнителната можост кога вистинската грешка ќе се поправи.

Мапирајте го овластувањето низ животниот циклус

Наведете што мора процесот да прави во секоја фаза: стартување, стабилна состојба, повторна автентикација и расклопување. Создавањето интерфејс, промените на рути, читањето заштитен клуч и повикувањето помошник не се случуваат сите во истиот момент или под исти барања. Подредете ја листата по фаза пред да ја подредите по можност.

Опциите за постојаност ги зачувуваат ресурсите низ повторни преговори и не даваат дозволи што никогаш не биле држени. Клуч што процесот не може да го прочита при стартување ќе остане нечитлив и подоцна, што и да кажат знаменцата за постојаност. Знаменцата го зачувуваат она што веќе работело.

Користете посветена сметка, а не споделена. Програмерите на OpenVPN предупредуваат против навиката да се користи nobody како општ пример, бидејќи други услуги на домаќинот може веќе да работат со таа сметка и изолацијата што мислите дека ја имате ја нема.

Функциите што го менуваат локалното оптоварување, како растоварувањето на каналот за податоци или градба што се поврзува поинаку, можат да го поместат тоа кои операции се потребни. Прегледајте ја картата кога се менува пакетот, не само кога нешто се расипува.

Запишете го планот и задржете пристап за обнова

Записот за распоредување треба да ги именува менаџерот, идентитетот при стартување, предвидениот стабилен идентитет и секоја доделба заедно со операцијата што ја бара. Токму тој запис ја прави следната промена прегледна наместо експериментална.

Задржете пристап до конзола додека уредувате, бидејќи единица што не успева при стартување тешко се поправа од далечина. Тестирајте рестартирање и целосно повторно подигнување пред да ја прогласите промената за завршена. Единица што преживува рестартирање сепак може да не успее пред мрежата да биде горе.

Успехот е разбран животен циклус со најмалку овластувања, а не процес што случајно работи под име што не е root.

Поврзани статии