gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:01:50 25 4
gpt4 key购买 nike

使用 .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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com