diff options
| author | Ophestra <cat@gensokyo.uk> | 2024-12-28 11:12:35 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2024-12-28 11:12:35 +0900 |
| commit | 0107620d8c174dcf9237c16d4b4b7b2f6955a214 (patch) | |
| tree | 3b082eafad73eaa971a59baf762260c89917831b /internal/app/share.system.go | |
| parent | fc26659ea11fea8f41fc2551d6d39d30fe3a49e7 (diff) | |
app: merge share methods
This significantly increases readability and makes order of ops more obvious.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/app/share.system.go')
| -rw-r--r-- | internal/app/share.system.go | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/internal/app/share.system.go b/internal/app/share.system.go deleted file mode 100644 index 2e65ac69..00000000 --- a/internal/app/share.system.go +++ /dev/null @@ -1,74 +0,0 @@ -package app - -import ( - "path" - - "git.gensokyo.uk/security/fortify/acl" - "git.gensokyo.uk/security/fortify/internal/linux" - "git.gensokyo.uk/security/fortify/internal/system" -) - -const ( - shell = "SHELL" -) - -// shareSystem queues various system-related actions -func (seal *appSeal) shareSystem() { - // ensure Share (e.g. `/tmp/fortify.%d`) - // acl is unnecessary as this directory is world executable - seal.sys.Ensure(seal.SharePath, 0711) - - // ensure process-specific share (e.g. `/tmp/fortify.%d/%s`) - // acl is unnecessary as this directory is world executable - seal.share = path.Join(seal.SharePath, seal.id) - seal.sys.Ephemeral(system.Process, seal.share, 0711) - - // ensure child tmpdir parent directory (e.g. `/tmp/fortify.%d/tmpdir`) - targetTmpdirParent := path.Join(seal.SharePath, "tmpdir") - seal.sys.Ensure(targetTmpdirParent, 0700) - seal.sys.UpdatePermType(system.User, targetTmpdirParent, acl.Execute) - - // ensure child tmpdir (e.g. `/tmp/fortify.%d/tmpdir/%d`) - targetTmpdir := path.Join(targetTmpdirParent, seal.sys.user.as) - seal.sys.Ensure(targetTmpdir, 01700) - seal.sys.UpdatePermType(system.User, targetTmpdir, acl.Read, acl.Write, acl.Execute) - seal.sys.bwrap.Bind(targetTmpdir, "/tmp", false, true) -} - -func (seal *appSeal) sharePasswd(os linux.System) { - // look up shell - sh := "/bin/sh" - if s, ok := os.LookupEnv(shell); ok { - seal.sys.bwrap.SetEnv[shell] = s - sh = s - } - - // generate /etc/passwd - passwdPath := path.Join(seal.share, "passwd") - username := "chronos" - if seal.sys.user.username != "" { - username = seal.sys.user.username - } - homeDir := "/var/empty" - if seal.sys.user.home != "" { - homeDir = seal.sys.user.home - } - - // bind home directory - seal.sys.bwrap.Bind(seal.sys.user.data, homeDir, false, true) - seal.sys.bwrap.Chdir = homeDir - - seal.sys.bwrap.SetEnv["USER"] = username - seal.sys.bwrap.SetEnv["HOME"] = homeDir - - passwd := username + ":x:" + seal.sys.mappedIDString + ":" + seal.sys.mappedIDString + ":Fortify:" + homeDir + ":" + sh + "\n" - seal.sys.Write(passwdPath, passwd) - - // write /etc/group - groupPath := path.Join(seal.share, "group") - seal.sys.Write(groupPath, "fortify:x:"+seal.sys.mappedIDString+":\n") - - // bind /etc/passwd and /etc/group - seal.sys.bwrap.Bind(passwdPath, "/etc/passwd") - seal.sys.bwrap.Bind(groupPath, "/etc/group") -} |
