// Package securefile writes credential-bearing files with owner-only access. package securefile import ( "io" "os" ) // WriteFile writes data to path and enforces mode 0600 even when path already // exists with broader permissions. func WriteFile(path string, data []byte) (err error) { f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0o600) if err != nil { return err } defer func() { if closeErr := f.Close(); err == nil { err = closeErr } }() if err := f.Chmod(0o600); err != nil { return err } if err := f.Truncate(0); err != nil { return err } if _, err := f.Seek(0, 0); err != nil { return err } if n, err := f.Write(data); err != nil { return err } else if n != len(data) { return io.ErrShortWrite } return nil }