Олицетворение в IIS 7.5 - доступ к файлу на сетевом диске - System.UnauthorizedAccessException - PullRequest
0 голосов
/ 06 июня 2018

Среда: IIS 7.5, Windows 7 Pro, Visual Studio 2012, Webapp использует Framework 4.0

Я попытался получить список каталогов с файлового сервера, используя путь, такой как \\ server \ share \ directory, веб-сервисом (asmx).

Я использую следующую конфигурацию в web.config:

<identity impersonate="true" />
<authentication mode="Windows" />

Я проверяю User.Identity.Name и Threading.Thread.CurrentPrincipal.Identity.Name и получаю используемый домен\ Имя пользователя для входа.«System.UnauthorizedAccessException» выдается, если я пытаюсь получить список каталогов «\\ server \ share \ directory».

Я пробовал много вещей, даже для использования локальной системы, локальной службы или администратора домена.как идентификатор для пула приложений.

Когда я изменяю конфигурацию system.webServer / serverRuntime authenticatedUserOverride с UseAuthenticatedUser на UseWorkerProcessUser, я могу получить доступ к общему сетевому ресурсу, но под именем пользователя пула приложений, а не пользователя, который использует веб-сервис.В этой конфигурации я не могу получить информацию о логине, который использовался, вместо этого я всегда получаю в качестве удостоверения пользователя для пула приложений.

Возможно ли получить пользователя windows-login-user без подражания?Или что нужно сделать, чтобы получить успешный доступ к сетевой файловой системе?

Я думаю, что UAC отключен на моей машине.

1 Ответ

0 голосов
/ 07 июня 2018

После многих попыток я нашел это решение (не идеальное, но оно работает для меня):

ADS / Domaincontroller:

  • Добавление нового пользователя "IIS-Пользователь "в активную директорию
  • Добавить администраторов домена группы к" пользователю IIS "
  • установить администраторов домена в первичную группу
  • Редактировать / добавить атрибут servicePrincipalName с помощью редактора атрибутов:http / [имя_компьютера iis]
  • сохранить и закрыть usereditor в ADS-Server-Manager
  • открыть usereditor -> новая вкладка «делегирование» -> разрешить пользователю «IIS-User» делегированиеservices

ПК / сервер с IIS:

  • открыть IIS-Manger
  • редактировать пул приложений: установить идентификатор нового пользователя для пула приложений, используется для редактирования конфигурации веб-сервиса / asp-приложения
  • с помощью редактора конфигурации IIS-manger:
  • system.web / mode authentication mode = Windows
  • system.web/ identity impersonate = True
  • system.webServer / security / аутентификация / windowsAuthentication включена = True, useAppPoolCredebtials = True
  • system.webServer / serverRuntime authenticatedUserOverride = UseAuthenticatedUser
  • system.webServer / validation validateIntegratedModeConfiguration = false
10ser *netshare с правами нового пользователя («IIS-User»), но свойство User.Identity.Name возвращает имя пользователя, вошедшего в систему.Но теперь я могу проверить, есть ли у пользователя входа в систему доступ к файлам / каталогам и показывать только доступные пользователю файлы / каталоги.

Возможно, есть некоторые ненужные настройки конфигурации, но после многочасового поиска решения ярад найти рабочее решение.

   Private Shared Function getSecId4User(user As IPrincipal) As SecurityIdentifier
    Return getSecId4Username(user.Identity.Name)
End Function

Private Shared Function getSecId4Username(username As String) As SecurityIdentifier
    Dim account As New NTAccount(username)
    Return account.Translate(GetType(SecurityIdentifier))
End Function

Private Shared Function isVisible4User(di As DirectoryInfo, secId As SecurityIdentifier) As Boolean
    Dim dirSec As DirectorySecurity = di.GetAccessControl
    Dim authRules As AuthorizationRuleCollection = dirSec.GetAccessRules(True, True, GetType(SecurityIdentifier))
    For Each ar As FileSystemAccessRule In authRules
        If secId.Equals(CType(ar.IdentityReference, SecurityIdentifier)) Then
            Dim fileSystemRights As FileSystemRights = ar.FileSystemRights
            Select Case fileSystemRights
                Case System.Security.AccessControl.FileSystemRights.FullControl
                    Return True
                Case System.Security.AccessControl.FileSystemRights.AppendData
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ChangePermissions
                    Return True
                Case System.Security.AccessControl.FileSystemRights.CreateDirectories
                    Return True
                Case System.Security.AccessControl.FileSystemRights.CreateFiles
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Delete
                    Return True
                Case System.Security.AccessControl.FileSystemRights.DeleteSubdirectoriesAndFiles
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ExecuteFile
                    Return True
                Case System.Security.AccessControl.FileSystemRights.FullControl
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ListDirectory
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Modify
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Read
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ReadAndExecute
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ReadAttributes
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ReadData
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ReadExtendedAttributes
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ReadPermissions
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Synchronize
                    Return True
                Case System.Security.AccessControl.FileSystemRights.TakeOwnership
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Traverse
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Write
                    Return True
                Case System.Security.AccessControl.FileSystemRights.WriteAttributes
                    Return True
                Case System.Security.AccessControl.FileSystemRights.WriteData
                    Return True
                Case System.Security.AccessControl.FileSystemRights.WriteExtendedAttributes
                    Return True

                Case Else

            End Select
        End If
    Next
    Return False
End Function

Private Shared Function isVisible4User(fi As FileInfo, secId As SecurityIdentifier) As Boolean
    Dim filesec As FileSecurity = fi.GetAccessControl
    Dim authRules As AuthorizationRuleCollection = filesec.GetAccessRules(True, True, GetType(SecurityIdentifier))
    For Each ar As FileSystemAccessRule In authRules
        If secId.CompareTo(CType(ar.IdentityReference, SecurityIdentifier)) = 0 Then
            Dim fileSystemRights As FileSystemRights = ar.FileSystemRights
            Select Case fileSystemRights
                Case System.Security.AccessControl.FileSystemRights.FullControl
                    Return True
                Case System.Security.AccessControl.FileSystemRights.AppendData
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ChangePermissions
                    Return True
                Case System.Security.AccessControl.FileSystemRights.CreateDirectories
                    Return True
                Case System.Security.AccessControl.FileSystemRights.CreateFiles
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Delete
                    Return True
                Case System.Security.AccessControl.FileSystemRights.DeleteSubdirectoriesAndFiles
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ExecuteFile
                    Return True
                Case System.Security.AccessControl.FileSystemRights.FullControl
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ListDirectory
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Modify
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Read
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ReadAndExecute
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ReadAttributes
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ReadData
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ReadExtendedAttributes
                    Return True
                Case System.Security.AccessControl.FileSystemRights.ReadPermissions
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Synchronize
                    Return True
                Case System.Security.AccessControl.FileSystemRights.TakeOwnership
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Traverse
                    Return True
                Case System.Security.AccessControl.FileSystemRights.Write
                    Return True
                Case System.Security.AccessControl.FileSystemRights.WriteAttributes
                    Return True
                Case System.Security.AccessControl.FileSystemRights.WriteData
                    Return True
                Case System.Security.AccessControl.FileSystemRights.WriteExtendedAttributes
                    Return True

                Case Else

            End Select
        End If
    Next
    Return False
End Function

Проверка доступности

...