Сіздің 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, қайта қосылғаннан кейінгі маршрут өзгерістері үшін қажет» — келесі адамның рұқсатты қайта кеңейтуін болдырмауға жетеді.
Содан кейін әрбір жаңартудан кейін тиімді жиынды қайта оқыңыз. Жеткізушілер мүмкіндіктер қосады, бейнелер әдепкі мәндерді өзгертеді, ал былтыр қажет емес мүмкіндік ешкім байқамай тірекке айналуы мүмкін.