From e4536b87ad5bc23096eab00f17ac55b7aad23996 Mon Sep 17 00:00:00 2001 From: Ophestra Umiker Date: Sun, 13 Oct 2024 02:43:00 +0900 Subject: app: generate and replace passwd and group files This ensures libc functions get correct user information. Signed-off-by: Ophestra Umiker --- internal/app/share.system.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 internal/app/share.system.go (limited to 'internal/app/share.system.go') 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) +} -- cgit v1.3.1