diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-01-23 17:04:19 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-01-23 17:04:19 +0900 |
| commit | 134247b57d2ff93c7b70815158474d94bed1074b (patch) | |
| tree | ffbe509e339a521b3ba58cd9d89a335e18bef564 /cmd | |
| parent | b5bb7654da074dc92c354582d086b68d2d45024c (diff) | |
nix: configure target users via nixos
This makes patching home-manager no longer necessary.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/fuserdb/main.go | 69 | ||||
| -rw-r--r-- | cmd/fuserdb/payload.go | 64 |
2 files changed, 0 insertions, 133 deletions
diff --git a/cmd/fuserdb/main.go b/cmd/fuserdb/main.go deleted file mode 100644 index 2c3dd24e..00000000 --- a/cmd/fuserdb/main.go +++ /dev/null @@ -1,69 +0,0 @@ -package main - -import ( - "bytes" - "errors" - "flag" - "fmt" - "os" - "path" - "strconv" - - "git.gensokyo.uk/security/fortify/internal/fmsg" -) - -func main() { - fmsg.SetPrefix("fuserdb") - - const varEmpty = "/var/empty" - - out := flag.String("o", "userdb", "output directory") - homeDir := flag.String("d", varEmpty, "parent of home directories") - shell := flag.String("s", "/sbin/nologin", "absolute path to subordinate user shell") - flag.Parse() - - type user struct { - name string - fid int - } - - users := make([]user, len(flag.Args())) - for i, s := range flag.Args() { - f := bytes.SplitN([]byte(s), []byte{':'}, 2) - if len(f) != 2 { - fmsg.Fatalf("invalid entry at index %d", i) - } - users[i].name = string(f[0]) - if fid, err := strconv.Atoi(string(f[1])); err != nil { - fmsg.Fatal(err.Error()) - } else { - users[i].fid = fid - } - } - - if err := os.MkdirAll(*out, 0755); err != nil && !errors.Is(err, os.ErrExist) { - fmsg.Fatalf("cannot create output: %v", err) - } - - for _, u := range users { - fidString := strconv.Itoa(u.fid) - for aid := 0; aid < 10000; aid++ { - userName := fmt.Sprintf("u%d_a%d", u.fid, aid) - uid := 1000000 + u.fid*10000 + aid - us := strconv.Itoa(uid) - realName := fmt.Sprintf("Fortify subordinate user %d (%s)", aid, u.name) - var homeDirectory string - if *homeDir != varEmpty { - homeDirectory = path.Join(*homeDir, "u"+fidString, "a"+strconv.Itoa(aid)) - } else { - homeDirectory = varEmpty - } - - writeUser(userName, uid, us, realName, homeDirectory, *shell, *out) - writeGroup(userName, uid, us, nil, *out) - } - } - - fmsg.Printf("created %d entries", len(users)*2*10000) - fmsg.Exit(0) -} diff --git a/cmd/fuserdb/payload.go b/cmd/fuserdb/payload.go deleted file mode 100644 index dc8a0729..00000000 --- a/cmd/fuserdb/payload.go +++ /dev/null @@ -1,64 +0,0 @@ -package main - -import ( - "encoding/json" - "os" - "path" - - "git.gensokyo.uk/security/fortify/internal/fmsg" -) - -type payloadU struct { - UserName string `json:"userName"` - Uid int `json:"uid"` - Gid int `json:"gid"` - MemberOf []string `json:"memberOf,omitempty"` - RealName string `json:"realName"` - HomeDirectory string `json:"homeDirectory"` - Shell string `json:"shell"` -} - -func writeUser(userName string, uid int, us string, realName, homeDirectory, shell string, out string) { - userFileName := userName + ".user" - if f, err := os.OpenFile(path.Join(out, userFileName), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644); err != nil { - fmsg.Fatalf("cannot create %s: %v", userName, err) - } else if err = json.NewEncoder(f).Encode(&payloadU{ - UserName: userName, - Uid: uid, - Gid: uid, - RealName: realName, - HomeDirectory: homeDirectory, - Shell: shell, - }); err != nil { - fmsg.Fatalf("cannot serialise %s: %v", userName, err) - } else if err = f.Close(); err != nil { - fmsg.Printf("cannot close %s: %v", userName, err) - } - if err := os.Symlink(userFileName, path.Join(out, us+".user")); err != nil { - fmsg.Fatalf("cannot link %s: %v", userName, err) - } -} - -type payloadG struct { - GroupName string `json:"groupName"` - Gid int `json:"gid"` - Members []string `json:"members,omitempty"` -} - -func writeGroup(groupName string, gid int, gs string, members []string, out string) { - groupFileName := groupName + ".group" - if f, err := os.OpenFile(path.Join(out, groupFileName), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644); err != nil { - fmsg.Fatalf("cannot create %s: %v", groupName, err) - } else if err = json.NewEncoder(f).Encode(&payloadG{ - GroupName: groupName, - Gid: gid, - Members: members, - }); err != nil { - fmsg.Fatalf("cannot serialise %s: %v", groupName, err) - } else if err = f.Close(); err != nil { - fmsg.Printf("cannot close %s: %v", groupName, err) - } - if err := os.Symlink(groupFileName, path.Join(out, gs+".group")); err != nil { - fmsg.Fatalf("cannot link %s: %v", groupName, err) - } -} |
