Microsoft Corporation
Data de publicação: Abril de 2003
Resumo
Muitas empresas precisam ou são obrigadas a hospedar inúmeros aplicativos Web em
um único servidor Web. Nessas circunstâncias, os recursos do Microsoft® Windows
Server™ 2003 e Internet Information Services (IIS) 6 podem ajudar a criar
limites eficazes entre esses aplicativos. Com isso, os administradores Web
podem impedir que os recursos de um determinado aplicativo sejam acessados por
outros aplicativos e podem também implementar recursos de desempenho e
confiabilidade internos no sistema operacional e no IIS 6.0. No desenvolvimento
de aplicativos Microsoft .NET Framework, o isolamento e a confiabilidade podem
favorecer o uso de projetos de aplicativos isolados e montagens lado a lado.
Este documento apresenta uma visão geral dos benefícios, dos métodos, das
tecnologias e do que deve ser levado em conta na configuração de aplicativos
isolados.
Introdução
Este documento discute o tópico geral de isolamento de aplicativos, na medida em
que isso está relacionado com aplicativos Web executados em servidores Windows
Server 2003 nos quais o IIS 6.é executado no modo de isolamento do processo de
trabalho. O isolamento tem a ver com o grau de separação entre dois aplicativos
Web executados em um servidor. Neste documento, o significado do termo
“aplicativo Web” é bastante amplo; ele abrange os processos, os arquivos, e
mesmo os usuários, que usam o aplicativo. Os aplicativos são isolados entre si
de forma que um determinado aplicativo seja impedido de acessar os recursos
empregados por outro aplicativo.
Benefícios do isolamento
As empresas estão cada vez mais interessadas no isolamento por sua oportunidade
de reduzir custos por meio da consolidação do servidor. Tendo em vista que as
capacidades de hardware melhoram sensivelmente com o tempo, menos servidores
são necessários para fornecer os mesmos aplicativos. Embora isso diminua os
custos de implementação e manutenção, pode criar dificuldades logísticas quando
existe um interesse especial em manter limites claros entre aplicativos que são
executados permanentemente em um único servidor.
Em algumas situações, cada LOB (Line of Business, linha de negócios) de uma
organização é, essencialmente, um cliente separado do grupo de TI responsável
pela infra-estrutura do aplicativo. Por exemplo, uma organização adquirida
provavelmente concorrerá com outras partes da organização adquirente.
Conseqüentemente, a necessidade comercial de criar barreiras eficazes entre os
aplicativos que atendem a cada LOB e de proteger dados confidenciais é real.
Outro exemplo em que existe uma nítida necessidade de alto isolamento é o de um
ISP que hospeda sites para vários clientes. Um determinado cliente não deveria
ser capaz de visualizar os arquivos ou bancos de dados que estão sendo usados
por outros sites no servidor.
Em outros casos, uma empresa pode oferecer aplicativos Web e outros recursos
técnicos a parceiros comerciais concorrentes entre si. Portanto, o nível de
isolamento que as empresas precisam oferecer aos aplicativos empregados por
clientes, parceiros ou unidades de negócios particulares que usam o mesmo
servidor é alto. Por exemplo, é fundamental poder configurar o software de um
parceiro que acessa um banco de dados de modo que esse aplicativo não possa
acessar o banco de dados de outro parceiro.
Outro benefício do isolamento de aplicativos é a possibilidade de desenvolver a
infra-estrutura dos aplicativos, do servidor e da rede para melhorar a
capacidade de distribuição de conteúdos e aplicativos. Por exemplo, talvez você
queira inserir um conteúdo em um armazenamento de arquivo remoto para que possa
ser compartilhado por mais de um servidor. Alternativamente, talvez você queira
hospedar diferentes conteúdos do aplicativo em diferentes servidores de
arquivos, para isolar ainda mais cada aplicativo LOB, mas compartilhar o mesmo
servidor Web como um front end.
As seções a seguir discutem várias abordagens para obtenção de um alto nível de
isolamento.
Isolamento físico
É possível alcançar o nível mais alto de isolamento quando os aplicativos são
hospedados em computadores completamente diferentes. Obviamente, esse recurso
oferece o nível máximo de isolamento para os aplicativos, mas é também o mais
caro, pois exige licenças adicionais de hardware e servidor para fornecer
suporte a cada aplicativo. Contudo, em aplicativos LOB de missão crítica, em
que as informações são valiosas, provavelmente essa é a melhor opção.
Isolamento virtual
Você pode também criar aplicativos isolados por meio de servidores virtuais.
Usando softwares como o Connectix VPC ou VMware, que lhe permitem criar vários
servidores virtuais que podem ser executados como tarefas em um único sistema
operacional, você pode criar vários servidores particionados de maneira
funcional. Portanto, os aplicativos podem ser isolados consideravelmente, além
de poderem ser executados no mesmo hardware. Pelo fato de o desempenho dos
sistemas virtuais não ser tão bom quanto o de computadores individuais, o
isolamento virtual oferece um alto nível de isolamento, mas compromete o
desempenho. Outro custo incremental é o de licença de software para os sistemas
virtuais. Além das licenças de software necessárias para o servidor que hospeda
os sistemas virtuais, você tem de adquirir também licenças de software
distintas para o sistema operacional e os aplicativos em cada sistema virtual,
como se cada sistema virtual fosse um sistema individual.
Isolamento configurado
Utilizar o isolamento configurado significa tirar vantagem de limites de
isolamento naturais, como processos, identidades de segurança, listas de
controle de acesso (ACLs) e espaços de nome que ocorrem pelo fato de os
aplicativos serem executados em um servidor Web. O nível de isolamento
alcançado por meio do isolamento configurado não é tão grande quanto o físico e
virtual. Entretanto, na maioria das vezes o isolamento configurado é uma opção
razoável para equilibrar o uso de recursos, facilitar administração e
aproveitar ainda mais os investimentos em hardware, software e licenciamento.
Mais do que nunca, os novos recursos do Windows Server 2003 e IIS 6.0 tornam
essa opção uma solução mais confiável, segura e escalonável.
Isolamento por meio de recursos do sistema operacional
No Microsoft Windows Server 2003, há inúmeros recursos que permitem criar
ambientes isolados para os aplicativos. A Delegação restrita e a Transição
de protocolo permitem que você “transponha” um contexto de segurança do
usuário para servidores de arquivos, independentemente do protocolo usado para
autenticar o usuário no IIS. Entre as melhorias na qualidade de serviço (QoS)
está um agendador de pacotes integrado com o IIS, que permite que um
administrador limite a quantidade de largura de banda disponível para um
aplicativo. O Windows System Resource Manager (WSRM) pode ser usado com o
Windows Server 2003, Enterprise Edition e o Windows Server 2003, Datacenter
Edition. Com o WSRM, o administrador pode controlar exatamente quanto um pool
de aplicativos pode consumir da CPU quando a carga da CPU é insuficiente.
Isolamento por meio da configuração do IIS
No IIS 6.0, o isolamento de aplicativos foi desenvolvido como um componente
primário da arquitetura. Todo site tem capacidade de hospedar um ou vários
aplicativos, aos quais se pode atribuir a função de executar um pool de
processos especificado, chamado pool de aplicativos. Um pool de
aplicativos é servido por um ou mais processos de trabalho, pode ser
configurado independentemente para configurações relacionadas com eficiência e
pode ser configurado para executar no contexto de uma conta de usuário
designado.
Há vários objetivos na configuração de isolamento de aplicativos:
- Confiabilidade.Se um aplicativo falhar, não deve afetar outros aplicativos. Além disso, deve
ser possível especificar ações exclusivas de recuperação para diferentes
aplicativos.
- Segurança.Se um aplicativo estiver executando um código mal-intencionado de um invasor
(ou possivelmente do próprio autor do aplicativo), outros aplicativos são
protegidos dos efeitos desse código mal-intencionado e barreiras eficazes são
desenvolvidas para impedir que o invasor entre no “espaço” de outro aplicativo.
- Desempenho. Um aplicativo que utiliza exageradamente os recursos não
deveria afetar a eficácia de outros aplicativos. Entretanto, os aplicativos que
exigem recursos adicionais deveriam poder alocar esses recursos mediante
solicitação.
Combinando as capacidades do IIS 6.0 com as do Windows Server 2003, você pode
implementar eficazmente o isolamento e alcançar as metas que acabamos de
especificar. Além disso, melhorias no FTP e nas Extensões de Servidor do
Microsoft FrontPage® ajudam a aumentar o nível de isolamento e segurança desses
aplicativos.
O restante deste documento abordará a capacidade do Microsoft Windows Server
2003 e do IIS 6.0 de criar aplicativos com um alto nível de isolamento
executados em um único servidor. Não há nenhuma técnica ou tarefa
administrativa exclusiva que alcance essa meta; porém, por meio de técnicas
associadas, você pode implementar eficazmente o isolamento de aplicativos.
Usando o isolamento para melhorar a confiabilidade
Uma das principais metas no desenvolvimento da arquitetura do IIS 6.0 foi
melhorar o isolamento entre aplicativos e minimizar as compensações de
desempenho. Isso se tornou uma realidade ao remodelarmos a arquitetura do IIS
de forma que seu desempenho, confiabilidade e segurança aumentassem. Os
princípios básicos dessa nova arquitetura, no que diz respeito a essa maior
confiabilidade, englobam os seguintes elementos:
- A criação de um manipulador de solicitações, o HTTP.sys, executado no núcleo do
sistema operacional. A função do HTTP.sys é escutar solicitações HTTP e de
enfileiramento a uma fila de solicitações para que o pool de aplicativos as
recupere. O HTTP.sys não carrega nem executa nenhum código de aplicativo no
modo de usuário (como as páginas ASP).
- A execução de aplicativos Web em processos configuráveis, variados e isolados,
denominados processos de trabalho, que são executados com o nome de W3wp.exe.
Isso é quase a mesma coisa que “alto” isolamento no IIS 5.0 ou execução
“externa ao processo”, com a exceção de que o desempenho é bem melhor porque o
processo troca dados diretamente com o HTTP.sys, em vez de empacotar dados
usando o principal processo do servidor Web, o Inetinfo.exe, como
intermediário.
- A inclusão de um novo processo administrativo, o componente Administração e
Monitoração de Serviços WWW (WWW Service Administration and Monitoring), cuja
função é dupla:
- Criar o link entre o manipulador de solicitações HTTP e os aplicativos Web.
- Monitorar e manter a eficiência dos processos de trabalho.
Melhor isolamento com pools de aplicativos
Tecnicamente, um pool de aplicativos é um objeto de configuração definido por um
limite lógico de processo usado pelo mapeador de espaços de nome HTTP.sys para
encaminhar solicitações ao processo de trabalho correto. Na prática, passa a
ser a tarefa extremamente simples de usar o Gerenciador do IIS para criar um
pool de aplicativos, como o “Projeto32-AltamenteRestrito”, e em seguida
instruir os programas contidos em sites e diretórios a executar esse ou outros
pools de aplicativos, de acordo com sua necessidade (veja a Figura 1).

Figura 1 Atribuindo programas a pools de
aplicativos no IIS 6.0
Na verdade, os pools de aplicativos permitem que você agrupe ou isole
aplicativos de acordo com suas necessidades técnicas, administrativas e
comerciais.
Usando pools de aplicativos para isolar aplicativos de
clientes ou unidades de negócios
Os pools de aplicativos criam limites de processo entre aplicativos de
diferentes sites ou diretórios no IIS. Isso é ideal para provedores, em que os
aplicativos do cliente precisam ser isolados dos outros, ou para a situação
usada anteriormente, em que os aplicativos LOB precisam ser isolados entre si.
Consulte a seção Segurança, neste documento, para obter detalhes sobre como
usar ACLs para reforçar o isolamento de aplicativos em nível de arquivo.
Usando pools de aplicativos para isolar aplicativos não
confiáveis
O componente Administração e Monitoração de Serviços do IIS conta com recursos
de reciclagem e eficiência que podem reiniciar automaticamente um pool de
aplicativos. Comprovadamente, esses recursos melhoram a confiabilidade de
maneira significativa. Por exemplo, imagine um importante aplicativo que você
não pode, em hipótese alguma, manter off-line, embora ocasionalmente ele pare
de responder. Ao colocar esse aplicativo em seu pool de aplicativos particular,
você isola esses efeitos sobre outros aplicativos. Isso aumenta a
confiabilidade geral de outros aplicativos executados no servidor. Além disso,
pelo fato de os pools de aplicativos serem monitorados individualmente e
poderem ser configurados automaticamente para que reiniciem quando pararem de
responder, a oferta de aplicativos não confiáveis é cada vez maior. Solucionar
problemas em um aplicativo desse tipo é também mais fácil porque ele pode ser
configurado para ser executado de acordo com seu próprio processo.
Reciclagem
Os critérios de reciclagem podem ser facilmente administrados por meio da caixa
de diálogo Propriedades de DefaultAppPool, como mostrado na Figura 2 a seguir.
A reciclagem pode ser acionada de acordo com vários parâmetros, como tempo de
atividade do aplicativo e número de solicitações, em intervalos programados,
com base no consumo de memória, ou de acordo com sua vontade.

Figura 2 Reciclando parâmetros que podem ser
usados com o IIS 6.0
A reciclagem pode aumentar o isolamento e a confiabilidade do aplicativo da
seguinte maneira:
- Atualizando aplicativos com problemas comprovados de degradação, antes de
pararem de responder. Na maioria dos casos desse tipo, por sua experiência com
o aplicativo, o administrador do IIS sabe que, antes de precisar ser
reiniciado, normalmente o aplicativo executará durante algum tempo.
- Reciclando os aplicativos que provavelmente afetam o desempenho de outros
aplicativos que estão sendo executados no servidor. Por exemplo, se houver
vazamento e consumo exagerado de memória em um aplicativo, você pode definir um
limite para o uso de memória que ativará um evento de reciclagem para o pool de
aplicativos.
Impactos da reciclagem de aplicativos
Quando um aplicativo é reciclado, qualquer informação armazenada no processo de
trabalho, como estado da sessão, é perdida. Para otimizar o desempenho e a
confiabilidade de seus aplicativos com o IIS 6.0, provavelmente você desejará
desenvolvê-los de forma que sejam reciclados sem perder dados sobre transações
em andamento. Por exemplo, você pode preservar os detalhes do estado da sessão
externamente ao processo usando o serviço ASPState no Microsoft
ASP.NET ou armazenar os dados no Microsoft SQL Server™.
O tempo de reinicialização dos aplicativos desenvolvidos para reciclagem é
otimizado para que seja o menor possível. Os aplicativos que exigem um longo
procedimento de reinicialização não terão um bom desempenho se as reciclagens
forem freqüentes. Você pode contornar esse problema programando o uso de
reciclagem para curtos períodos.
Resumindo, é possível que seus aplicativos possam ser executados lado a lado com
outras instâncias do mesmo aplicativo. Na configuração da reciclagem, você pode
escolher entre a reciclagem de sobreposição e não-sobreposição. A reciclagem de
sobreposição é a configuração padrão: o componente Administração e Monitoração
de Serviços WWW cria um novo processo de trabalho para processar qualquer nova
solicitação para o aplicativo antes que o processo de trabalho existente seja
encerrado. O processo de trabalho anterior é mantido em atividade até que
conclua o processamento das solicitações existentes ou até que ocorra um evento
de encerramento por tempo-limite — o que ocorrer primeiro. Durante esse
período, ambas as instâncias do aplicativo precisarão compartilhar recursos. Se
a reciclagem configurada for a de não-sobreposição, o componente Administração
e Monitoração de Serviços WWW encerrará o processo de trabalho antes de iniciar
um novo. Para obter informações sobre com configurar a reciclagem de
sobreposição e não-sobreposição, consulte
DisallowOverlappingRotation na Ajuda do IIS 6.0 (http://www.microsoft.com/technet/prodtechnol/windowsserver2003/
proddocs/standard/ref_mb_disallowoverlappingrotation.asp,
site em inglês).
Integridade
O componente Administração e Monitoração de Serviços WWW também mantém a
integridade dos aplicativos testando periodicamente a capacidade de resposta de
um pool de aplicativos. Para não ser confundido com o comando ping de ICMP
(Internet Control Message Protocol, protocolo de mensagem de controle da
Internet), esse recurso consulta internamente o pool de aplicativos em um
intervalo configurável (a cada 30 segundos, por padrão) e aguarda uma resposta.
Se não houver nenhuma resposta, o componente Administração e Monitoração de
Serviços WWW encerra o processo de trabalho, registra um evento e inicia um
novo processo de trabalho. O IIS pode ainda ser configurando para não destruir
o processo de trabalho que falhou. Além de manter o processo de trabalho que
falhou, você pode determinar que um programa inicie quando esse evento ocorrer
para, desse modo, instanciar automaticamente a solução de problemas ou
ferramentas de relatório.
Para obter mais informações
sobre como isolar processos de trabalho prejudiciais,
consulte
Application Pool Health (http://www.microsoft.com/technet/prodtechnol/windowsserver2003/
proddocs/standard/ca_orphwrkrprocess.asp)
e
OrphanWorkerProcess (http://www.microsoft.com/technet/prodtechnol/windowsserver2003/
proddocs/standard/ref_mb_orphanworkerprocess.asp)
na Ajuda do IIS 6.0 (sites em inglês).
Rápida proteção contra falhas
A rápida proteção contra falhas pode proteger o servidor contra uma série de
falhas rápidas de processo de trabalho no mesmo pool de aplicativos desativando
esse pool. Quando um pool de aplicativos é desativado, o IIS remove-o do
serviço e coloca-o em um modo em que o driver de modo de núcleo (kernel)
retorna imediatamente a mensagem de erro 503, de serviço indisponível, a
qualquer solicitação para esse pool de aplicativos.
A quantidade de falhas e o intervalo no qual elas devem ocorrer são
configuráveis por pool de aplicativos. Quando a proteção rápida contra falhas é
ativada, as configurações de Limite do tempo de inicialização e do Limite do
tempo de desligamento são usadas como medidas de integridade do pool de
aplicativos (veja a Figura 3).

Figura 3 Opções de integridade oferecidas no IIS
6.0
Quando um processo de trabalho não inicia ou não encerra no prazo estipulado,
isso é considerado uma falha, que é adicionada ao número de falhas exigido para
colocar o pool de aplicativos off-line. Por padrão, a proteção rápida contra
falhas está configurada para desativar um pool de aplicativos, se ocorrerem
cinco falhas no aplicativo, no prazo de cinco minutos.
Uso funcional dos pools de aplicativos
Em alguns casos, é provável que você descubra a utilidade de usar um pool de
aplicativos para separar aplicativos cujos requisitos técnicos são diferentes.
Por exemplo, talvez você acabe descobrindo a utilidade de configurar todos os
aplicativos que exigem um componente COM particular em um único pool de
aplicativos, se for comprovado que o componente COM está com problemas. Além
disso, à medida que seus aplicativos sofrerem atualizações e melhorias, é útil
criar pools de aplicativos separados para as novas versões.
Domínios dos aplicativos .NET Framework
No Windows Server 2003, o ASP.NET usa o modelo de processamento de solicitações
do aplicativo no isolamento de processos de trabalho e, além disso, mapeia um
ou mais domínios dos aplicativos ASP.NET para cada processo de trabalho. Os
domínios de aplicativo dentro de um único processo de trabalho podem ser
reciclados independentemente e ter componentes, variáveis de sessão e outros
recursos privados. Desse modo, é possível contar com um nível adicional e um
melhor grau de isolamento.
.NET Framework e montagens lado a lado
Normalmente, quando um componente ou aplicativo é atualizado em um computador, a
versão antiga é removida e substituída pela versão mais nova. Quando a nova
versão não é compatível com a anterior, em geral outros aplicativos que usam
esse componente ou aplicativo param de funcionar. Com o .NET Framework, é
possível usar a execução lado a lado, que permite que várias versões de uma
montagem ou de um aplicativo sejam instaladas ao mesmo tempo, no mesmo
computador. Visto que várias versões podem ser instaladas simultaneamente, os
aplicativos gerenciados podem selecionar a versão a ser usada, sem afetar
outros aplicativos que usam uma versão diferente.
Por exemplo, os aplicativos podem se beneficiar das montagens lado a lado para
que outros aplicativos sejam instalados no mesmo computador que exige
diferentes versões de DLL, como MDAC, MFS, MSVCRT ou MSXML. Para obter mais
informações sobre esse tópico, consulte o apêndice, no fim deste documento.
Usando o isolamento para proteger os aplicativos
Uma das principais ferramentas para configurar o isolamento é utilizar ACLs,
autenticação e identidades de processo para criar limites de segurança eficazes
entre os aplicativos. Embora o isolamento configurado não se equipare ao grau
de isolamento proporcionado por servidores independentes, você pode usar ACLs
com eficácia para impedir que um aplicativo acesse os arquivos de outro
inadvertidamente ou propositadamente. Por exemplo, um administrador de site
pode criar um script para navegar pelo diretório ou alterar arquivos de outro
aplicativo usando o objeto do sistema de arquivos. O administrador poderia
ainda desenvolver um aplicativo ASP que lê dados de arquivos de outro site,
como um banco de dados de cliente. O uso adequado de ACLs e outros limites de
autorização no Windows Server 2003 pode evitar essa situação.
Configurando a identidade do pool de aplicativos
Uma das regras mais importantes a ser lembrada ao proteger um servidor é que
todos os processos devem ser executados como uma conta de usuário ou uma conta
interna. Na maioria dos casos, esse requisito é óbvio, porque os recursos do
sistema de arquivos exigidos ou solicitados por um aplicativo normalmente são
abertos no contexto em que o usuário faz a solicitação. Contudo, um
desenvolvedor de aplicativos pode optar por criar um aplicativo de tal forma
que os recursos do sistema de arquivos sejam abertos no contexto da conta usada
para abrir o processo pai que hospeda um aplicativo, em vez de o usuário.
Examinemos o que ocorre quando um usuário anônimo abre um aplicativo. O usuário
faz uma solicitação ao aplicativo e é automaticamente atribuído à conta anônima
(em geral, a conta IUSR_<Nome_do_computador>). O arquivo
solicitado é aberto e executado com as credenciais do usuário anônimo, se as
permissões apropriadas estiverem presentes no Gerenciador do IIS e nas ACLs, no
arquivo solicitado. Entretanto, se em seguida o aplicativo chamar a função
Win32API RevertToSelf, os acessos subseqüentes ao arquivo, feitos do
aplicativo, ocorrerão como a conta de usuário Serviços de rede. A conta de
usuário Serviços de rede é a conta interna atribuída como identidade dos pools
de aplicativos.
Contas internas
Mesmo se a conta de usuário Serviço de rede tiver direitos restritos no
servidor, os pools de aplicativos que compartilham essa identidade têm direitos
recíprocos aos recursos um do outro quando as ACLs são configuradas para
permitir acesso a essa conta interna. Você provavelmente desejará atribuir uma
identidade particular a cada pool de aplicativos para isolar de forma eficaz os
aplicativos, como mostrado na Figura 4.

Figura 4 A identidade padrão de um pool de
aplicativos é a conta de usuário Serviços de rede
Pelo fato de um aplicativo poder ser executado como a identidade do pool de
aplicativos, ao selecionar uma identidade de pool de aplicativos, você deve
escolher uma que tenha a quantidade mínima de privilégios exigidos por seu
aplicativo. No caso em que a identidade do processo de trabalho é configurada
como uma conta com privilégios superiores, como Sistema Local, é provável que o
aplicativo receba permissões além do escopo do usuário autenticado. Em vez
disso, experimente configurar a identidade do processo de trabalho como uma
conta com privilégios inferiores para impedir que um aplicativo eleve seus
privilégios dessa maneira.
Atribuindo uma conta
Ao configurar uma conta de usuário individual como a identidade do pool de
aplicativos, você deve tornar essa conta de usuário um membro do grupo local
IIS_WPG. O grupo IIS_WPG é criado para simplificar o processo de configuração
de autorizações e direitos necessários em todos os recursos de sistema que um
processo de trabalho deve acessar para funcionar apropriadamente, até para
abrir pools de aplicativos. Quando o IIS é instalado ou quando novos pools de
aplicativos são criados, o grupo IIS_WPG é incluído em todas as ACLs de
recursos que o pool de aplicativos deve acessar. Contudo, não é necessário
adicionar o IIS_WPG em diretórios e arquivos de conteúdo de um site. Na
verdade, se você necessitar de um alto nível de isolamento entre os usuários,
mas configurar ACLs que concedam acesso ao IIS_WPG, poderá diminuir o grau de
isolamento porque todos os aplicativos cujas contas de usuário são membros do
grupo IIS_WPG provavelmente têm acesso ao conteúdo uma da outra.
Conseqüentemente, você desejará adicionar ao grupo local IIS_WPG as contas que
criou para cada identidade de pool de aplicativos, mas não deve usar o grupo
IIS_WPG nas ACLs de arquivos e diretórios de conteúdo.
As contas usadas para a identidade de pool de aplicativos deveriam também ser
diferenciadas das contas anônimas e individuais de autores e proprietários de
site. As contas usadas para acesso anônimo ou para autores e proprietários de
site não devem ser adicionadas ao grupo IIS_WPG porque, dessa forma,
concederiam acesso a diretórios compartilhados entre pools de aplicativos, como
o cache de compactação e o cache de modelo ASP.
Além disso, se você configurar pools de aplicativos com uma outra identidade que
não seja a de Serviço_de_rede e seus aplicativos abrirem processos CGI,
precisará atribuir os seguintes direitos de usuário a contas designadas como
identidades de pool de aplicativos:
- Ajustar cotas de memória para um processo (SeIncreaseQuota).
- Substituir um processo em nível de token (SeAssignPrimaryToken).
Considerações sobre autenticação
A autenticação é o processo que comprova que você é um usuário válido de um
aplicativo. Uma vez comprovado como válido, atribui-se uma identidade ao
usuário, que é usada para restringir o acesso a recursos. Parte da criação de
limites de segurança entre os aplicativos destina-se a assegurar que as
identidades de seus aplicativos e usuários sejam organizadas de tal forma que
você possa gerenciar eficazmente a autorização do aplicativo e o acesso do
usuário aos recursos.
O IIS 6.0 aceita os seguintes tipos de autenticação: Anônima, Básica, Digest,
Digest Avançada, Certificados de Cliente, Windows Integrada (NTLM e Kerberos) e
Passport. Além disso, os aplicativos podem implementar métodos particulares de
autenticação; por exemplo, autenticação baseada em formulários no ASP.NET.
Lembre-se de que o método de autenticação que você usa pode afetar suas opções
de implementação de segurança.
Para aplicativos altamente isolados, é melhor criar uma única conta de usuário,
a ser usada para acesso anônimo ao aplicativo, e em seguida designar esse
usuário como o usuário anônimo, na guia Segurança de diretório das propriedades
do site (veja a Figura 5). Desse modo, você poderá configurar autorizações
(consulte a seção Configurando autorizações) de modo que os aplicativos abertos
pelo usuário anônimo estejam restritos a recursos apropriados. Uma identidade
exclusiva de usuário anônimo, associada a uma conta designada à identidade de
pool de aplicativos, oferece dois elementos essenciais para a criação de um
limite de segurança eficaz para o aplicativo.
Para configurar uma conta exclusiva de usuário anônimo para um site
- No Gerenciador do IIS, expanda o computador local, expanda a pasta Sites da Web,
clique com o botão direito no site que deseja alterar e, em seguida, clique em Propriedades.
- Na guia Segurança de diretório, em Autenticação e controle de acesso,
clique no botão Editar, como mostrado na Figura 5.

Figura 5 Guia Segurança de diretório de
propriedades do site
- Na caixa de diálogo Métodos de autenticação, digite o Nome de usuárioe Senha da conta para usar como acesso anônimo, como mostrado na Figura
6.

Figura 6 Configurando uma conta exclusiva de
usuário anônimo
- Clique em OK.
- Clique em OK.
Quando usar a autenticação Kerberos ou Básica, poderá usar a autenticação de
passagem UNC para determinar as credenciais a serem usadas para ganhar acesso a
um compartilhamento UNC, em um computador remoto. Os administradores podem
configurar o IIS para usar um conjunto permanente de credenciais ou submeter as
credenciais do usuário, conhecidas por autenticação de passagem (pass-trought),
ao servidor de arquivos ou dispositivo NAS. Por padrão, o IIS está configurado
para usar a autenticação de passagem, para a autenticação Básica e Kerberos, ao
trabalhar em um ambiente Windows Server 2003 e executar pools de aplicativos
com a identidade Serviços de rede. Você pode ainda configurar o Windows Server
2003 de modo que a autenticação de passagem seja possível a qualquer método de
autenticação.
Observação Use uma conta de domínio ao
atribuir uma identidade de pool de aplicativos, se pretende usar a autenticação
de passagem com a Kerberos. Para obter mais informações, consulte o informe
oficial
Deploying and Configuring
Internet Information Services
(IIS) 6.0 with Remotely
Stored Content on UNC Servers and NAS Devices (http://www.microsoft.com/technet/prodtechnol/windowsserver2003/deploy/
confeat/RemStorg.asp,
site em inglês).
Os aplicativos ASP.NET que usam autenticação baseada em formulários dependem
principalmente do uso de arquivos .config para controlar a autenticação. Os
arquivos .config do aplicativo podem conter nomes de usuário e senhas exigidos
para acessar os aplicativos ou podem consultar um banco de dados (exceto o SAM
local ou o Microsoft Active Directory®) para validar usuários. Os aplicativos
que usam a autenticação baseada em formulários aumentaram os limites dos
aplicativos, visto que a autenticação de um usuário é válida somente no
aplicativo autorizado.
Configurando autorizações
O princípio para reforçar eficazmente o isolamento de aplicativos depende do uso
apropriado da autorização. A autorização usa a identidade autenticada do
usuário, mesmo do usuário anônimo, para restringir o acesso aos recursos. Para
os nossos objetivos, o conceito de “usuário” é também estendido para a
identidade de pools de aplicativos, que estão autorizados a usar somente os
recursos exigidos pelo aplicativo.
Os métodos para reforçar a autorização englobam a configuração de ACLs em
conteúdos, permissões compartilhadas, a metabase e o Registro. Além disso,
outras técnicas podem ser usadas, como a autorização de URL que usa o
Gerenciador de autorizações de URL do Windows Server 2003 e a autorização nos
aplicativos ASP.NET.
Configurando ACLs em conteúdos
A configuração de ACLs ficará mais fácil se você tiver em mente dois princípios:
- Atribuir usuários a grupos e, em seguida, atribuir permissões de ACL com base
nesses grupos.
- Quando as permissões não são consentidas de modo explícito, o acesso é negado.
Ao implementar permissões, em geral os usuários exigem uma flexibilidade que não
foi preconcebida quando os aplicativos foram configurados pela primeira vez.
Para manter suas opções e facilitar a administração, experimente usar grupos
para abrigar as identidades de pool de aplicativos e, em seguida, atribua ACLs
a esses grupos. Por exemplo, ao configurar o isolamento de um “aplicativo X,”
crie um grupo, como “Processos do aplicativo X” e, em seguida, atribua a
identidade do pool de aplicativos do aplicativo X a esse grupo. Desse modo,
você terá várias comodidades:
- Se alterar a identidade do pool de aplicativos no futuro, precisará apenas
adicionar a nova identidade ao grupo Processos do Aplicativo X. Isso evita a
tarefa cansativa, e provavelmente propensa a erros, de alterar ACLs em todos os
recursos para o aplicativo.
- Você pode adicionar outros aplicativos no futuro (aplicativo Z) que necessitam
de acesso aos recursos usados pelo aplicativo X e, ao mesmo tempo, impedir que
o aplicativo X acesse recursos específicos usados pelo aplicativo Z. Em outras
palavras, o grupo Processos do aplicativo X conteria as contas de usuário para
as identidades do pool de aplicativos atribuídas tanto para o aplicativo X
quanto para o aplicativo Z, mas o grupo Processos do aplicativo Z conteria
apenas a identidade do pool de aplicativos do aplicativo Z.
- É provável que você precise permitir ou negar acesso a recursos para grupos de
pools de aplicativos. Por exemplo, talvez você deseje criar uma identidade
“Todos_os_aplicativosASP.NET” que tenha acesso a recursos específicos. Isso é
mais fácil quando as identidades do pool de aplicativos são removidas de contas
de usuário específicas.
Assim que você atribuir sua identidade de pool de aplicativos, precisará
atribuir permissões NTFS a recursos de sistema para reconhecer permissões em
uma variedade de locais, incluindo pastas usadas em bancos de dados, compilação
ou armazenamento em cache de scripts, diretórios de conexão para conexão
personalizada ou outros locais do sistema de arquivos que a identidade do pool
de aplicativos precisa acessar. Tenha cuidado para não permitir
involuntariamente que outra identidade de pool de aplicativos acesse os mesmos
recursos. Por exemplo, você provavelmente não desejaria atribuir permissões aos
Usuários ou ao grupo IIS_WPG. Lembre-se de que o acesso será negado, se não for
consentido de modo específico.
Além de configurar ACLs para que a identidade de pool de aplicativos tenha um
acesso apropriado, você precisa fornecer permissões aos usuários. Ao criar
grupos que designam funções, como Autores do aplicativo X e Usuários anônimos
do aplicativo X, e em seguida adicionar usuários a esses grupos e atribuir
permissões aos grupos, isso se torna mais fácil. É útil ter um grupo para os
usuários anônimos, se você desejar autenticar alguns usuários para conexão ou
auditoria, mas ainda assim isso apenas lhes permite acesso aos recursos como
usuários anônimos.
Configurando acesso a conteúdos UNC
Ao acessar conteúdos em outro servidor que usa caminhos UNC, você deve respeitar
tanto as permissões Compartilhamento quanto as NTFS. Na maioria das vezes, as
permissões Compartilhamento são bem flexíveis e as permissões NTFS são usadas
para proteger o conteúdo. O nível de bloqueio de suas permissões
Compartilhamento depende de suas necessidades específicas de segurança.
Na maioria dos aplicativos, as permissões de compartilhamento e NTFS em
conteúdos remotos serão atribuídas ao usuário autenticado que está solicitando
acesso. Se estiver usando a autenticação de passagem padrão, será o usuário
individual, como autenticado pelo IIS. Se estiver especificando uma conta de
usuário para acesso remoto, como exigido no IIS 4.0 e no IIS 5.0, o usuário
especificado necessitará de direitos de acesso tanto para as permissões
Compartilhamento quanto para as NTFS. Se o usuário especificado para acesso a
conteúdos remotos não for uma conta de domínio, seria melhor se a conta fosse
criada com o mesmo nome de usuário e senha no servidor IIS, bem como no
servidor de arquivos remoto. Isso facilita o gerenciamento de conteúdos remotos
no console do Gerenciador do IIS. Para obter mais informações sobre como
configurar autenticações e autorizações para servidores UNC e dispositivos NAS,
consulte o informe oficial
Deploying and Configuring Internet
Information
Services (IIS) 6.0 with Remotely
Stored Content on UNC Servers and NAS Devices (http://www.microsoft.com/technet/prodtechnol/windowsserver2003/
deploy/confeat/RemStorg.asp,
site em inglês).
Configurando ACLs na metabase
Além de configurar ACLs nos
recursos do sistema de arquivos, você pode configurar
ACLs nas chaves da metabase. Use o Metabase Explorer 1.6
ou o MetaEdit 2.2 para visualizar e configurar ACLs nas
chaves da metabase. O Metabase Explorer 1.6 pode ser
descarregado do site
http://www.microsoft.com/downloads/details.aspx?FamilyID=56fc92ee-a71a-4c73-b628-
ade629c89499&DisplayLang=en(site em inglês). O MetaEdit 2.2 pode ser descarregado do site http://download.microsoft.com/download/iis50/Utility/5.0/NT45/EN-US/MtaEdt22.exe.
No caso de sites e respectivos conteúdos em que as chaves correspondem a
propriedades existentes na metabase, o grupo IIS_WPG é configurado como Permitido
para as permissões: Consultar, Consultar propriedade desprotegida
e Enumerar Propriedade. As ACLs padrão nos pools de aplicativos
permitem que as contas IIS_WPG, Serviços de rede e Sistema local consultem as
propriedades da metabase para todos os pools de aplicativos.
Os aplicativos executados no contexto do pool de aplicativos não conseguem
alterar a metabase, a menos que o aplicativo possa ser executado no contexto de
segurança da identidade Administrador, que, por padrão, tem controle total
sobre a metabase como um todo. Isso pode ocorrer, por exemplo, quando o
administrador do sistema efetua logon ou autentica o aplicativo usando as
credenciais de Administrador e o aplicativo aceita as credenciais via
representação. Conseqüentemente, essas configurações não representam um sério
risco de segurança. Contudo, é possível aumentar o isolamento de aplicativos
fazendo os seguintes ajustes para isolar as configurações da metabase de um
site:
- Remova entradas para o IIS_WPG.
- Atribua a identidade do processo de trabalho: Ler
- Designe todos os autores ou administradores de site: Ler
- Conceda ao grupo Administradores e a qualquer outro administrador de sistema:
Controle Total
Configurando ACLs em chaves do Registro
Nos servidores protegidos, é recomendável que as permissões sejam reforçadas em
determinadas chaves do Registro. Você pode obter um resultado melhor usando um
modelo incluído no
console Security and Analysis Configuration (http://www.microsoft.com/windows2000/techinfo/planning/security/secconfsteps.asp,
site em inglês). A Microsoft fornece vários modelos para reforçar as
permissões, incluindo aquelas fornecidas no
Security Operations Guide (http://www.microsoft.com/technet/security/prodtech/win2000/secwin2k/default.asp,
site em inglês). Aumentar a segurança em geral aumentará a eficácia do
isolamento de aplicativos, mas é provável que você precise restringir
especificamente o acesso a partes do Registro que contêm informações sobre
objetos COM usados por seus aplicativos. Por exemplo, não deveria ser possível
a um usuário determinar que objetos estão registrados no servidor e, em
seguida, desenvolver um script para chamar esses objetos.
Isolamento COM+
As partições COM+ podem ser usadas para isolar aplicativos Web em suas partições
COM+ particulares. Isso é útil para evitar que um aplicativo Web acesse os
aplicativos COM+ privados, informações de configuração e dados de outro
aplicativo Web. As partições COM+ podem manter diferentes versões de seus
componentes COM personalizados. Por exemplo, se você hospedar sites para duas
empresas concorrentes, em que ambas usem o COM+ em seus aplicativos Web, poderá
usar partições COM+ para assegurar que um aplicativo Web de uma empresa não
acesse os componentes COM+ nos aplicativos Web da outra empresa. Se uma dessas
empresas solicitar que você altere determinados recursos em um aplicativo COM+
usados por ambas, você pode isolar a nova versão desse aplicativo COM+ na
partição que está vinculada ao aplicativo Web de ambas.
Para ativar as partições COM+ no IIS, configure o sinalizador AspUsePartitionna propriedade da metabase AspAppServiceFlags, no aplicativo. A partição é identificada por um
GUID (criado com o snap-in Gerenciador de serviços de componentes), que pode
ser configurado na propriedade da metabase
AspPartitionID (site em inglês). Se nenhuma partição for especificada,
será usada a partição padrão do sistema. Para obter mais informações, consulte
“Creating and Configuring COM+ Partitions”, no
COM+ SDK (http://go.microsoft.com/fwlink/?LinkId=2823,
site em inglês).
Importante Apenas uma única versão
de um componente COM+ pode ser usada em qualquer pool de aplicativos, mesmo se
esse recurso for configurável no aplicativo. Por exemplo, se o aplicativo Ap1
usa a versão 1.0 de um aplicativo COM+ personalizado, chamado Shop.dll, e o
aplicativo Ap2 usa a versão 2.0 do Shop.dll, o Ap1 e o Ap2 não devem estar no
mesmo pool de aplicativos. Se estiverem, será carregada a versão Shop.dll do
aplicativo que for carregado primeiro, e o outro aplicativo será forçado a
usá-la até que os aplicativos sejam descarregados.
Autorização de URL
O Gerenciador de autorizações e a Autorização de URL são recursos do .NET
Framework que foram estendidos ao sistema operacional Windows Server 2003.
Conseqüentemente, esses recursos estão disponíveis no ASP e em outros
aplicativos. O Windows Server 2003 e o IIS 6.0 permitem que o Gerenciador de
autorizações e a Autorização de URL sejam usados em conjunto para criar
conjuntos de regras que autorizam o acesso a URLs com base nas funções do
usuário. As funções podem ser definidas de inúmeras formas, incluindo LDAP
(Lightweight Directory Access Protocol, protocolo leve de acesso a diretórios),
consultas, funções personalizadas do usuário e scripts do Gerenciador de
autorizações (BizRules). Isso é bem diferente de aplicar ACLs a arquivos,
porque a participação de funções pode ser determinada por consulta no momento
da solicitação. Por exemplo, você poderia autorizar os funcionários de uma
empresa, que tivessem sido admitidos há mais de 90 dias, a acessar uma URL
específica. Quando um funcionário atingisse o 91º dia de trabalho, ainda que
isso estivesse definido por suas especificações, o acesso seria concedido sem
precisar alterar as ACLs ou a participação em grupos locais/de domínio. Para
obter um melhor nível de isolamento, você poderia definir uma regra de modo que
todos os funcionários ou clientes da Empresa A possam acessar o aplicativo da
Empresa A e todos os outros sejam negados.
Para obter mais informações
sobre o Gerenciador de autorizações, consulte
Authorization Manager na documentação do produto Windows Server 2003 (http://www.microsoft.com/technet/prodtechnol/windowsserver2003/
proddocs/standard/default.asp,
site em inglês). Para obter mais informações sobre a Autorização de URL,
consulte
URL Authorization na Ajuda do
IIS 6.0
(http://www.microsoft.com/technet/prodtechnol/windowsserver2003/
proddocs/standard/default.asp,
site em inglês).
Isolamento de usuários de FTP
O IIS 6.0 também conta com um servidor FTP para permitir que os usuários
carreguem ou descarreguem arquivos. Nos locais em que o FTP está implementado,
configurar seu servidor de forma que os usuários de FTP não possam navegar nos
diretórios de outros usuários é uma etapa fundamental da segurança do servidor.
O IIS 6.0 oferece esse recurso com isolamento de usuários de FTP. Quando
ativado, um usuário não consegue navegar acima da árvore de diretório, porque o
nível mais alto de diretório do usuário aparece como a raiz do serviço FTP.
Dentro do site específico do usuário, ele ainda pode criar, modificar ou
excluir arquivos e pastas. O isolamento de usuários de FTP tem três
configurações disponíveis para restringir usuários, como mostrado na Figura 7,
a seguir.

Figura 7 O isolamento de usuários de FTP oferece
três opções para restringir o acesso de usuários
O isolamento de usuários de FTP conta com duas maneiras de isolar os usuários:
Isolar usuários e Isolar usuários usando o Active Directory.
Isolar usuários
Esse modo autentica usuários em relação a contas locais ou de domínio antes de
receberem permissão para acessar o diretório base correspondente ao seu nome de
usuário. Todos os diretórios base de usuário estão em uma estrutura de
diretórios, sob um único diretório raiz do FTP, no qual todo usuário é
colocado, ficando restrito ao respectivo diretório base. Nesse modo, o
diretório base recebe o mesmo nome do usuário autenticado. Assim que os
usuários são validados, são automaticamente colocados no diretório que
corresponde ao respectivo nome de logon, mas não recebem autorização para
navegar fora de seu diretório base. Se os usuários precisarem acessar pastas
compartilhadas dedicadas, você pode também estabelecer uma raiz virtual. Esse
modo pode usar o serviço Active Directory, mas não o exige.
Isolar usuários usando o Active Directory
Quando você configura seu servidor FTP para isolar usuários que utilizam o
Active Directory, o diretório base de cada usuário pode residir em um caminho
de rede arbitrário. Nesse modo, você tem a flexibilidade de distribuir os
diretórios base dos usuários em vários servidores, volumes e diretórios, de uma
maneira adequada à configuração da rede, e o nome do diretório base pode ser
diferente do nome de usuário autenticado. Isso pode ser realizado por meio de
ADSI para configurar as propriedades msIIS-FTPDir e msIIS-FTPRoot
do objeto do usuário no Active Directory. Para obter mais informações sobre
como configurar essas propriedades com os scripts IISFTP.VBS, consulte
Setting Active Directory User Isolation na Ajuda do IIS 6.0 (http://www.microsoft.com/technet/prodtechnol/iis/Default.asp,
site em inglês). Observe que a Ajuda do IIS 6.0 relaciona incorretamente esses
atributos como FTPRoot e FTPDir. Essas propriedades não são expostas no console
Usuário e Computadores do Active Directory.