aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/app/share.system.go
diff options
context:
space:
mode:
authorOphestra Umiker <cat@ophivana.moe>2024-10-13 02:43:00 +0900
committerOphestra Umiker <cat@ophivana.moe>2024-10-13 02:43:00 +0900
commite4536b87ad5bc23096eab00f17ac55b7aad23996 (patch)
tree332af06b19f9c8fc6695aa8b5d3d84c0f9d82ccd /internal/app/share.system.go
parent65a5f8fb08421f8fb031d4e21a2c460d218616c6 (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.go43
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)
+}