Два рэцэпты найменшых прывілеяў, склееныя разам, не даюць больш строгага разгортвання. Адна мадэль дазваляе дэману стартаваць з прывілеямі і пераходзіць да непрывілеяванага ўліковага запісу пасля ініцыялізацыі; другая дазваляе кіраўніку службаў запускаць яго з абмежаванай ідэнтычнасцю з першай інструкцыі. Кожная працуе сама па сабе, а спалучэнне часта дае службу, якая не можа чыста выканаць ні адну з дзвюх задач. Далейшы тэкст разглядае рашэнне па парадку.

Дзве мадэлі, адзін уладальнік пераключэння

Першая мадэль належыць дэману. Грамадская зборка OpenVPN дае опцыі user і group, якія змяняюць ідэнтычнасць пасля наладжвання тунеля і ключоў, а persist-key разам з persist-tun захоўваюць гэтыя рэсурсы прыдатнымі да выкарыстання пасля гэтага.

Другая мадэль належыць кіраўніку службаў. Налада systemd User= або Group= вызначае ідэнтычнасць, пад якой стартуе працэс, а дырэктывы магчымасцяў вызначаюць, што ён можа ўтрымліваць. Выбар паміж мадэлямі — гэта пытанне пакетавання раней, чым пытанне бяспекі, і суправаджальнік пакета ўжо адказаў на яго. Ваша задача — знайсці гэты адказ, а не вынайсці трэці варыянт.

Абедзве легітымныя. Памылка — ставіцца да іх як да слаёў аднаго дызайну, бо другая мадэль можа зрабіць пераключэнне ідэнтычнасці першай аперацыяй, якую працэсу ўжо не дазволена выконваць.

Вызначце, дзе змяняецца ідэнтычнасць

Калі юніт ужо стартуе ад імя спецыяльнага ўліковага запісу, інструкцыя дэмана перайсці пад іншы запіс патрабуе пераходу setuid, якога ўзмоцненая служба ніколі не павінна рабіць. Збой выглядае як памылка правоў пры запуску, а не як зразумелае паведамленне палітыкі. Гэта чытаецца як недахоп магчымасці, што штурхае людзей да шырэйшага набору абмежаванняў замест пытання пра ідэнтычнасць.

Прачытайце, што ўсталяваны пакет фактычна пастаўляе, перш чым нешта рэдагаваць, уключаючы яго каталог drop-in. Некаторыя юніты наўмысна апускаюць уласны скід дэмана, бо кіраўнік ужо займаецца гэтым, а некаторыя спадзяюцца на гэтыя опцыі для пераключэння пасля ініцыялізацыі. Выдаленне любога з іх без ведання, якую мадэль вы атрымалі ў спадчыну, — гэта шлях да таго, што працоўная служба перастане запускацца.

Запішыце абранаю мадэль у адзін радок: ва ўласнасці кіраўніка ці ва ўласнасці дэмана. Кожная наступная дырэктыва мусіць адпавядаць гэтаму сказу, а змяшаны юніт трэба лічыць памылкай, а не кампрамісам.

Магчымасці — гэта межы, а не выдаванне

Набор абмежаванняў магчымасцяў кажа, што працэс можа ўтрымліваць найбольш. Гэта столік, і пералічэнне там магчымасці само па сабе нічога не дае; таму юніт са шчодрым наборам абмежаванняў можа ўсё роўна не стварыць тунель.

Тое, што фактычна змяшчае магчымасць у асяродкавы набор службы, — гэта AmbientCapabilities=. Даведнік па выкананні systemd апісвае дзве дырэктывы асобна, і гэтае адрозненне тлумачыць большасць заблытаных парадаў пра магчымасці ў інтэрнэце.

Дадавайце магчымасць толькі пасля таго, як збойная аперацыя яе вызначыць. Шырэйшы набор абмежаванняў хавае сапраўдную прычыну і пакідае службу больш прывілеяванай, чым задумаў дызайн. Ён таксама робіць юніт цяжэйшым для агляду, бо столік ужо не апісвае працу. Выдаліце лішнюю магчымасць, калі сапраўдная непаладачка выпраўлена.

Размеркаваць паўнамоцтвы на ўвесь жыццёвы цыкл

Пералічыце, што працэс мусіць рабіць на кожнай стадыі: запуск, устойлівы стан, паўторная аўтэнтыфікацыя і завяршэнне. Стварэнне інтэрфейсу, змены маршрутаў, чытанне абароненага ключа і выклік памочніка не адбываюцца ў адзін момант і пры адных патрабаваннях. Сартуйце спіс па стадыях, перш чым сартаваць яго па магчымасцях.

Опцыі захавання берагуць рэсурсы паміж перамовамі і не даюць правоў, якіх ніколі не мелі. Ключ, які працэс не можа прачытаць пры запуску, застанецца нечытэльным і пазней, што б ні казалі сцягі захавання. Сцягі захоўваюць тое, што ўжо працавала.

Выкарыстоўвайце спецыяльны ўліковы запіс, а не агульны. Распрацоўнікі OpenVPN папярэджваюць супраць звычкі браць nobody як агульны прыклад, бо іншыя службы на хосте могуць ужо працаваць пад гэтым запісам, і ізаляцыі, якую вы ўяўляеце, там няма.

Функцыі, што змяняюць мясцовую нагрузку, такія як разгрузка канала даных або зборка з іншым звязваннем, могуць зрушыць, якія аперацыі патрэбны. Пераглядайце карту, калі змяняецца пакет, а не толькі калі нешта ламаецца.

Запішыце план і захавайце доступ для аднаўлення

Запіс разгортвання мусіць называць кіраўніка, ідэнтычнасць запуску, мэтавую ўстойлівую ідэнтычнасць і кожнае выдаванне разам з аперацыяй, якая яго патрабуе. Менавіта гэты запіс робіць наступнае змяненне даступным для агляду, а не эксперыментам.

Трымайце доступ да кансолі, пакуль рэдагуеце, бо юніт, які збаўляе пры запуску, цяжка адрамантаваць аддалена. Праверце перазапуск і поўную перазагрузку, перш чым назваць змяненне завершаным. Юніт, што перажыў перазапуск, можа ўсё роўна збавіць да ўздыму сеткі.

Поспех — гэта зразумелы жыццёвы цыкл з мінімальнымі паўнамоцтвамі, а не працэс, які выпадкова працуе пад не-каранёвым імем.

Падобныя артыкулы