【问题标题】:Modify Object Access properties via C#通过 C# 修改对象访问属性
【发布时间】:2013-01-12 13:56:30
【问题描述】:

查看我在 Server 2003 上的安全事件日志后,我注意到记录了一个带有失败审核的事件。类别是对象访问,需要以下访问:

READ_CONTROL
同步
读取数据(或 ListDirectory)
WriteData(或 AddFile)
AppendData(或 AddSubDirectory 或 CreatePipeInstance)

我似乎找不到任何关于如何以编程方式修改这些属性的文档。这些故障是由 postgres 和 tomcat 可执行文件生成的。

编辑

protected FileSystemRights[] AppendFileSystemRights()  
        {  
            return new FileSystemRights[]   
              {  
                  FileSystemRights.ReadAndExecute,
                  FileSystemRights.WriteAttributes,
                  FileSystemRights.Synchronize,  
                  FileSystemRights.ReadAttributes,
                  FileSystemRights.ReadData  
              };  
          }

public void ApplySystemRight(string fileName, FileSystemRights[] rights)  
        {  
            if (string.IsNullOrEmpty(fileName))  
            {  
                return;  
            }  

            if (rights == null || rights.Length <= 0)
            {
                return;
            }

            try
            {
                Console.WriteLine("ATTEMPTING TO OPEN THE FOLLOWING FILE: {0}", fileName);
                fileSec = File.GetAccessControl(fileName);

                for (int i = 0; i < rights.Length; i++)
                {
                    Console.WriteLine("ATTEMPTING TO ADD THE FOLLOWING ACCESS RULE: {0} TO {1}", rights[i], fileName);
                    fileSec.AddAccessRule(new FileSystemAccessRule(user,
                        rights[i], AccessControlType.Allow));
                }

                Console.WriteLine("ATTEMPTING TO SET THE PRECEDING ACCESS RULES: TO {0}", fileName);
                File.SetAccessControl(fileName, fileSec);
            }
            catch (UnauthorizedAccessException uae)
            {
                Console.WriteLine("CAUGHT THE FOLLOWING EXCEPTION: {0}  \n WHILE PROCESSING: {1}", uae.Message, fileName);
            }
            catch (ArgumentNullException ane)
            {
                Console.WriteLine("CAUGHT THE FOLLOWING EXCEPTION: {0}  \n WHILE PROCESSING: {1}", ane.Message, fileName);
            }
            catch (ArgumentException ae)
            {
                Console.WriteLine("CAUGHT THE FOLLOWING EXCEPTION: {0}  \n WHILE PROCESSING: {1}", ae.Message, fileName);
            }

        }

【问题讨论】:

  • 您是否了解拒绝访问的对象是什么?
  • Ronald Tomcat6.exe 和 psql.exe
  • 但我不认为这些是无法访问的文件?这些可能是无法访问某个文件(或多个文件)的进程。您需要找出tomcat6.exe或psql.exe都无法访问的文件。
  • @Ronald wildenberg 实际上只是直接指向那些可执行文件
  • 是的,但是这些是无法访问的文件吗?在这种情况下,你为什么不简单地为这些文件设置访问控制属性,看看它是否有效?

标签: c# .net events


【解决方案1】:

我建议您在运行导致审计失败的进程时运行进程监视器 (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)。这应该告诉您该进程试图访问的特定资源。使用此信息,您将能够设置资源权限以允许请求的访问。

【讨论】:

    【解决方案2】:

    这将在尝试访问操作系统资源的应用中产生运行时错误。 Windows 错误 5,ERROR_ACCESS_DENIED。如果您没有在应用程序的日志文件中获得任何诊断信息、应用程序事件日志中的事件或明确的托管异常告诉您出了什么问题,那么您将是大海捞针。

    【讨论】:

    • 感谢您提供的信息,但这并没有真正回答问题
    • 这些应用程序使用数以千计的安全对象。你肯定没想到我会告诉你是哪一个。同样,如果应用程序没有记录这一点,您只能使用 SysInternals 的 ProcMon 之类的东西来查看错误。你会淹没在海量数据中。
    • 正确我不希望你列出所有可能的安全对象,这就是为什么我给出了一个基于流程的简洁和有限的列表。
    • 有清单吗?在哪里?您的问题只是为 one 安全对象请求的访问权限。
    • passant 是的,它那块灰色的文本。更正它的一个对象,因为那是填充我的日志的对象。
    【解决方案3】:

    您可以使用FileSecurity 类以编程方式修改访问控制属性。当然,您首先必须找出应该修改哪些文件或目录的这些属性。

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      相关资源
      最近更新 更多