#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. Я не уверен, что это может соответствовать вашим потребностям…