mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2026-05-21 21:36:30 +03:00
Currently, all init scripts, except for systemd, will generate a config file with default permissions, which is usually `rw-r--r--`. This is bad, because the config contains a private key. The systemd service does `chmod 640` after creating the config, which is much better than just leaving it readable for everyone forever, but there is still a slight chance that some malicious program might steal the private key during the time window between key creation and chmod. For this reason, in this pull request I use `umask 037`, so the config won't have read permission for others in the first place. Note that I have only tested openrc and systemd services. Also, I'm not sure what to do with the contrib/msi/build-msi.sh script, which creates a bat file that generates a config. I don't know anything about file permissions on windows, however, it seems that the bat file generates the config into a user's personal directory, so maybe it's already somewhat fine.
78 lines
1.1 KiB
Bash
Executable File
78 lines
1.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
CONFFILE="/etc/yggdrasil.conf"
|
|
|
|
genconf() {
|
|
(umask 037 && /usr/bin/yggdrasil -genconf > "$1")
|
|
return $?
|
|
}
|
|
|
|
probetun() {
|
|
modprobe tun
|
|
return $?
|
|
}
|
|
|
|
start() {
|
|
if [ ! -f "$CONFFILE" ]; then
|
|
printf 'Generating configuration file: '
|
|
if genconf "$CONFFILE"; then
|
|
echo "OK"
|
|
else
|
|
echo "FAIL"
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
if [ ! -e /dev/net/tun ]; then
|
|
printf 'Inserting TUN module: '
|
|
if probetun; then
|
|
echo "OK"
|
|
else
|
|
echo "FAIL"
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
printf 'Starting yggdrasil: '
|
|
if start-stop-daemon -S -q -b -x /usr/bin/yggdrasil \
|
|
-- -useconffile "$CONFFILE"; then
|
|
echo "OK"
|
|
else
|
|
echo "FAIL"
|
|
fi
|
|
}
|
|
|
|
stop() {
|
|
printf "Stopping yggdrasil: "
|
|
if start-stop-daemon -K -q -x /usr/bin/yggdrasil; then
|
|
echo "OK"
|
|
else
|
|
echo "FAIL"
|
|
fi
|
|
}
|
|
|
|
reload() {
|
|
printf "Reloading yggdrasil: "
|
|
if start-stop-daemon -K -q -s HUP -x /usr/bin/yggdrasil; then
|
|
echo "OK"
|
|
else
|
|
echo "FAIL"
|
|
start
|
|
fi
|
|
}
|
|
|
|
restart() {
|
|
stop
|
|
start
|
|
}
|
|
|
|
case "$1" in
|
|
start|stop|restart|reload)
|
|
"$1";;
|
|
*)
|
|
echo "Usage: $0 {start|stop|restart|reload}"
|
|
exit 1
|
|
esac
|
|
|
|
exit 0
|