ipn, paths: ensure that the state directory for Windows has the correct perms

ProgramData has a permissive ACL. For us to safely store machine-wide
state information, we must set a more restrictive ACL on our state directory.
We set the ACL so that only talescaled's user (ie, LocalSystem) and the
Administrators group may access our directory.

We must include Administrators to ensure that logs continue to be easily
accessible; omitting that group would force users to use special tools to
log in interactively as LocalSystem, which is not ideal.

(Note that the ACL we apply matches the ACL that was used for LocalSystem's
AppData\Local).

There are two cases where we need to reset perms: One is during migration
from the old location to the new. The second case is for clean installations
where we are creating the file store for the first time.

Updates #2856

Signed-off-by: Aaron Klotz <aaron@tailscale.com>
This commit is contained in:
Aaron Klotz
2021-09-21 15:00:30 -06:00
parent b1a2abf41b
commit 9ebb5d4205
7 changed files with 175 additions and 4 deletions

View File

@ -61,3 +61,11 @@ func xdgDataHome() string {
}
return filepath.Join(os.Getenv("HOME"), ".local/share")
}
func ensureStateDirPerms(dirPath string) error {
// Unfortunately there are currently numerous tests that set up state files
// right off of /tmp, on which Chmod will of course fail. We should fix our
// test harnesses to not do that, at which point we can return an error.
os.Chmod(dirPath, 0700)
return nil
}