diff --git a/pkg/machine/ignition.go b/pkg/machine/ignition.go
index f8ba4c0f89..6d39fa69b3 100644
--- a/pkg/machine/ignition.go
+++ b/pkg/machine/ignition.go
@@ -95,7 +95,7 @@ func (ign *DynamicIgnition) GenerateIgnitionConfig() error {
 
 	ignStorage := Storage{
 		Directories: getDirs(ign.Name),
-		Files:       getFiles(ign.Name),
+		Files:       getFiles(ign.Name, ign.UID),
 		Links:       getLinks(ign.Name),
 	}
 
@@ -285,7 +285,7 @@ func getDirs(usrName string) []Directory {
 	return dirs
 }
 
-func getFiles(usrName string) []File {
+func getFiles(usrName string, uid int) []File {
 	files := make([]File, 0)
 
 	lingerExample := `[Unit]
@@ -307,7 +307,13 @@ machine_enabled=true
 	delegateConf := `[Service]
 Delegate=memory pids cpu io
 `
-	subUID := `%s:100000:1000000`
+	// Prevent subUID from clashing with actual UID
+	subUID := 100000
+	subUIDs := 1000000
+	if uid >= subUID && uid < (subUID+subUIDs) {
+		subUID = uid + 1
+	}
+	etcSubUID := fmt.Sprintf(`%s:%d:%d`, usrName, subUID, subUIDs)
 
 	// Add a fake systemd service to get the user socket rolling
 	files = append(files, File{
@@ -341,7 +347,6 @@ Delegate=memory pids cpu io
 			Mode: IntToPtr(0744),
 		},
 	})
-
 	// Set up /etc/subuid and /etc/subgid
 	for _, sub := range []string{"/etc/subuid", "/etc/subgid"} {
 		files = append(files, File{
@@ -354,7 +359,7 @@ Delegate=memory pids cpu io
 			FileEmbedded1: FileEmbedded1{
 				Append: nil,
 				Contents: Resource{
-					Source: EncodeDataURLPtr(fmt.Sprintf(subUID, usrName)),
+					Source: EncodeDataURLPtr(etcSubUID),
 				},
 				Mode: IntToPtr(0744),
 			},