Representação clássica de ASP | Autenticação do Windows | Acesso negado ao arquivo IIS 7

3

Eu tenho um site ASP / VBScript clássico (landing page - default.asp) que grava a atividade de acesso do usuário do site (LOGON_USER) a um simples arquivo txt via Scripting.FileSystemObject.

O VBScript cria um FSO para abrir / criar um novo arquivo sob a pasta 'logs'

Ambiente Windows 2008 R2 de 64 bits

IIS 7.5 -

  • Autenticação - Autenticação do Windows ativada. Todas as outras autenticações desativadas.
  • AppPool em execução no modo Classic PipeLine;
  • Ativar aplicativos de 32 bits configurados como true;
  • Identidade é NetworkService.
  • Carregar perfil de usuário definido como falso
  • ASP: executeInMta definido como falso

ACL para a pasta de logs

  • Grupo de usuários - Ler e executar;
  • SYSTEM - Controle Total (Herdado);
  • Administradores - Controle Total (Herdado);
  • IIS_IUSRS - Controle total;
  • Serviço de Rede - Controle Total.

Essa configuração gera um '800A0046 - Permissão negada'. Por favor, note que a autenticação do Windows está habilitado. E mapeio o valor LOGON_USER para um valor no banco de dados para permitir que um usuário acesse meu site. AppPool está definido como NT Authority \ NetworkService. Embora a identidade do pool de aplicativos esteja definida como NetworkService, depois que um usuário autentica, os arquivos são acessados por meio do usuário autenticado (representado). Exemplo de atividade do monitor de processo abaixo.

Atividade do sistema de arquivos do Process Monitor

  • default.asp - Acesso desejado - SUCESSO - Representação: nome de domínio \ nome do usuário
  • logs \ log3011.txt - Acesso Desejado - NEGADO - Representação: nome de domínio \ nome do usuário

Agora, isso me coloca em uma situação onde eu tenho que ir para as propriedades de segurança da pasta 'logs' e conceder permissão de leitura / gravação a todos os usuários permissíveis. O que eu estou procurando é, desde que meu apppool é executado como NetworkService (pasta de logs é dado controle total para NetworkService), eu quero a pasta de logs para ser acessado via serviço de rede e não o usuário autenticado via autenticação do windows. Eu entendo que este é o resultado esperado ao usar a autenticação do Windows. No entanto, eu uso windows autnetication apenas para verificar se o usuário tem permissão para acessar o site. Preciso de todas as outras atividades do site para usar o NT Authority \ NetworkService. (Estou pedindo uma solução para impedir que o ASP Clássico personifique o usuário autenticado do Windows e, em vez disso, use a identidade do recurso - serviço de rede no meu caso - para acessar os recursos)

Isso é pedir demais? Por favor me guie com explicações apropriadas. Thx.

    
por gmaran23 29.11.2011 / 20:14

2 respostas

2

Sim. ASP clássico representa. Não conheço uma maneira de contornar isso que está embutido no ASP - você pode achar o StackOverflow mais conhecedor disso, como eu sugiro que seja um tópico de programação.

Seu modelo desejado é geralmente chamado de modelo "subsistema confiável" na documentação de Padrões e Práticas do ASP.Net (de anos atrás).

No passado, usei uma página do ASP.net para fazer a escrita, chamada via WinHTTP a partir de uma página ASP; usar um objeto COM com sua própria identidade especificada é a outra alternativa. Você pode (facilmente) converter a página em ASP.Net e usá-la apenas com a representação desativada. E depois há a opção "call RevertToSelf ()", que esquece sua identidade de thread; você pode precisar de um objeto COM para fazer isso para o seu segmento também, da memória novamente.

Editar: Ou use um banco de dados que seja executado como uma identidade diferente; o sistema de arquivos é apenas problemático porque é muito fácil de usar!

Além disso, se todos os usuários gravarem no mesmo arquivo, o esquema "gravar em um log" não será viável quando vários usuários o acessarem simultaneamente e, na melhor das hipóteses, introduzirá um atraso nesse cenário.

Se cada usuário precisar gravar apenas em seu próprio log (e você não quiser que a atualização seja feita muito cedo enquanto estiver gravando para evitar problemas de simultaneidade), você poderá simplesmente conceder permissão de gravação a esses usuários para essa pasta. Sem Ler, é um pouco inútil; sem realmente atacar a caixa (é o Windows Integrated, então você está em uma intranet) seria difícil para eles acidentalmente superpopular o nome de usuário e DoS a máquina.

    
por 01.12.2011 / 00:02
1

Verifique se você não tem o executeinMTA definido como true. Você verifica isso nas configurações asp do site.

    
por 29.11.2011 / 23:46