c# - 列出不同用户给定目录的内容,Linux

标签 c# linux asp.net-core .net-core

使用 .NET Core、C#、Linux

我搜索了一下,似乎找不到任何东西。也许这是不可能的,我需要一种不同的方法?

有人可以指点我如何为特定用户名获取给定路径的目录列表吗?

我正在以 Root 身份运行 Web 应用程序服务,但需要检查并返回给定用户名的目录和文件(没有可用密码)- 以报告给定用户名具有读取权限的目录和文件。

例如“/opt/mydata/”,在那里我将有许多目录,我将手动创建这些目录并为每个用户组设置权限。 IE。 “/opt/mydata/user_1_readable” 将在我为 user1 列出目录时返回(因为此用户在各自的权限组中,或者是所有者,或者设置为所有人都可以阅读)但不会返回user2(此用户不在正确的组中)。

本质上,我想“模拟”或在 Linux 中执行与“sudo su user1”等效的操作,并报告给定用户在“/opt/mydata/”中可读的目录/文件。

我可以以 Root 身份正常运行目录列表和文件。我不能做/不知道如何获取特定用户的目录列表。我发现和尝试的示例都是特定于 Windows Identity 和 Windows Security 的。

例如我找到了这个例子,但它似乎适用于我没有运行的“Mono”,但本质上我真的想做一些类似的事情:

// Impersonate a user
using (WindowsIdentity newId = new WindowsIdentity("user1"))
using (WindowsImpersonationContext impersonatedUser = newId.Impersonate())
{
      var content = _fileProvider.GetDirectoryContents(uri); 
}

请问有第三方库或其他方式吗?

资源: Change current Linux user in a C# application running with Mono?

最佳答案

如果您在 .net 核心存储库上查看此问题,Proposal: Expose POSIX functions , 看起来它不会在 .net 核心中实现,而只会在 Mono.Posix.NETStandard 中实现.

该库与 .net core 2.0 兼容,自己实现应该不难。

您可以对包进行类似的尝试,以过滤用户可以读取的文件。

public UserHasReadPermission(string username, string file)
{
    var user = new UnixUserInfo(username);
    var file = new UnixFileInfo(file);

    // Everyone has read permission
    if (file.FileAccessPermissions.HasFlag(FileAccessPermissions.OtherRead))
        return true;

    // User owns the file and has read permission
    if (file.OwnerUser == user && file.FileAccessPermissions.HasFlag(FileAccessPermissions.UserRead))   
        return true;

    // User group owns the file and has read permission
    if (file.OwnerGroup == user.Group && file.FileAccessPermissions.HasFlag(FileAccessPermissions.GroupRead))   
        return true;

    return false;
}

关于c# - 列出不同用户给定目录的内容,Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55588053/

相关文章:

Linux 读入一个数组

linux - 如何在 Linux 服务器中将 PDF 转换为 DOC/DOCX

c# - ASP.NET Core Web API Facebook JWT 身份验证

angular - 如何正确设置新的 Angular 6 项目

asp.net-core - 使用命令行调用 IISExpress 来托管 ASP.NET Core 应用程序

c# - 使用 C# 检查字符串是否只有空格或零

c# - 从 Controller 返回局部 View ?

linux - 在 LKM 中识别文件正在被复制到计算机外部

c# - 在 WCF 服务中读取 xml 文件时出现问题

c# - 仅显示 BenchmarkDotNet 的摘要部分