Из коробки yggdrasil запускается от имени пользователя root, что нежелательно. Тем не менее, похоже, что CAP_NET_ADMIN - это все, что необходимо для запуска yggdrasil от имени непривилегированного пользователя.
В 6 простых шагов#
1: установить capabilities#
1
| $ sudo setcap CAP_NET_ADMIN+eip /usr/bin/yggdrasil
|
2: Создать непривилегированного пользователя с собственной группой#
1
| $ sudo useradd -c Yggdrasil -d / -M -r -U -s /sbin/nologin yggdrasil
|
3. Сделайте конфигурационный файл читабельным для пользователя yggdrasil#
1
2
3
4
| $ sudo chmod 0640 /etc/yggdrasil.conf
$ sudo chown root.yggdrasil /etc/yggdrasil.conf
$ sudo chmod 0750 /usr/bin/yggdrasil # not world readable
$ sudo chown root.yggdrasil /usr/bin/yggdrasil # user root; group yggdrasil
|
4. Установите user и rundir в systemd.service#
Добавьте следующие строки в раздел [Service]:
1
2
3
4
5
6
| [Service]
# See systemd.exec(5) for details
User=yggdrasil
Group=yggdrasil
RuntimeDirectory=yggdrasil
RuntimeDirectoryMode=0750
|
5. Установите socket администратора в yggdrasil.conf#
Если вы используете socket администратора, убедитесь, что его местоположение в /etc/yggdrasil.conf совпадает с RuntimeDirectory в (4):
1
2
3
4
5
6
7
| # Listen address for admin connections. Default is to listen for local
# connections either on TCP/9001 or a UNIX socket depending on your
# platform. Use this value for yggdrasilctl -endpoint=X. To disable
# the admin socket, use the value "none" instead.
AdminListen: unix:///run/yggdrasil/yggdrasil.sock
# Some distros still use /var/run:
# AdminListen: unix:///var/run/yggdrasil/yggdrasil.sock
|
6: Перезапустить эту чертову вещь#
1
2
| $ sudo systemctl daemon-reload # make sure systemd uses our new service file
$ sudo systemctl restart yggdrasil.service # actually restart
|
И это все!
Если все прошло хорошо, вы должны увидеть что-то вроде
1
2
3
4
5
6
7
8
9
10
11
| ● yggdrasil.service - yggdrasil
Loaded: loaded (/etc/systemd/system/yggdrasil.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-11-03 18:34:07 CEST; 50min ago
Main PID: 27421 (yggdrasil)
Tasks: 15 (limit: 4915)
Memory: 7.9M
CGroup: /system.slice/yggdrasil.service
└─27421 /usr/bin/yggdrasil -useconffile /etc/yggdrasil.conf
Nov 03 18:34:07 home yggdrasil[27421]: 2019/11/03 18:34:07 Listening for TCP on: [::]:$PORT
Nov 03 18:34:07 home yggdrasil[27421]: 2019/11/03 18:34:07 UNIX admin socket listening on /run/yggdrasil/yggdrasil.sock
|
при запуске systemctl status yggdrasil.service.
Смотрите также
Настройка capabilities
setcap (8)
capabilities (7)
Создание непривилегированного пользователя
Файловые права
yggdrasil.service
yggdrasil.conf
Перезапуск yggdrasil