diff --git a/packaging/installer/functions.sh b/packaging/installer/functions.sh
index d611343a2b..9989e3b426 100644
--- a/packaging/installer/functions.sh
+++ b/packaging/installer/functions.sh
@@ -1065,6 +1065,8 @@ portable_add_user() {
       run dscl . create /Users/"${username}" IsHidden 1
       return 0
     fi
+  elif command -v synouser 1> /dev/null 2>&1; then
+    run synouser -add "${username}" "" "netdata agent" 0 "" 0 && return 0
   fi
 
   warning "Failed to add ${username} user account!"
@@ -1092,6 +1094,8 @@ portable_add_group() {
     run addgroup "${groupname}" && return 0
   elif command -v dseditgroup 1> /dev/null 2>&1; then
     dseditgroup -o create "${groupname}" && return 0
+  elif command -v synogroup 1> /dev/null 2>&1; then
+    run synogroup --add "${groupname}" && return 0
   fi
 
   warning >&2 "Failed to add ${groupname} user group !"
@@ -1127,6 +1131,21 @@ portable_add_user_to_group() {
       run addgroup "${username}" "${groupname}" && return 0
     elif command -v dseditgroup 1> /dev/null 2>&1; then
       dseditgroup -u "${username}" "${groupname}" && return 0
+    elif command -v synogroup 1> /dev/null 2>&1; then
+      # Get current members of the group
+      current_members_list=$(synogroup --get "${groupname}" | grep '^[0-9]')
+      current_members=$(echo "${current_members_list}" | grep -oP '\[\K[^\]]+' | tr '\n' ' ' | sed 's/ $//')
+
+      # Append username to the list
+      if [ -n "$current_members" ]; then
+        new_members="${current_members} ${username}"
+      else
+        new_members="${username}"
+      fi
+
+      # Set the member list
+      # shellcheck disable=SC2086
+      run synogroup --member "${groupname}" ${new_members} && return 0
     fi
 
     warning >&2 "Failed to add user ${username} to group ${groupname}!"
diff --git a/packaging/installer/netdata-uninstaller.sh b/packaging/installer/netdata-uninstaller.sh
index 43ffb7406f..47cd78bca6 100755
--- a/packaging/installer/netdata-uninstaller.sh
+++ b/packaging/installer/netdata-uninstaller.sh
@@ -452,6 +452,16 @@ portable_del_group() {
     fi
   fi
 
+  # DMS ( Synology )
+  if command -v synogroup 1> /dev/null 2>&1; then
+    if get_group "${groupname}" > /dev/null 2>&1; then
+      run synogroup --del "${groupname}" && return 0
+    else
+      info "Could not find group ${groupname}, nothing to do"
+      return 0
+    fi;
+  fi
+
   error "Group ${groupname} was not automatically removed, you might have to remove it manually"
   return 1
 }
@@ -515,6 +525,11 @@ portable_del_user() {
     run sysadminctl -deleteUser "${username}" && return 0
   fi
 
+  # DMS ( Synology )
+  if command -v synouser 1> /dev/null 2>&1; then
+    run synouser --del "${username}" && return 0
+  fi
+
   error "User ${username} could not be deleted from system, you might have to remove it manually"
   return 1
 }
@@ -555,6 +570,17 @@ portable_del_user_from_group() {
     run dseditgroup -o delete -u "${username}" "${groupname}" && return 0
   fi
 
+  # DSM ( Synology )
+  if command -v synogroup 1> /dev/null 2>&1; then
+    # Get current members of the group removing username
+    current_members_list=$(synogroup --get "${groupname}" | grep -v "\[${username}\]" | grep '^[0-9]' )
+    current_members=$(echo "${current_members_list}" | grep -oP '\[\K[^\]]+' | tr '\n' ' ' | sed 's/ $//')
+
+    # Set the new list of members
+    # shellcheck disable=SC2086
+    run synogroup --member "${groupname}" ${current_members} && return 0
+  fi
+
   error "Failed to delete user ${username} from group ${groupname} !"
   return 1
 }