列出不同用户 Linux 的给定目录的内容



Using .NET Core, C#, Linux

我四处搜索了一下,似乎什么也找不到。也许这是不可能的,我需要一种不同的方法?

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

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

例如,说"/opt/mydata/",在那里我将有许多目录,我将手动为每个用户组创建和设置权限。 即 当我为 user1 执行目录列表时,将返回"/opt/mydata/user_1_readable"(因为该用户在各自的权限组中,或者是所有者,或者设置为供所有人阅读),但不会返回给 user2(此用户不在正确的组中)。

从本质上讲,我想"模拟"或在 Linux 中,执行相当于"sudo su user1"的操作,并报告给定用户的"/opt/mydata/"中可读的目录/文件。

我可以让目录列表和文件以 root 身份正常运行。我不能/不知道如何获取特定用户的目录列表。 我发现并尝试的示例都是特定于 Windows 标识和 Windows 安全性的。

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

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

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

资源: 在运行 Mono 的 C# 应用程序中更改当前 Linux 用户?

如果你在.net core存储库上看这个问题,建议:公开POSIX函数,看起来它不会在.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;
}

也许您想读取/etc/passwd文件以获取用户的目录?

一旦你有了它,你就可以在文件夹中获取所有子目录:

List<string> AllFiles = new List<string>();
void ParsePath(string path)
{
string[] SubDirs = Directory.GetDirectories(path);
AllFiles.AddRange(SubDirs);
AllFiles.AddRange(Directory.GetFiles(path));
foreach (string subdir in SubDirs)
ParsePath(subdir);
}

最新更新