aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmd
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-01-23 17:04:19 +0900
committerOphestra <cat@gensokyo.uk>2025-01-23 17:04:19 +0900
commit134247b57d2ff93c7b70815158474d94bed1074b (patch)
treeffbe509e339a521b3ba58cd9d89a335e18bef564 /cmd
parentb5bb7654da074dc92c354582d086b68d2d45024c (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.go69
-rw-r--r--cmd/fuserdb/payload.go64
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)
- }
-}