Tenha vários sites (2) hospedados no IIS com PHP. Cada site é executado em seu próprio pool de aplicativos, portanto, cada instância do w3wp.exe
(IIS Worker Process) e php-cgi.exe
é executado sob a respectiva Identidade do Pool de Aplicativos.
Eu tenho uma pasta C:\Web
contendo os arquivos relacionados ao servidor web. A estrutura do diretório é a seguinte:
C:\WEB
├───AVP
│ ├───1.0
│ │ └───wwwroot
│ │ ├───api
│ │ ├───images
│ │ ├───scripts
│ │ └───styles
│ ├───PHPLogs
│ └───Sessions
├───Dev01
│ ├───PHPLogs
│ ├───Sessions
│ └───wwwroot
└───IISLogs
├───W3SVC
└───W3SVC1.old
Estou tentando definir minhas permissões para que cada site não possa acessar os arquivos de outros sites, caso um script em um site tenha uma vulnerabilidade.
O que eu tentei:
Removi as permissões do grupo 'Usuários' em C:\Web
, pois as identidades do pool de aplicativos são membros do grupo Usuários. Em seguida, eu adicionaria permissão explícita para cada identidade do pool de aplicativos em seu próprio diretório. IE 'IIS AppPool\Site1' teria permissões de leitura/gravação em C:\Web\AVP
, mas não em C\Web\Dev01
. Porém, há uma complicação: A C:\Web
pasta também é compartilhada pela rede - Isso é usado para que eu possa editar os arquivos da web de outras máquinas. Fiz isso com o menu ‘Compartilhamento avançado’ e atribuí uma permissão de compartilhamento a um usuário:
Isso funciona, no entanto, se eu remover apenas o grupo 'Usuários' de C:\Web
(e subpastas), as instâncias do PHP ainda poderão acessar os arquivos. Também preciso remover permissões de 'Usuários autenticados' (que não entendo totalmente) para impedir que minhas identidades de pool de aplicativos tenham acesso aos arquivos. No entanto, fazer isso interrompe o acesso pela rede ...
Qual a melhor maneira para fazer isto?
Acredite que posso ter resolvido isso. Parece que para um usuário poder acessar uma pasta/arquivo pela rede, ele precisa de permissões de compartilhamento (veja a imagem no OP) e permissões NTFS concedidas.
Normalmente, o grupo 'Usuários Autenticados' parece se encarregar de conceder permissões NTFS aos usuários da rede, mas obviamente não neste cenário.
Para corrigir isso, simplesmente removi as permissões dos grupos 'Usuários' e 'Usuários autenticados' e, em seguida, adicionei permissões para identidades específicas do pool de aplicativos a cada pasta, conforme planejado. Então, para permitir o acesso pela rede, concedi permissões NTFS especificamente ao usuário 'NetworkFilesAdmin' no
C:\Web
.Isso funciona bem - não tenho certeza se essa é a melhor maneira?