Descrição
Neste artigo iremos abordar como resolver problemas de permissão de gravação em diretórios de aplicações web rodando em Servidor IIS (durante upload de arquivos).
Pre-requisitos
Servidor IIS – local ou integrado com domínio e com suporte a paginas ASP
Projeto – ASP file upload
http://www.motobit.com/dlldownload/ScptUtl/ScptUtl-eval-2-3-1-x64.exe
Instalação
Instale o servidor windows 2003 X64
Instale o servidor de aplicação via Application Server through Control Panel > Add or Remove Programs > Add/Remove Windows Componentes
Habilite Active Server Pages no World Wide Web Service e pressione OK
Navegue no diretório c:\inetpub\wwwroot\ e crie a pasta root para o seu servidor web de testes (c:\inetpub\wwwroot\siteroot\) depois crie o diretório para uploads de arquivos dentro da pasta root
Instale o projeto ASP file upload executando-o em c:\temp\ ScptUtl-eval-2-3-1-x64
Crie um arquivo asp básico para testes em c:\inetpub\wwwroot\siteroot\
—INICIO DO CODIGO—
<%
Dim Form: Set Form = CreateObject(“ScriptUtils.ASPForm”)
If Form.State = 0 Then
Form.Files.Save “c:\inetpub\wwwroot\siteroot\uploads”
Description = Form(“Description”) ‘Do something with <input name=description>
Else
‘Handle other form states, errors.
End If
%>
<Body>
<form method=”post” ENCTYPE=”multipart/form-data”>
<input type=”submit” value=”Upload the files >>”><br>
File 1 : <input type=”file” name=”File1″><br>
File 2 : <input type=”file” name=”File2″><br>
Description : <input name=”Description”>
</form>
</body>
—FIM DO CODIGO—
Acesse o IIS e configure um site padrao para este teste
Clique em New > Web Site , para adicionar um novo site.
Digite um nome para para este site
Configure parâmetros para “endereço ip pelo qual o site irá responder assim como nome de cabeçalho do site “host header”.
Configure o caminho físico onde irão ficar os arquivos do site.
Configure permissões de Read e Run Scripts para este site.
Navegue em properties e Documents no novo site e configure o arquivo upload.asp como a pagina padrão deste site.
Teste 1 – carregue o site padrão de teste e tente enviar 02 arquivos para este servidor
Você recebera a seguinte mensagem de erro
“access denied” = “acesso negado”
Adicione as permissões de escrita “WRITE ACCESS” para o grupo “everyone” / “todos”
Nas telas acima voce pode visualizar o processo w3wp.exe (referente ao IIS) tentando criar o arquivo “abc.txt” e teve como resposta acesso negado HANDSON\IUSR_DC1 (o usuário local que o IIS usa para executar o site padrão de testes)
Você encontrará o seguinte erro via Proccess Monitor
Clique duas vezes sobre a linha que deseja verificar mais informações sobre.
Veja que o log é mais detalhado
Verifique as permissões NTFS no diretório de uploads
Verifique que o usuário HANDSON\IUSR_DC1 possui permissões especiais mas não as permissões para modificar neste mesmo diretório.
É melhor utilizar um usuário especifico para cada aplicação que for ser hospedada neste servidor.
Crie um usuário (domain user) conforme este exemplo e dê a ele permissões neste web site via IIS e também ao diretório onde estarão os arquivos desta aplicação (principalmente para o diretório upload “change”.
Teste 2 – Carregue o site novamente e faça o upload de 2 arquivos para este servidor apos fazer as alterações necessárias.
Você perceberá que o resultado será diferente do teste anterior.
Resultado – “SUCCESS” , SUCESSO
Veja que os 2 arquivos foram criados no diretório “uploads” desta aplicação web.
Verifique também via process monitor que o arquivo foi criado com sucesso para o usuário que roda a aplicação (foco deste artigo).
Resolvendo problemas
1. Utilize das ferramentas sysinternals http://technet.microsoft.com/en-us/sysinternals/bb842062
2. filemon.exe foi retirado e substituído pelo process monitor procmon.exe
3. utilize como campo pesquisa o nome do processo, visto em taskmgr.exe “w3wp.exe” quando for fazer resolução de problemas para IIS
Melhores praticas
1. Para cada aplicação criada ou executada neste servidor (web) crie um usuário (local no servidor ou de domínio)
2. Configure este usuário como o usuário que irá executar/rodar a aplicação “authentication methods” na aba de segurança do IIS “ IIS Directory Security”
3. Permita que este usuário tenha acesso NFTS no diretório da aplicação quando necessário (para gravar arquivos/enviar arquivos)
a. Quando utilizar o mesmo diretório para aplicação web e também para serviço FTP publicado lembre-se de utilizar um grupo dedicado para simplificar a administração.
Links
Sysinternals http://technet.microsoft.com/en-us/sysinternals/bb842062
Projeto ASP file upload
http://www.motobit.com/dlldownload/ScptUtl/ScptUtl-eval-2-3-1-x64.exe
Servidor IIS – www.iis.net