# Запуск роутера Yggdrasil без root Якось, на новому сервері Debian, було передвстановлено Yggdrasil з репозиторію. Оскільки сам я збираю роутер з сорсу і створюю для нього самопальний сервіс для root, тоді я випадково повалив собі конект давши права 0400 на файл конфігурації створений від рута. Поліз розбиратись і помітив, що користувач там yggdrasil: ``` /usr/lib/systemd/system/yggdrasil.service [Unit] Description=yggdrasil Wants=network-online.target After=network-online.target [Service] User=yggdrasil Group=yggdrasil ProtectHome=true ProtectSystem=strict NoNewPrivileges=true RuntimeDirectory=yggdrasil ReadWritePaths=/var/run/yggdrasil /run/yggdrasil SyslogIdentifier=yggdrasil CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE ExecStartPre=+-/sbin/modprobe tun ExecStart=/usr/sbin/yggdrasil -useconffile /etc/yggdrasil/yggdrasil.conf ExecReload=/bin/kill -HUP $MAINPID Restart=always TimeoutStopSec=5 [Install] WantedBy=multi-user.target ``` => https://github.com/yggdrasil-network/yggdrasil-go/blob/develop/contrib/systemd/yggdrasil.service.debian актуальний оригінал сервісу По суті, користувач root - потрібен роутерові лише для створення інтерфейсу tun. І як бачимо, надання привілеїв CAP_NET_ADMIN і CAP_NET_BIND_SERVICE - цілком вирішує цю проблему, хоча й не без недоліків: => https://github.com/yggdrasil-network/yggdrasil-go/issues/881#issuecomment-1010040413 Для запобігання помилки прав доступу до розташування /var/run, також потрібно змінити стандартну адресу сокета, додавши згідно шляхів systemd теку yggdrasil: ``` /etc/yggdrasil/yggdrasil.conf AdminListen: unix:///var/run/yggdrasil/yggdrasil.sock ``` => https://github.com/yggdrasil-network/yggdrasil-go/issues/1285#issuecomment-3418828172 джерело --- * Думаю зробити те само для Mycelium, бо мене тема пускання від рута давно параноїть і я просто вимикаю роутер, коли ним не користуюсь. * Збирання програм від рута - це ще одна дурнувата звичка, через що (ймовірно) я колись вхопив невловимий малварь, який благополучно здох тільки разом зі старим сервером.