diff --git a/package/gluon-radvd/files/etc/init.d/gluon-radvd b/package/gluon-radvd/files/etc/init.d/gluon-radvd
index 4064439bdeb19cb114ece6d3624dee6ad100d480..2cfe09800768f6ba53e0a625a21e25b4fd0adb7f 100755
--- a/package/gluon-radvd/files/etc/init.d/gluon-radvd
+++ b/package/gluon-radvd/files/etc/init.d/gluon-radvd
@@ -4,9 +4,13 @@ START=50
 
 SERVICE_USE_PID=1
 SERVICE_NAME=gluon-radvd
+SERVICE_PID_DIR=/var/run/gluon-radvd
+SERVICE_PID_FILE="$SERVICE_PID_DIR"/gluon-radvd.pid
 
 start() {
-	service_start /usr/sbin/radvd -C /lib/gluon/radvd/radvd.conf -m stderr_syslog -p /var/run/gluon-radvd.pid
+	mkdir -p "$SERVICE_PID_DIR"
+	chown gluon-radvd "$SERVICE_PID_DIR"
+	service_start /usr/sbin/radvd -C /lib/gluon/radvd/radvd.conf -m stderr_syslog -u gluon-radvd -p "$SERVICE_PID_FILE"
 }
 
 stop() {
diff --git a/package/gluon-radvd/files/lib/gluon/upgrade/radvd/invariant/10-radvd-user b/package/gluon-radvd/files/lib/gluon/upgrade/radvd/invariant/10-radvd-user
new file mode 100755
index 0000000000000000000000000000000000000000..baa0c9d2eaaab47b3224dbdad1c26122d5125a2b
--- /dev/null
+++ b/package/gluon-radvd/files/lib/gluon/upgrade/radvd/invariant/10-radvd-user
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+. /lib/gluon/functions/users.sh
+
+add_user gluon-radvd 801