繁体   English   中英

通过C#修改对象访问属性

[英]Modify Object Access properties via C#

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

READ_CONTROL
SYNCHRONIZE
ReadData(或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);
            }

        }

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM