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

4
在查看Windows 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);
            }

        }

Ronald Tomcat6.exe 和 psql.exe - Woot4Moo
但我想这些不是无法访问的文件吧?这些可能是无法访问某个文件(或文件)的进程。你需要找出tomcat6.exe或psql.exe无法访问哪些文件。 - Ronald Wildenberg
@Ronald Wildenberg,实际上它只是直接指向这些可执行文件。 - Woot4Moo
是的,但这些文件是无法访问的吗?如果是这种情况,为什么不直接设置这些文件的访问控制属性,看看是否有效呢? - Ronald Wildenberg
你不能手动设置SYNCHRONIZE,至少我没有看到它的可能性。感谢帮助。 - Woot4Moo
显示剩余3条评论
3个回答

2

1

这将在试图访问操作系统资源的应用程序中产生运行时错误。Windows错误5, ERROR_ACCESS_DENIED。如果您在应用程序日志文件中没有获得任何诊断信息、应用程序事件日志中没有事件或没有明确指示出错原因的托管异常,则需要像大海捞针一样找错误。


谢谢提供信息,但那并没有真正回答问题。 - Woot4Moo
这些应用程序使用数千个可保护对象。你肯定不希望我告诉你哪一个是吧。同样,如果应用程序没有记录此信息,你只能使用类似SysInternals的ProcMon来查看错误。你会被数据堆积淹没。 - Hans Passant
我并不指望你列出所有可能的安全对象,这就是为什么我基于一个过程给出了简明而有限的清单。 - Woot4Moo
有一个列表?在哪里?你问题中的内容只是请求了一个可保护对象的访问权限。 - Hans Passant
通过,是那个灰色文本块。请更正,因为那是填充我的日志的对象。 - Woot4Moo

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接