Tag: acl

更改文件的ACL以允许每个人的完全访问权限

如何将文件所有者更改为Everyone并允许Everyone对象Full Access ? 有没有可用的API? 我必须使用P / Invoke吗? 我到处搜索,但找不到任何可以做到这一点。

通过ACL保护注册表项以删除对非管理员的所有访问权限

我正在尝试使用必须在客户端计算机上访问的一些重要信息来锁定注册表项,我不是非管理员可以访问此密钥。 如果您是管理员,您将能够比我在密钥中存储的更多损害。 我目前要做的是: //Allow access only to administrators and deny all rights to everyone else. System.Security.AccessControl.RegistrySecurity acl = new System.Security.AccessControl.RegistrySecurity(); acl.AddAccessRule( new System.Security.AccessControl.RegistryAccessRule( “Administrators”, System.Security.AccessControl.RegistryRights.FullControl, System.Security.AccessControl.AccessControlType.Allow)); acl.AddAccessRule( new System.Security.AccessControl.RegistryAccessRule( “Everyone”, System.Security.AccessControl.RegistryRights.FullControl, System.Security.AccessControl.AccessControlType.Deny)); //Prevent inherited read access from the software or company key allowing access. acl.SetAccessRuleProtection(true, false); MyKey.SetAccessControl(acl); 如果我说得对,这将拒绝所有人访问,允许显式访问管理员组中的任何人,并阻止所有inheritance的权限应用于我的密钥? 我想知道它是否会在我搞砸密钥上的ACL以便我无法删除之前等等。我是否应该将密钥的所有者设置为管理员组? PS:非常重要的是,密钥甚至不能作为非管理员读取,而不仅仅是更改。

无法在CommonAppDataPath目录中修改C#中的ACL Perms

因此,我尝试修改BUILTIN \ Users组的权限,以至少具有修改文件系统访问权限。 不幸的是,我尝试使用下面的代码产生了不变的ACL。 SecurityIdentifier usersSecurityIdentifier = ntAccount.Translate(typeof(SecurityIdentifier)) as SecurityIdentifier; DirectorySecurity directorySecurity = Directory.GetAccessControl(source.FullName); FileSystemAccessRule accessRule = new FileSystemAccessRule(@”BUILTIN\Users”, FileSystemRights.FullControl, AccessControlType.Allow); directorySecurity.ModifyAccessRule(AccessControlModification.Add, accessRule, out modified); Console.WriteLine(modified); 修改后的报告在每种情况下均为true,但在文件夹属性上查看时,perms不会更新。 我还试图为一个SecurityIdentifier添加一个访问规则,该规则使用类似的代码而不是已经拥有该目录的ACL,而只是AddAccessRule而不是modify。 即使新的SecurityIdentifier出现在目录的perms列表中,它们也没有我指定的访问权限。 我试图修改管理员帐户所有者的Environment.SpecialFolders.CommonApplicationData中的专有目录的访问权限。 我也正在考虑以管理员身份修改ACL。 有没有人知道上面的代码有什么问题,或者是否有任何资源可以引导我使用本机.NET类本机设置ACL的正确方法?

如何从C#设置文件夹ACL

如何在C#中自动执行以下手动步骤? 右键单击Windows资源管理器中的文件夹; Properties -> Security -> Advanced -> Edit 取消选中“包括此对象的父级的可inheritance权限”,然后单击“删除”。 单击“添加”,选择一个组并授予其“修改”权限。 我发现这篇文章 ,看起来就像我需要的,但我没有,也找不到Microsoft.Win32.Security 。

设置要inheritance的文件的ACL

我在c#中寻找一种方法来重置文件的权限,以便从父项inheritance,就好像文件是创建或复制到该目录一样。 从文件的角度来看,我似乎无法找到任何内容(我找到了一个或两个目录的引用,但由于某种原因我无法将它们转换为文件)。 例如,C# – Windows ACL – 应用inheritance权限 。 但我不确定LOGON_USER_NAME的值应该是什么,并且我可以得到的是获得“无标志可以设置”的System.ArgumentExcpetion

C# – 如何获得“Everybody”用户?

我已经编写了一个代码,可以创建共享并更改当前用户的权限。 目标是始终允许所有人在共享级别上并拒绝ntfs acl级别的权限。 我使用德语窗口,我注意到我只能使用“jeder”访问每个用户。 在英语中,我认为用户是“每个人”还是“所有人”?! 无论如何,我正在寻找一种方法来获得每个用户语言独立的名称。 希望这是可能的。

使用代码为证书设置私钥权限

我有以下代码,其中SIGNED_FILENAME是一个常量,指向包含私钥的现有pfx文件。 X509Certificate2 cert = new X509Certificate2(SIGNED_FILENAME, PASSWORD, X509KeyStorageFlags.MachineKeySet); RSACryptoServiceProvider certRsa = cert.PrivateKey as RSACryptoServiceProvider; 当我使用代码添加私钥的权限时,我发现它们是在certRsa.CspKeyContainerInfo.UniqueKeyContainerName中指定的文件上设置的。 当我在证书mmc管理单元中查看证书权限时,但没有设置新权限。 当我通过Certificates mmc管理单元手动设置密钥时,我发现它设置权限的私钥与我在上面提到的UniqueContainerName属性中找到的私钥不同。 TLDR:每次运行这两行代码时,密钥容器文件都会更改。 为什么会发生这种情况?如何在证书mmc管理单元所执行的相同密钥上设置权限?

为什么我不能在C#中设置此ACL规则?

在Vista SP1上作为提升管理员运行,我的C#应用​​程序尝试使用以下代码设置以下规则。 不会产生错误,但目录的ACL上也没有任何更改。 我错过了什么? public static void Main( string args[] ) { string dirPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), “Company”), “Product” ); Directory.Create(dirPath); _SetAcl(dirPath, “Users”, FileSystemRights.FullControl); } private static void _SetAcl(string path, string identity, FileSystemRights rights) { var info = new DirectoryInfo(path); var acl = info.GetAccessControl(); var rule1 = new FileSystemAccessRule(identity, rights, AccessControlType.Allow); bool modified; acl.ModifyAccessRule(AccessControlModification.Reset, rule1, out […]

您如何以编程方式修复非规范ACL?

我有以下代码: DirectoryInfo directory = new DirectoryInfo(@”C:\Program Files\Company\Product”); if (!directory.Exists) { directory.Create(); } DirectorySecurity directorySecurity = directory.GetAccessControl(); SecurityIdentifier securityIdentifier = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null); directorySecurity.AddAccessRule( new FileSystemAccessRule( securityIdentifier, FileSystemRights.Write, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)); directory.SetAccessControl(directorySecurity); 对AddAccessRule的调用会引发带有以下堆栈跟踪的InvalidOperationException : System.InvalidOperationException: This access control list is not in canonical form and therefore cannot be modified. at System.Security.AccessControl.CommonAcl.ThrowIfNotCanonical() at System.Security.AccessControl.CommonAcl.AddQualifiedAce(SecurityIdentifier sid, […]

如何防止应用程序在任务管理器中被杀?

我正在研究一个家长控制应用程序(用WPF编写),并且想禁止任何人(包括管理员)杀死我的进程。 前一阵子,我在网上找到了以下代码,它几乎完美无缺,但有时它不起作用。 static void SetAcl() { var sd = new RawSecurityDescriptor(ControlFlags.None, new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null), null, null, new RawAcl(2, 0)); sd.SetFlags(ControlFlags.DiscretionaryAclPresent | ControlFlags.DiscretionaryAclDefaulted); var rawSd = new byte[sd.BinaryLength]; sd.GetBinaryForm(rawSd, 0); if (!Win32.SetKernelObjectSecurity(Process.GetCurrentProcess().Handle, SecurityInfos.DiscretionaryAcl, rawSd)) throw new Win32Exception(); } 在Win7中,如果应用程序由登录用户启动,即使管理员也无法终止该进程(访问被拒绝)。 但是,如果您切换到另一个用户帐户(管理员或标准用户),然后选中“显示所有用户的进程”,则可以毫无问题地终止该进程。 任何人都可以给我一个暗示为什么以及如何解决它? 编辑: 我知道有些人对这个问题感到不安,但这是我的两难选择。 这是我主要为自己使用而写的父母控制。 主要特点是我想要监控和限制孩子们的游戏(不仅仅是关闭所有游戏)。 我可以为孩子分配一个标准的用户帐户,他们无法杀死这个过程。 但是,有些游戏(例如Mabinogi)要求管理员权限可以玩。 所以,我每次都要输入我的管理员密码,这很烦人。 顺便说一句,我不确定它是否符合Stackoverflow的政策,如果你想查看它,请点击我的应用程序: https : //sites.google.com/site/goppieinc/pc-screen-watcher 。 编辑: 这篇文章的主要观点是询问是否有人可以给我一个提示,为什么发布的代码并不总是有效 – […]