O acesso de gravação para TODOS trabalha, IUSR, IIS_IUSRS, DefaultAppPool não funciona. porque?

10

Está bem. Aqui, estamos tentando configurar um site ASP clássico no IIS 7.5 no Windows Server 2008 R2. Há uma pasta chamada dbc na raiz do site e possui um arquivo usado para ler e gravar certas informações enquanto todas as páginas são processadas.

O problema é que, se eu conceder permissões de gravação IUSR e permissões de gravação IIS_IUSRS ou permissões de gravação DefaultAppPool, recebo o "Acesso ao caminho 'E: .. \ websiteroot \ dbc \ filename.txt' será negado"

Mas se eu conceder acesso a todos de gravação nessa pasta dbc, não recebo nenhum erro, tudo parece perfeito.

Mais informações: O site é executado no modo Pipeline clássico, a autenticação anônima está ativada (talvez seja a única autenticação ativada). E eu tentei a autenticação anônima usando a conta IUSR e a identidade do pool de aplicativos. No meu caso, ApplicationPoolIdentity é a identidade para a autenticação do site. Usamos um COM + para E / S de arquivo. E o clássico ASP Server.CreateObject para instanciar um objeto a partir dele. O COM + é executado como um serviço de rede.

Pensamentos? Não quero conceder permissão de gravação para TODOS. Estou esquecendo de algo?

RESOLVIDO: Aqui está o que eu fiz.

Meu site chamado CipherDemo estava sendo executado em um AppPoolIdentity no IIS 7.5, que poderia ser localizado pelo Identity IIS AppPool \ CipherDemo. Eu usei o ICACLS para conceder permissões de RW nessa pasta.

e o COM + que realmente executava o arquivo E / S estava sendo executado sob a Identidade do Serviço de Rede. Quando eu estava usando o Monitor de Processo para rastrear o Erro de Acesso Negado, constatou-se que o Serviço de Rede tem apenas uma permissão de Leitura nessa pasta.

Eu usei o ICACLS "nome da pasta" / concessão: r "NT AUTHORITY \ NETWORKSERVICE" :( OI) (CI) RXW / T para conceder acesso de gravação a essa pasta.

E resolveu.

Eu tinha a intenção de que, como o site é executado como Identidade CipherDemo, essa será a conta que será usada para acessar o arquivo via COM +. Mas é embaraçoso descobrir que o COM + ainda funcionaria em seus próprios limites de identidade.

gmaran23
fonte

Respostas:

5

No IIS 7.5 (e opcionalmente no IIS 7), todos os trabalhadores são executados com a identidade do pool de aplicativos: usuário "IIS AppPool * PoolName *".

Conceda acesso a esse usuário em vez de Todos (você precisará digitar o nome nos diálogos de identidade selecionados - ele não será exibido na função Localizar).

Há uma página muito útil no iis.net que aborda as coisas com muito mais detalhes.

Observe também: no IIS7 (Server 2008):

  • Você define a identidade do pool de aplicativos por pool de aplicativos nas configurações avançadas.
  • Como não há suporte à GUI, você precisará da linha de comando para definir permissões ( icacls.exe).

Finalmente, a seleção de identidade do SQL Server também não conhece a identidade do pool de aplicativos: use CREATE LOGINe CREATE USER, inicialmente, depois disso, a GUI pode ser usada para conceder funções etc.

Richard
fonte
@ Richard - Sim. Obrigado pela resposta rápida. Os fóruns do msdn são muito inúteis atualmente. Voltando ... Venho pesquisando no site IIS.net e na falha do servidor há alguns dias. Eu uso a identidade padrão do pool de aplicativos no meu servidor IIS 7.5 / Win 2008 R2. E assim, concedi as permissões IIS APPPOOL \ DefaultAppPool Wite na minha pasta 'dbc'. Além disso, concedi permissões de gravação IUSR e IIS_IUSRS nessa pasta. Ele ainda não funcionaria até eu conceder a todos permissão de gravação. Eu sei que há algo que estou perdendo .. Você pode ajudar?
Gmaran23
@ gmaran23: Se as etapas óbvias não funcionarem, eu uso o Process Monitor para ver exatamente o que está falhando (e geralmente o arquivo aberto está pedindo muito acesso, não consegui definir a ACL corretamente, ou algo assim mais tem o arquivo aberto).
Richard
@ Richard - eu faço operações de leitura / gravação com um leitor de arquivos em c # com FileMode.Open, FileAccess.ReadWrite. Acho que essa parte é boa. Outra coisa tem o arquivo aberto - acho que isso pode ser descartado, porque não há possibilidades. Há algo errado com a ACL. Vou verificar e postar aqui. Também tentará o Process Monitor. Obrigado pela ajuda :)
gmaran23
@ gmaran23: Se não estiver funcionando, não assuma que você sempre sabe alguma coisa. Eu perdi muito tempo ao longo dos anos porque sei que algo era ou não era verdade - muitas vezes eu estava errado.
1616 Richard
1
@ gmaran23: Use ferramentas para ver exatamente o que está acontecendo: você está adivinhando e não está resolvendo os problemas sistematicamente. (1) Use o Process Explorer para confirmar que o arquivo não está aberto. (2) Use o Process Monitor para ver qual acesso está sendo solicitado e por qual identidade (e você tem o arquivo correto). (3) Verifique novamente o resultado nº 2 com relação à ACL no arquivo (e abra as propriedades avançadas de segurança para obter detalhes completos). (4) Ajuste uma coisa e vá para o número 1 até consertar. Se você ainda estiver travado após algumas iterações, expanda o Q com detalhes completos (e seja específico).
Richard
5

Você pode adicionar a conta através da GUI do NTFS digitando-a diretamente. O nome está no formato de IIS APPPOOL\<<app pool name>>, por exemplo IIS APPPOOL\DefaultAppPool. (consulte este artigo de suporte da Microsoft )

Uma solução alternativa: uso a conta "Serviço de rede" como usuário do pool de aplicativos, concedendo permissão de gravação.

splattne
fonte
Correto, essa dica é boa, mas eu já fiz isso. Eu uso o padrão "ApplicationPoolIdentity" para o pool de aplicativos. E para a pasta 'dbc' eu já concedi permissões de gravação para o IIS AppPool \ DefaultAppPool. Mas ainda assim não funcionaria até que eu conceda permissão para TODOS escrever.
Gmaran23
1

Se você deseja conceder apenas a permissão WRITE da pasta para o usuário específico, também deve alterar 'Identidade do usuário anônima' do site para 'Usuário específico', não 'Identidade do pool de aplicativos'.

user2147802
fonte