diff options
| author | Ophestra Umiker <cat@ophivana.moe> | 2024-10-13 02:43:00 +0900 |
|---|---|---|
| committer | Ophestra Umiker <cat@ophivana.moe> | 2024-10-13 02:43:00 +0900 |
| commit | e4536b87ad5bc23096eab00f17ac55b7aad23996 (patch) | |
| tree | 332af06b19f9c8fc6695aa8b5d3d84c0f9d82ccd /internal/app/share.system.go | |
| parent | 65a5f8fb08421f8fb031d4e21a2c460d218616c6 (diff) | |
app: generate and replace passwd and group files
This ensures libc functions get correct user information.
Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
Diffstat (limited to 'internal/app/share.system.go')
| -rw-r--r-- | internal/app/share.system.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/internal/app/share.system.go b/internal/app/share.system.go new file mode 100644 index 00000000..1b17ca49 --- /dev/null +++ b/internal/app/share.system.go @@ -0,0 +1,43 @@ +package app + +import ( + "os" + "path" +) + +const ( + shell = "SHELL" +) + +// shareSystem queues various system-related actions +func (seal *appSeal) shareSystem() { + // look up shell + sh := "/bin/sh" + if s, ok := os.LookupEnv(shell); ok { + seal.sys.setEnv(shell, s) + sh = s + } + + // generate /etc/passwd + passwdPath := path.Join(seal.share, "passwd") + username := "chronos" + if seal.sys.Username != "" { + username = seal.sys.Username + seal.sys.setEnv("USER", seal.sys.Username) + } + homeDir := "/var/empty" + if seal.sys.HomeDir != "" { + homeDir = seal.sys.HomeDir + seal.sys.setEnv("HOME", seal.sys.HomeDir) + } + passwd := username + ":x:65534:65534:Fortify:" + homeDir + ":" + sh + "\n" + seal.sys.writeFile(passwdPath, []byte(passwd)) + + // write /etc/group + groupPath := path.Join(seal.share, "group") + seal.sys.writeFile(groupPath, []byte("fortify:x:65534:\n")) + + // bind /etc/passwd and /etc/group + seal.sys.bind(passwdPath, "/etc/passwd", true) + seal.sys.bind(groupPath, "/etc/group", true) +} |
