O usuário ApplicationPoolIdentity não pode modificar arquivos na pasta compartilhada no Windows Server 2008

3

Estou criando diretórios e gravando arquivos em uma pasta compartilhada em meu aplicativo da Web que está sendo hospedado no Windows Server 2008. Estou executando o pool de aplicativos com uma identidade de ApplicationPoolIdentity.

Para ter uma idéia da minha configuração até o momento, defini permissões para a raiz do diretório raiz do meu aplicativo Web para dois usuários diferentes: "IUSR" e "IIS APPPOOL \ MYPOOL". Estou usando o nome "MYPOOL" como o nome do meu pool de aplicativos, por isso é fácil fazer referência.

O aplicativo não pode modificar e gravar em uma pasta compartilhada. Cliquei com o botão direito na pasta compartilhada na qual estou criando diretórios e gravando e cliquei na guia "Segurança". Então eu cliquei em "Editar". Em objetos, eu verifiquei "Computador". Então, em LOCATION, tentei a máquina / servidor executando meu aplicativo da web. Eu não consegui encontrar meu usuário "MYPOOL", no entanto, sob os usuários. Tentei seguir este link, mas não foi muito completo. Eu não sei qual usuário usar. Eu continuo a receber uma exceção System.IO porque não tem permissões. Depois que eu souber qual usuário usar, terei que conceder permissões de "Modificar" ao diretório "ExportPath".

Isso não funcionou para mim: link

Para um teste rápido, criei uma página fictícia chamada FilePermissionsTest.aspx e coloquei algum código para gravar um arquivo para criar um diretório e gravar um arquivo no meu evento Page_Load do código por trás. Mas eu não cheguei longe o suficiente para testá-lo porque ele não vai escrever o arquivo.

...

<div>
Check to see if the file "_File_Permissions_Test.txt" was written to <% Response.Write(Data.ConfigurationHelper.ValueFromConfiguration("ExportPath", Nothing))%> 
</div>

...

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim exportPath As String = Data.ConfigurationHelper.ValueFromConfiguration("ExportPath", Nothing)
    If exportPath = String.Empty Then Return
    Dim exportDirectory As DirectoryInfo = Directory.CreateDirectory(exportPath)

    Dim writer As StreamWriter = File.CreateText(Path.Combine(exportDirectory.FullName, "_File_Permissions_Test.txt"))
    writer.WriteLine("TESTING... " + DateTime.Now().ToString)
    writer.Flush()
    writer.Close()

End Sub
    
por MacGyver 20.07.2011 / 03:19

2 respostas

3

Se você estiver executando o pool de aplicativos usando uma identidade especificada, conceder permissão para a conta da máquina não funcionará. Você deve executar seu AppPool com uma conta de domínio e conceder a essa conta as permissões apropriadas para a pasta compartilhada. O uso de uma conta local também não funcionará se a pasta compartilhada estiver em um computador remoto.

Se você não tiver um domínio, poderá executar o AppPool com LocalSystem, e isso deverá funcionar com a permissão da conta da máquina para a pasta compartilhada. Mas isso provavelmente seria inferior a uma perspectiva de segurança.

    
por 20.07.2011 / 03:39
0

Você deve ter inserido o nome do computador e não o ApplicationPoolIdentity. Esse foi o seu problema. Experimente! Deve funcionar.

    
por 09.08.2011 / 19:22