devzone.org.ua/post/zapusk-routera-yggdrasil-bez-root.md
postscriptum 9c2826aed9 add dot
2026-01-31 05:54:49 +02:00

48 lines
No EOL
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Запуск роутера 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, бо мене тема пускання від рута давно параноїть і я просто вимикаю роутер, коли ним не користуюсь. UPD: [зробив](https://devzone.org.ua/post/zapusk-routera-mycelium-bez-root)._
_P.S. збирання програм від рута - це ще одна дурнувата звичка, через що (ймовірно) я колись вхопив невловимий малварь, який благополучно здох тільки разом зі старим сервером._