Сиздин VPN процессүңүзгө кайсы Linux мүмкүнчүлүктөрү керек?
Интерфейсти жөндөө, маршруттар, түзмөккө жетүү жана кадимки сокеттер өзүнчө артыкчылыктар. CAP_NET_ADMIN берүүдөн мурун ийгиликсиз болгон операцияны атаңыз.
VPN демондого артыкчылыктуу тармактык операциялар керек, бирок кадимки колдонмолор чыгуучу сокеттерди эч кандай артыкчылыксыз ачышат. Так ошол боштуктан мүмкүнчүлүк каталарынын көбү башталат: бирөө уруксат катасын көрүп, бүт топтомду берет, ал эми кызмат кийин эч ким түшүндүрө албаган себептер менен иштейт. Төмөнкү сереп ийгиликсиз болгон операциядан башталат, аны бир ыйгарым укукка байланыштырат, андан кийин процесс чындыгында иштеген контекстти текшерет. Чексиз root катары иштөө айрым жайгаштыруулар үчүн туура жооп, бирок бул демейки маани эмес, чечим болушу керек.
Ийгиликсиз болгон операциядан баштаңыз
Окуу куралын окуудан мурун катаны окуңуз. Интерфейсти өзгөртүүдөгү «операцияга уруксат жок», түзмөк түйүнүн ачуудан баш тартуу жана төмөн портко байлоо ийгиликсиздиги — ар кандай уруксат талап кылган үч башка маселе. Эгер процесс башталып, биринчи маршрут өзгөрүүсүндө гана ийгиликсиз болсо, бул интерфейстин түзүлүшү буга чейин ийгиликтүү болгонун билдирет, бул жоопту бир кыйла куушурат.
Кызмат токтотулган абалда ийгиликсиздикти кайталаңыз, андан кийин ишке ашыруу уруксат берсе, аны ошол эле колдонуучунун астында алдыңкы планда баштаңыз. Көрүп турган катаңыз болжолдоого туура келген журнал сабынан артык, ал мүмкүнчүлүк маселеси менен SELinux же AppArmor баш тартуусунун айырмасын айкын кылат.
Ар бир операцияны бир ыйгарым укукка байланыштырыңыз
Таблица — баштапкы карта, ишке ашыруу документтеринин ордун баспайт:
| Operation | Usual authority | Watch for |
|---|---|---|
| Create or configure tun/tap | CAP_NET_ADMIN in the relevant namespace | Creating the device and opening it are separate steps |
| Add routes, rules, firewall entries | CAP_NET_ADMIN | Same capability, different namespace than you think |
| Open /dev/net/tun | Device permissions, not a capability | Group membership or a udev rule may be enough |
| Raw sockets | CAP_NET_RAW | Needed by some user-space tunnel implementations |
| Bind a port below 1024 | CAP_NET_BIND_SERVICE | Irrelevant for most modern tunnel ports |
Ошол таблицадагы эки сап — адамдар алмаштырып жиберген саптар. /dev/net/tun ачуу — файл уруксаты маселеси; ачкан нерсеңизди конфигурациялоону өзөккө суроо — мүмкүнчүлүк маселеси. CAP_NET_ADMIN берүү кызмат колдонуучуңуз окуй албаган түзмөк түйүнүн оңдобойт, ал эми түйүндү оңдоо сизге маршрут ыйгарым укугун бербейт. Экөөнү тең өзгөртүүдөн мурун экөөнү тең текшериңиз.
Өзөктөгү WireGuard менен колдонуучу мейкиндигиндеги туннель программаларынын да талаптары бирдей эмес. Өзөк модулунун жолу бар интерфейсти netlink аркылуу конфигурациялайт, ал эми колдонуучу мейкиндигиндеги ишке ашырууга түзмөк да, айрым ташуулар үчүн чийки сокеттер да керек болушу мүмкүн.
Контекстти окуңуз: кызмат, контейнер же shell
Хосттун тармактык ат мейкиндигиндеги мүмкүнчүлүк атайын обочолонгон стектеги ошол эле операциядан алда канча көп таасир этиши мүмкүн. Контейнерлерди иштетүү чөйрөсү адатта кыскартылган чектер топтому менен башталат; хосттун тармагын бөлүшкөн контейнерге NET_ADMIN кошуу өзүнүн тармактык ат мейкиндиги бар жана хосттун mount'тары жок контейнерге кошуудан алда канча чоң уруксат.
systemd бирдиктери үчүн бирдик файлы айткандай көрүнгөндү эмес, чындыгында колдонулганды окуңуз: systemctl show -p CapabilityBoundingSet -p AmbientCapabilities натыйжалуу маанилерди билдирет, алар унутулган drop-in тарабынан коюлган болушу мүмкүн. Натыйжалуу маанини сураңыз, эч качан ниеттелгенди эмес. Ambient мүмкүнчүлүктөр маанилүү, анткени root эмес кызмат аларсыз exec учурунда мүмкүнчүлүктөрүн жоготот.
Пакеттин же образдын колдоого алынган жөндөөсүн негиз кылып алыңыз. Башка окуу куралы аларды башка курал үчүн тизмеледи деп чийки сокет уруксаттарын же артыкчылыктуу режимди кошпоңуз; бул ой жүгүртүү эч нерсе бербейт жана сиз төлөгөн обочолонууну жоготот. Күмөн санасаңыз, эч нерсе бербеңиз жана керектүү так операция үчүн ишке ашыруу жазууларын окуңуз.
Артыкчылыктар түшкөндөн кийин эмне болорун байкаңыз
Көптөгөн демондор артыкчылык менен башталып, интерфейсти конфигурациялашат, андан кийин артыкчылыгы жок колдонуучуга өтүп, туннелди сактап калышат. Ошол учурдан тартып процесс маршрут кошо албайт, firewall эрежесин кайра жаза албайт же жаңы артыкчылыктуу түзмөк ача албайт, бул кайра туташуу так ушундайды талап кылганга чейин кадимки абал. Кийинки файл окуу жана hook иштетүү ошол эле себептен ийгиликсиз болушу мүмкүн.
Биринчи секундду эмес, бүт жашоо циклин сынаңыз: баштоо, жаңыртуу же кайра туташуу жана токтоткондо тазалоо. Интерфейстин биринчи ийгиликтүү түзүлүшү кийинки ар бир артыкчылыктуу операциянын иштей берерин далилдебейт, ал эми ийгиликсиздик адатта өндүрүштө бир нече сааттан кийин пайда болот.
Туннелди колдонуучу алмашуу учурунда ачык кармаган ишке ашыруулар муну адатта туннелди жана ачкычтарды сактоо параметрлери менен айкалыштырышат. systemd тарабындагы барабар суроо — бирдиктин мүмкүнчүлүктөр топтому сиз конфигурациялаган колдонуучу алмашуусунан өтөбү.
Берилген уруксатты жана анын себебин жазып коюңуз
Так уруксатты, ал мүмкүн кылган операцияны жана ал оңдогон катаны жазыңыз. Жайгаштыруу жазууларындагы бир сап — «бирдиктин тармактык ат мейкиндигиндеги CAP_NET_ADMIN, кайра туташкандан кийинки маршрут өзгөрүүлөрү үчүн керек» — кийинки адамдын уруксатты кайра кеңейтүүсүнө жол бербейт.
Андан кийин ар бир жаңыртуудан кийин натыйжалуу топтомду кайра окуңуз. Жеткирүүчүлөр функцияларды кошушат, образдар демейки маанилерди өзгөртөт, ал эми былтыр керексиз болгон мүмкүнчүлүк эч ким байкабастан таяныч болуп калышы мүмкүн.