IIS AppPoolIdentity e permissions de access de gravação do sistema de arquivos

Aqui está um problema com o IIS 7.5 e o ASP.NET que eu tenho pesquisado e não consegui chegar a lado nenhum. Qualquer ajuda seria muito apreciada.

Minha pergunta é: usando o ASP.NET no IIS 7.5, como o IIS e / ou o sistema operacional permitem que o aplicativo da Web grave em uma pasta como C:\dump quando executado com confiança total? Como é que não preciso adicionar explicitamente o access de gravação para o usuário do pool de aplicativos (neste caso, ApplicationPoolIdentity )?

Até aqui eu sei:

  • No IIS 7.5, a identidade padrão de um pool de ApplicationPoolIdentity é ApplicationPoolIdentity .
  • ApplicationPoolIdentity representa uma conta de usuário do Windows chamada “IIS APPPOOL \ AppPoolName”, que é criada quando o pool de aplicativos é criado, onde AppPoolName é o nome do pool de aplicativos.
  • O usuário “IIS APPPOOL \ AppPoolName” é por padrão um membro do grupo IIS_IUSRS .
  • Se você estiver executando com confiança total, seu aplicativo da Web poderá gravar em várias áreas do sistema de arquivos (excluindo pastas como C:\Users , C:\Windows , etc). Por exemplo, seu aplicativo terá access para gravar em algumas pastas, como C:\dump .
  • Por padrão, o grupo IIS_IUSRS não recebe access de leitura ou gravação para C:\dump (pelo menos não o access visível na guia “Segurança” no Windows Explorer).
  • Se você negar o access de gravação ao IIS_IUSRS , obterá uma SecurityException ao tentar gravar na pasta (conforme esperado).

Portanto, levando tudo isso em conta, como o access de gravação é concedido ao usuário “IIS APPPOOL \ AppPoolName”? O processo w3wp.exe é executado como esse usuário, então, o que permite que esse usuário grave em uma pasta a qual não parece ter access explícito?

Por favor, note que eu entendo que isso provavelmente foi feito por uma questão de conveniência, uma vez que seria uma dor para conceder ao usuário access a todas as pastas que precisa gravar se você estiver executando sob confiança total. Se você quiser limitar esse access, poderá sempre executar o aplicativo em Confiança Média. Estou interessado em descobrir como o sistema operacional e / ou o IIS permitem que essas gravações ocorram, mesmo que aparentemente não exista access explícito ao sistema de arquivos.

    A ApplicationPoolIdentity é atribuída à associação do grupo Users , bem como IIS_IUSRS grupo IIS_IUSRS . À primeira vista, isso pode parecer um pouco preocupante, no entanto, o grupo Users tem direitos limitados de NTFS.

    Por exemplo, se você tentar criar uma pasta na pasta C:\Windows , descobrirá que não pode. O ApplicationPoolIdentity ainda precisa ser capaz de ler arquivos das pastas do sistema Windows (caso contrário, como o processo de trabalho seria capaz de carregar dinamicamente DLLs essenciais).

    Com relação às suas observações sobre poder gravar em sua pasta c:\dump . Se você der uma olhada nas permissions nas Configurações avançadas de segurança, verá o seguinte:

    insira a descrição da imagem aqui

    Veja que Permissão especial sendo herdada de c:\ :

    insira a descrição da imagem aqui

    Essa é a razão pela qual o ApplicationPoolIdentity do seu site pode ler e gravar nessa pasta. Esse direito está sendo herdado da unidade c:\ .

    Em um ambiente compartilhado em que você possivelmente tenha várias centenas de sites, cada um com seu próprio pool de aplicativos e Identidade do Pool de Aplicativos, armazene as pastas do site em uma pasta ou um volume que tenha removido o grupo Users e que as permissions sejam definidas somente como Administradores e a conta SYSTEM tem access (com inheritance).

    Em seguida, você atribuiria individualmente as permissions necessárias que cada IIS AppPool\[name] requer em sua pasta raiz do site.

    Você também deve garantir que todas as pastas que você cria onde armazena arquivos ou dados potencialmente confidenciais tenham o grupo Users removido. Você também deve certificar-se de que os aplicativos instalados não armazenem dados confidenciais em suas pastas c:\program files\[app name] e que eles usem as pastas de perfil do usuário.

    Então, sim, à primeira vista, parece que a ApplicationPoolIdentity tem mais direitos do que deveria, mas na verdade não tem mais direitos do que os ditames da associação ao grupo.

    Uma associação do grupo ApplicationPoolIdentity pode ser examinada usando a ferramenta SysInternals Process Explorer . Encontre o processo de trabalho que está sendo executado com a Identidade do Pool de Aplicativos em que você está interessado (você precisará adicionar a coluna User Name do User Name à lista de colunas a serem exibidas:

    insira a descrição da imagem aqui

    Por exemplo, eu tenho um pool aqui chamado 900300 que tem uma identidade de pool de aplicativos do IIS APPPOOL\900300 . Clique com o botão direito do mouse nas propriedades do processo e selecione a guia Segurança que vemos:

    insira a descrição da imagem aqui

    Como podemos ver, o IIS APPPOOL\900300 é um membro do grupo Users .

    1. Clique com o botão direito na pasta.

    2. Clique em Propriedades

    3. Clique na guia Segurança. Você verá algo assim:

    insira a descrição da imagem aqui

    1. Clique no botão “Editar …” na canvas acima. Você verá algo assim:

    insira a descrição da imagem aqui

    1. Clique no botão “Adicionar …” na canvas acima. Você verá algo assim:

    insira a descrição da imagem aqui

    1. Clique no botão “Locais …” na canvas acima. Você verá algo assim. Agora, vá até o topo desta estrutura de tree, selecione o nome do seu computador e clique em OK.

    insira a descrição da imagem aqui

    1. Agora digite “iis apppool \ your_apppool_name” e clique no botão “Verificar nomes”. Se o apppool existir, você verá o nome do seu pool na checkbox de texto com sublinhado. Clique no botão OK.

    insira a descrição da imagem aqui

    1. Marque / desmarque o access que você precisa conceder à conta

    2. Clique no botão Aplicar e depois em OK.

    Cada pool de aplicativos no IIs cria sua própria pasta de usuário segura com permissão de leitura / gravação COMPLETA por padrão em c: \ users. Abra a pasta Usuários e veja quais pastas do pool de aplicativos estão lá, clique com o botão direito e verifique seus direitos para a conta virtual do pool de aplicativos atribuída. Você deve ver sua conta do pool de aplicativos adicionada já com access de leitura / gravação atribuído à raiz e às subpastas.

    Assim, esse tipo de access ao armazenamento de arquivos é feito automaticamente e você deve poder escrever o que quiser nas pastas de contas de usuários dos pools de aplicativos sem alterar nada. É por isso que contas de usuários virtuais para cada pool de aplicativos foram criadas.