Олицетворение пользователя Windows в .NET Core в Linux?

#c# #linux #windows #.net-core #impersonation

#c# #linux #Windows #.net-core #олицетворение

Вопрос:

Я пишу приложение .NET Core на C #, которое будет работать на сервере Linux, но мне нужно выдать себя за пользователя Windows, чтобы получить доступ к некоторым удаленным ресурсам на сервере Windows. У меня есть учетные данные для аутентификации там, но все реализации, которые я вижу, полагаются на «Расширенный базовый API Windows 32» (advapi32.dll ), которая является общей библиотекой Windows, недоступной в Linux.

Как мне заставить это работать?

Комментарии:

1. Пользователю Windows требуется серверная часть для аутентификации. Является ли сервер Active Directory?

2. Я могу аутентифицироваться на сервере AD, и у меня также есть доступ к локальной аутентификации на самом сервере Windows. Для меня это был бы предпочтительный вид аутентификации.

Ответ №1:

Я смог найти решение, немного подумав нестандартно. Я обнаружил, что могу использовать SharpCifs.Ядро для доступа к CIFS и Microsoft PowerShell SDK для получения удаленного сеанса PowerShell и получения переменных среды. Я бы хотел, чтобы Microsoft написала несколько лучших кроссплатформенных инструментов.

Комментарии:

1. Я не уверен, что SharpCifs. Core будет работать с более высокими версиями SMB. Я видел, что это порт старого доброго JCifs. У SMB-1 есть проблемы с безопасностью, и он заменяется.

2. Это так. У меня он подключается к сетевым местоположениям Windows 2016.

3. Привет @RootHouston, я попробовал библиотеку, предложенную вами, для печати на сетевом принтере. Я использую .NET Core 3.1, и мой контейнер работает в Linux. SharpCifs.Config. setProperty(«jcifs.smb.client.lport», «8137»); var auth1 = новая проверка подлинности NtlmPasswordAuthentication(«mydomain;my_username:my_pass»); var smb1 = новый SMB-файл ($»smb://{Имя принтера}», auth1); … reportPrintTool. Print(smb1.getCanonicalPath()); По какой-то причине я все еще получаю ошибки типа: Настройки для доступа к принтеру ‘\ Printer_IP_Address’ недопустимы.

4. Здравствуйте, я никогда не использовал его для получения доступа к путям принтера. Можете ли вы попробовать: var auth1 = new NtlmPasswordAuthentication(«домен», «my_username», «my_pass»);

Ответ №2:

Проект Mono имеет своего рода оболочку из нескольких команд Linux, одна из них — seteuid (команда Linux, используемая для олицетворения). Возможно, стоит взглянуть на пакет NuGet Mono.Posix.NETStandard. Похоже, он будет обновлен в новой версии .Net 5. Я не уверен, что это может соответствовать вашим потребностям…