-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update ProgramData Directory permissions #32117
base: main
Are you sure you want to change the base?
Changes from all commits
6c06941
0a02579
f67d1fe
98dafd5
1306c79
e21c797
544d53c
49d9900
efd698a
45f0b0d
148667f
81cb806
2fc6d13
eb6b7ae
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Each section from every release note are combined when the | ||
# CHANGELOG.rst is rendered. So the text needs to be worded so that | ||
# it does not depend on any information only available in another | ||
# section. This may mean repeating some details, but each section | ||
# must be readable independently of the other. | ||
# | ||
# Each section note must be formatted as reStructuredText. | ||
--- | ||
security: | ||
- | | ||
Removes Datadog user's full control of the Datadog data directory on windows. |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -446,6 +446,103 @@ private void GrantAgentAccessPermissions() | |||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
private void AddDatadogUserToDataFolder() | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
var dataDirectory = _session.Property("APPLICATIONDATADIRECTORY"); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
FileSystemSecurity fileSystemSecurity; | ||||||||||||||||||||||||||||||||||||||||||||||||||
try | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
fileSystemSecurity = _fileSystemServices.GetAccessControl(dataDirectory, AccessControlSections.All); | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
catch (Exception e) | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
_session.Log($"Failed to get ACLs on {dataDirectory}: {e}"); | ||||||||||||||||||||||||||||||||||||||||||||||||||
throw; | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
// ddagentuser Read and execute permissions, enable child inheritance of this ACE | ||||||||||||||||||||||||||||||||||||||||||||||||||
fileSystemSecurity.AddAccessRule(new FileSystemAccessRule( | ||||||||||||||||||||||||||||||||||||||||||||||||||
_ddAgentUserSID, | ||||||||||||||||||||||||||||||||||||||||||||||||||
FileSystemRights.ReadAndExecute | FileSystemRights.Synchronize, | ||||||||||||||||||||||||||||||||||||||||||||||||||
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, | ||||||||||||||||||||||||||||||||||||||||||||||||||
PropagationFlags.None, | ||||||||||||||||||||||||||||||||||||||||||||||||||
AccessControlType.Allow)); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// datadog write on this folder | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||
fileSystemSecurity.AddAccessRule(new FileSystemAccessRule( | ||||||||||||||||||||||||||||||||||||||||||||||||||
_ddAgentUserSID, | ||||||||||||||||||||||||||||||||||||||||||||||||||
FileSystemRights.WriteData | FileSystemRights.AppendData | FileSystemRights.WriteAttributes | FileSystemRights.WriteExtendedAttributes | FileSystemRights.Synchronize, | ||||||||||||||||||||||||||||||||||||||||||||||||||
InheritanceFlags.None, | ||||||||||||||||||||||||||||||||||||||||||||||||||
PropagationFlags.None, | ||||||||||||||||||||||||||||||||||||||||||||||||||
AccessControlType.Allow)); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// add full control to CREATOR OWNER | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||
fileSystemSecurity.AddAccessRule(new FileSystemAccessRule( | ||||||||||||||||||||||||||||||||||||||||||||||||||
new SecurityIdentifier(WellKnownSidType.CreatorOwnerSid, null), | ||||||||||||||||||||||||||||||||||||||||||||||||||
FileSystemRights.FullControl, | ||||||||||||||||||||||||||||||||||||||||||||||||||
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, | ||||||||||||||||||||||||||||||||||||||||||||||||||
PropagationFlags.InheritOnly, | ||||||||||||||||||||||||||||||||||||||||||||||||||
AccessControlType.Allow)); | ||||||||||||||||||||||||||||||||||||||||||||||||||
try | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
UpdateAndLogAccessControl(dataDirectory, fileSystemSecurity); | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
catch (Exception e) | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
_session.Log($"Failed to set ACLs on {dataDirectory}: {e}"); | ||||||||||||||||||||||||||||||||||||||||||||||||||
throw; | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
private void RemoveDatadogUserFromDataFolder(SecurityIdentifier sid) | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I wonder if we should set it to SYSTEM/Admin only instead of removing agent user ACE's ? |
||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
var dataDirectory = _session.Property("APPLICATIONDATADIRECTORY"); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
FileSystemSecurity fileSystemSecurity; | ||||||||||||||||||||||||||||||||||||||||||||||||||
try | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
fileSystemSecurity = _fileSystemServices.GetAccessControl(dataDirectory, AccessControlSections.All); | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
catch (Exception e) | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
_session.Log($"Failed to get ACLs on {dataDirectory}: {e}"); | ||||||||||||||||||||||||||||||||||||||||||||||||||
throw; | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// Remove ddagentuser from data folder | ||||||||||||||||||||||||||||||||||||||||||||||||||
fileSystemSecurity.RemoveAccessRule(new FileSystemAccessRule( | ||||||||||||||||||||||||||||||||||||||||||||||||||
sid, | ||||||||||||||||||||||||||||||||||||||||||||||||||
FileSystemRights.ReadAndExecute | FileSystemRights.Synchronize, | ||||||||||||||||||||||||||||||||||||||||||||||||||
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, | ||||||||||||||||||||||||||||||||||||||||||||||||||
PropagationFlags.None, | ||||||||||||||||||||||||||||||||||||||||||||||||||
AccessControlType.Allow)); | ||||||||||||||||||||||||||||||||||||||||||||||||||
fileSystemSecurity.RemoveAccessRule(new FileSystemAccessRule( | ||||||||||||||||||||||||||||||||||||||||||||||||||
sid, | ||||||||||||||||||||||||||||||||||||||||||||||||||
FileSystemRights.Write, | ||||||||||||||||||||||||||||||||||||||||||||||||||
InheritanceFlags.None, | ||||||||||||||||||||||||||||||||||||||||||||||||||
PropagationFlags.None, | ||||||||||||||||||||||||||||||||||||||||||||||||||
AccessControlType.Allow)); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// remove full control to CREATOR OWNER | ||||||||||||||||||||||||||||||||||||||||||||||||||
fileSystemSecurity.RemoveAccessRule(new FileSystemAccessRule( | ||||||||||||||||||||||||||||||||||||||||||||||||||
new SecurityIdentifier(WellKnownSidType.CreatorOwnerSid, null), | ||||||||||||||||||||||||||||||||||||||||||||||||||
FileSystemRights.FullControl, | ||||||||||||||||||||||||||||||||||||||||||||||||||
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, | ||||||||||||||||||||||||||||||||||||||||||||||||||
PropagationFlags.InheritOnly, | ||||||||||||||||||||||||||||||||||||||||||||||||||
AccessControlType.Allow)); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
try | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
UpdateAndLogAccessControl(dataDirectory, fileSystemSecurity); | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
catch (Exception e) | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
_session.Log($"Failed to set ACLs on {dataDirectory}: {e}"); | ||||||||||||||||||||||||||||||||||||||||||||||||||
throw; | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
private void ConfigureFilePermissions() | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
try | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -471,6 +568,7 @@ private void ConfigureFilePermissions() | |||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
if (_ddAgentUserSID != new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null)) | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
AddDatadogUserToDataFolder(); | ||||||||||||||||||||||||||||||||||||||||||||||||||
GrantAgentAccessPermissions(); | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -579,14 +677,19 @@ public static ActionResult ConfigureUserRollback(Session session) | |||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
private List<string> PathsWithAgentAccess() | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
return new List<string> | ||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||
// agent needs to be able to write logs/ | ||||||||||||||||||||||||||||||||||||||||||||||||||
// agent GUI needs to be able to edit config | ||||||||||||||||||||||||||||||||||||||||||||||||||
// agent needs to be able to write to run/ | ||||||||||||||||||||||||||||||||||||||||||||||||||
// agent needs to be able to create auth_token | ||||||||||||||||||||||||||||||||||||||||||||||||||
_session.Property("APPLICATIONDATADIRECTORY"), | ||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||
var configRoot = _session.Property("APPLICATIONDATADIRECTORY"); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
return new List<string> { | ||||||||||||||||||||||||||||||||||||||||||||||||||
Path.Combine(configRoot, "conf.d"), | ||||||||||||||||||||||||||||||||||||||||||||||||||
Path.Combine(configRoot, "checks.d"), | ||||||||||||||||||||||||||||||||||||||||||||||||||
Path.Combine(configRoot, "run"), | ||||||||||||||||||||||||||||||||||||||||||||||||||
Path.Combine(configRoot, "logs"), | ||||||||||||||||||||||||||||||||||||||||||||||||||
Path.Combine(configRoot, "datadog.yaml"), | ||||||||||||||||||||||||||||||||||||||||||||||||||
Path.Combine(configRoot, "system-probe.yaml"), | ||||||||||||||||||||||||||||||||||||||||||||||||||
Path.Combine(configRoot, "auth_token"), | ||||||||||||||||||||||||||||||||||||||||||||||||||
Path.Combine(configRoot, "install_info"), | ||||||||||||||||||||||||||||||||||||||||||||||||||
Path.Combine(configRoot, "python-cache"), | ||||||||||||||||||||||||||||||||||||||||||||||||||
}; ; | ||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+682
to
+692
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I do like this better. |
||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
/// <summary> | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -679,6 +782,8 @@ public ActionResult UninstallUser() | |||||||||||||||||||||||||||||||||||||||||||||||||
_session.Log($"Failed to remove {ddAgentUserName} from {filePath}: {e}"); | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
//remove access to root folder | ||||||||||||||||||||||||||||||||||||||||||||||||||
RemoveDatadogUserFromDataFolder(securityIdentifier); | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// We intentionally do NOT delete the ddagentuser account. | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could create our own flag in
common/ace.go
to make it less confusing