检查C#中的访问权限 - “在Linux上”

时间:2018-03-22 13:34:24

标签: c# linux permissions

我想知道在使用C#时如何检查Linux系统上文件和目录的访问权限。

我想知道我是否可以阅读,写作或执行。

System.IO.Directory.GetAccessControl()在Linux上不起作用。

Unhandled Exception: System.PlatformNotSupportedExcpetion: Operation is not supported on this platform.

跟踪从:System.Security.AccessControl.NativeObjectSecurity.InternalGet

开始

我尝试使用的方法:

static bool HasDirectoryPermission(FileSystemRights right, string path) {
   var allowed = false;
   var denied = false;
   var accessControlList = System.IO.Directory.GetAccessControl(path);
   if (accessControlList == null)
      return false;
   var accessRules = accessControlList.GetAccessRules(true, true,
                                 typeof(System.Security.Principal.SecurityIdentifier));
   if (accessRules == null)
      return false;

   foreach (FileSystemAccessRule rule in accessRules) {
      if ((right & rule.FileSystemRights) != right)
         continue;

      if (rule.AccessControlType == AccessControlType.Allow)
         allowed = true;
      else if (rule.AccessControlType == AccessControlType.Deny)
         denied = true;
   }

   return (allowed && !denied);
}

文件路径的方法几乎相同。

1 个答案:

答案 0 :(得分:0)

我自己想出了一个“肮脏”的解决方案。

  • 我使用重定向输出启动bash
  • 传递ls -l +文件或目录的路径作为参数
  • 在末尾找到带有文件或目录名称的行
  • 最后我检查该行的第2 /第3 /第4个字符是否为r / w / x

https://pastebin.com/1PQNaB1m