Qual o papel da "Identidade do pool de aplicativos" em um pool de aplicativos?

16

Ao falar sobre a segurança do IIS 7.5, o AFAIK:

A identidade do pool de aplicativos decide quem meu aplicativo Web será executado.

O método de autenticação decide quem os clientes são autenticados.

Eu tenho uma pasta virtual configurada assim:

  • Eu uso a autenticação anônima com a expectativa de que todos os clientes sejam autenticados como IUSR .
  • Eu dou ao IUSR o controle total da pasta.
  • Minha identidade do pool de aplicativos é definida como a conta XXX, que não tem permissão para a pasta. (Eu intencionalmente defino isso)

Mas acontece que não consigo procurar os arquivos nessa pasta. Depois de conceder permissão à conta do XXX para acessar essa pasta, tudo vai bem.

Então, qual o papel da identidade do pool de aplicativos na autenticação anônima? É totalmente inesperado que eu tenha que dar permissão à conta de identidade do pool de aplicativos para acessar a pasta. Eu pensei que autenticação anônima seria suficiente?

Obrigado.

smwikipedia
fonte

Respostas:

18

Muitos termos sobrecarregados aqui e uma alteração entre o IIS 7 e 7.5.

Identidade do pool de aplicativos x conta do pool de aplicativos

Vamos começar com a identidade do pool de aplicativos (minúscula I, também conhecida como conta do pool de aplicativos ):

Da maneira que digo, a conta do pool de aplicativos é a conta usada para inicializar um pool de aplicativos e a identidade que o pool de aplicativos assume quando não está representando ninguém.

Portanto, seja qual for a identidade que você der ao pool de aplicativos, será necessário ler os arquivos na pasta de conteúdo : particularmente {mas não limitado a} qualquer arquivo web.config (que faz parte da configuração do IIS e controlar qual é o O pool de aplicativos estará funcionando).

Se ele não puder acessar uma pasta, ele assumirá que pode haver um arquivo web.config importante (que muda o jogo), e exibirá um erro. Portanto, a conta do pool de aplicativos precisa de acesso de leitura a todas as pastas de conteúdo.

ApplicationPoolIdentity

Por que diferenciar a conta do pool de aplicativos (a identidade do pool de aplicativos) da identidade do pool de aplicativos? Como o ApplicationPoolIdentity usado com capital especial é um novo tipo de conta - uma conta de serviço gerenciada - introduzida e tornada padrão no IIS 7.5 / Windows 2008 R2 e disponível no Windows 2008 SP2 também (mas não o padrão).

Consulte Identidades do pool de aplicativos no IIS.Net

Quando você cria um site no R2 usando a GUI:

  • um pool de aplicativos será criado para hospedar esse site e
  • o tipo de conta será ApplicationPoolIdentity, em vez de Serviço de rede (o padrão de 2008), Serviço local ou Sistema local.

Com o RTM de 2008, a conta padrão do Pool de Aplicativos era o Serviço de Rede, além de um identificador / unificador de identidade exclusivo; o novo R2 / SP2 AppPoolIdentity tipo de conta é uma Rede-Service- como conta (isto é, é o computador ao ligar-desligar caixa), mas impede a representação de outro agrupamento de aplicações dentro da mesma caixa.

De volta à pergunta original:

  • A conta do pool de aplicativos define quem seu aplicativo é executado quando não está se passando por outra pessoa

  • O método de autenticação descreve como você vai autenticar os clientes (para representá-los)

  • A conta de usuário anônimo define quem você executará ao se passar por um usuário para uma solicitação que não é autenticada - o IUSR é esse usuário.

Aliás, com o IIS 7.5, você pode definir a conta de usuário Anônimo como Identidade do Pool de Aplicativos (propriedades do método de autenticação Anônima), o que pode tornar mais fácil isolar e proteger o conteúdo de um determinado site.

Defina permissões usando o IIS AppPool \ YourSiteName para o formato do nome. (veja também este post )

TristanK
fonte
4

Você está vendo duas coisas, geralmente confusas no ASP.NET:

  1. "identidade do usuário" - a autenticação de uma conta de usuário não tem nada a ver com a conta ou a identidade que realmente é executada no IIs e no ASP.NET. A autenticação anônima permite que qualquer usuário acesse qualquer conteúdo público sem fornecer um desafio de nome de usuário e senha ao navegador do cliente. A conta IUSR anônima que é autenticada por padrão no IIS apenas aplica acesso ao conteúdo do site público. Isso não afeta os processos ou recursos usados ​​pelos serviços subjacentes IIs ou ASP.NET.
  2. "identidade do aplicativo" - esta é a conta "WindowsIdentity" real no servidor que é realmente executada atrás do IIS e do ASP.NET, que é a conta de identidade do pool de aplicativos atribuída ao pool pelos IIs e fornecida ao ASP.NET. Seu processo do ASP.NET é executado sob esta conta de identidade do pool de aplicativos (chamada de conta virtual no IIs versão 7.5+) por padrão.

Explicação: Primeiro, "autenticação" no ASP.NET é apenas um evento geralmente configurado no web.config que efetua login em uma determinada conta de usuário que é passada como um token de usuário pelos IIs para o ASP.NET como um objeto simples HttpContext ... ou seja, a sessão atual ou o contexto do usuário atual. Na verdade, ele não altera a identidade do Windows que está executando o processo do ASP.NET, apenas passa um token de identificação do usuário para ele. Usando o HttpContext, seu código pode usar esse ID ou nome para armazenar direitos de banco de dados em várias seções do seu site. Mas isso não afetará o acesso a arquivos pelo ASP.NET porque não afeta nem altera a identidade da conta "processo" real do aplicativo que executa o ASP.NET nos IIs.

Isso não acontece até que você faça a "Representação", que instrui o ASP.NET a se passar por qualquer token passado por IIs e, em seguida, executá-lo com o ID da conta. Você pode definir a representação no seu web.config. Quando você ativa a representação no ASP.NET, o WindowsIdentity é alterado no processo de trabalho para qualquer conta autenticada passada para o ASP.NET a partir do IIS e, em seguida, você pode acessar arquivos, com base, é claro, em quais direitos você atribui a essa conta de usuário. É importante observar quando isso ocorre temporariamente e o ASP.NET pode voltar à sua identidade de processo padrão, que está nas versões atuais do IIs novamente na conta de Identidade do Pool de Aplicativos atribuída a um determinado Pool de Aplicativos.

Quando o IIs usa apenas a conta de usuário anônimo simples, sem autenticação explícita definida no ASP.NET, o IIs inicia por padrão a conta de Identidade do Pool de Aplicativos atribuída ao Pool de Aplicativos atribuída ao site e a transmite ao ASP.NET e ao processo de trabalho que a executa. Essa conta de identidade do pool de aplicativos processa todas as solicitações do IIS e executa o ASP.NET para esse site.

Quando o IIs inicia sob essa configuração e é acessado por um usuário, ele realmente autentica nos bastidores, por padrão, a conta IUSR anônima que determina o acesso a páginas da Web e outros recursos básicos. Mas essa conta NÃO é passada para o ASP.NET. E isso não afeta a identidade do pool de aplicativos que o IIS executa e no qual o ASP.NET é executado.

Se você definir Representar como "true", digamos, seu web.config, E você estiver usando a conta IUSR anônima padrão nos IIs para acesso público, E você definirá para true explicitamente a propriedade anonymousAuthentication no web.config (em vez de usar um Windows ou outra conta de login), os IIs descartarão a Identidade do Pool de Aplicativos e os IIs e o ASP.NET agora executarão seus processos de aplicativo como a conta autenticada e representada por IUSR anônima.

Quando você fizer isso, o ASP.NET e seus processos estarão executando na conta IUSR .... ou seja, o processo de aplicativos do ASP.NET executará sua conta WindowsIdentity como a conta IUSR. Agora você pode aplicar acesso de leitura / gravação a essa conta IUSR anônima e às pastas que você deseja que essa conta acesse. (Nota: certifique-se de adicionar a conta de processo padrão, a conta do pool de aplicativos do pool e os direitos dessas pastas. Isso está de acordo com a recomendação da Microsoft)

Boa sorte!

Stokely
fonte
2

Existem dois contextos de autenticação em jogo. O processo do servidor da web (que lida com suas solicitações da web) é executado como o usuário de identidade do pool de aplicativos. Quando uma solicitação é recebida para o host virtual, o pool de aplicativos representa o usuário listado nas "Credenciais de autenticação anônima" do site específico - por padrão, IUSR.

Todos os scripts executados no seu site serão executados como IUSR, mas o log e algumas outras funções serão executadas como o usuário do pool de aplicativos (por padrão, serviço de rede - embora isso tenha sido alterado recentemente para usar um usuário especial do pool de aplicativos virtual). A identidade do pool de aplicativos (serviço de rede) precisa poder listar os arquivos em seu diretório, pois certas verificações são feitas na pilha de solicitações antes que o controle seja entregue ao seu script.

É uma boa prática executar um site por pool e definir a identidade do pool de aplicativos para executar como o mesmo usuário que o usuário anônimo do site. É possível sair do contexto de usuário anônimo (IUSR) e elevar privilégios aos da própria identidade do pool de aplicativos.

Steve Mayne
fonte