Estou tentando redefinir as permissões nos diretórios do usuário e estou tendo alguns problemas com a última etapa do meu script. Meu script basicamente assume a propriedade de todo o diretório do usuário, redefine as permissões em todos os arquivos e pastas para o diretório, concede explicitamente as permissões de que preciso, interrompe toda a herança de permissões das pastas pai, define o proprietário legítimo (usuário especificado) para todos os arquivos e pastas e, em seguida, remove a permissão que dei a mim mesmo para poder operar nos arquivos. Eu preciso desta última etapa para me remover de TODOS os arquivos e subpastas, mas no momento ele apenas me remove do %userDir% e deixa todas as permissões herdadas abaixo. Esta é uma deficiência aparente no ICACLS. Alguém conhece alguma outra forma de fazer isso?
set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /inheritance:r
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%"
Uma observação primeiro: toda vez que você bloqueia a herança, você está se afastando da flexibilidade futura. Evito bloquear a herança a todo custo.
Se você precisar que os usuários possam listar o conteúdo da pasta "E:\Home Directories" de nível superior, por exemplo, considere a seguinte permissão:
A última permissão não herda nas subpastas. Em cada subpasta, a herança permanece habilitada e você simplesmente especifica o usuário com direitos "Modificar" ou "Controle total" (dependendo de como você se sente sobre os usuários serem capazes de definir permissões dentro de seu diretório pessoal). (Normalmente, defino essa última permissão adicionando "Usuários autenticados" na folha de propriedades de segurança não "Avançada", desmarcando as caixas de seleção "Ler" e "Ler e executar". A configuração "Aplicar em" dessa ACE para "Somente nesta pasta". Essa é a maneira mais fácil, em termos de número de cliques, de defini-la.)
Então, seu script se torna:
Eu suspeito fortemente que a adição da permissão "Usuários autenticados" que descrevi acima com a herança definida como "Somente esta pasta" fornecerá o que você procura em funcionalidade e fornecerá flexibilidade futura se você descobrir que você precisa definir uma permissão que pode precisar herdar em todos os diretórios pessoais do usuário no futuro.
Este é o meu SOP para diretórios pessoais do usuário, pastas redirecionadas "Meus Documentos", "Desktop", etc, e para diretórios de perfil de usuário móvel. Funciona muito bem.
Editar
re: seu comentário sobre o acesso BUILTIN\Administrators
Eu tive várias discussões com as pessoas sobre minha opinião sobre a concessão de acesso BUILTIN\Administrators ao longo dos anos, e minha opinião é esta:
É mais fácil resolver uma certa classe de problemas do usuário se você conseguir acessar seus arquivos. É uma dor de "tomar posse" e pode ser bastante lento se houver um grande número de arquivos presentes também.
Como você viu com o ICACLS, BUILTIN\Administrators pode "atribuir" a propriedade (além de "tomá-la"), então não há "segurança" adicionada por não ter os arquivos acessíveis a BUILTIN\Administrators em primeiro lugar.
A menos que você esteja usando auditoria (e vasculhando um número potencialmente grande de entradas falso-positivas), não haverá uma trilha de auditoria quando um usuário BUILTIN\Administrators se apropriar de arquivos que não deveria acessar, copiá-los e, em seguida, retorna os arquivos de volta ao seu proprietário e permissão "apropriados".
No mundo da Microsoft, o sistema de arquivos com criptografia (EFS) destina-se a resolver o problema de impedir que o acesso não autorizado ao BUILTIN\Administrators aconteça. As ACLs NTFS não resolvem esse problema. (Obviamente, o EFS não é o único show na cidade. A criptografia é a resposta real para resolver o problema de "limitar o acesso do administrador de rede", não importa como você o divida.)
Na minha opinião, não especificar BUILTIN\Administrators com acesso aos diretórios pessoais do usuário (e, de fato, a qualquer pasta) significa que você está aumentando a complexidade e o tempo necessários para resolver problemas enquanto fornece menos do que nenhuma segurança real ("menos do que nenhuma " porque transmite uma falsa sensação de segurança onde não há nenhuma).
Desisti de tentar ganhar a discussão com as pessoas por meio da lógica. Parece ser um problema emocional com algumas pessoas. É como a ACE boba "Negar/Receber como" que é colocada na raiz de uma organização do Exchange para impedir que determinados grupos privilegiados abram as caixas de correio dos usuários. Não oferece segurança real (já que sem auditoria pode-se remover / reaplicar o ACE conforme necessário), uma falsa sensação de segurança e atrapalha a resolução de problemas reais.
Mesmo que você não goste do meu argumento sobre BUILTIN\Administrators tendo acesso, você deseja manter a hierarquia de herança intacta usando a herança "Somente nesta pasta" quando apropriado. Bloquear a herança nas hierarquias de permissão é um sinal claro de que algo no design está "quebrado" (invertido, etc).
Primeiramente, obrigado pelo trecho do roteiro. Eu tenho trabalhado na mesma coisa, mas estava preso em um lugar diferente. Na minha caixa SBS 2008, o código abaixo funciona para mim (supondo que seja executado elevado, é claro). Eu fiz um icacls %userdir% /t de uma nova pasta de usuário (padrão) criada pelo sistema operacional e comparei com o icacls %userdir% /t de uma pasta depois de executar este script e parece que todos os "O's e I's" estão corretas. Espero que funcione para você também.
Cumprimentos,
Preciso de sua ajuda para modificar este comando de acordo com minha necessidade, se isso for tecnicamente possível.
Aqui está a estrutura
\Servidor\Pai\UsuárioA\unix
\Servidor\Pai\UsuárioB\unix
\Server\Parent\UserC\unix.... e assim por diante..
Em cada pasta User$ existe uma pasta chamada "unix".
Desejo adicionar um usuário ou grupo com permissões totais em todas as pastas User$ listadas na pasta "Parent" (nomes tomados como da estrutura acima), mas quero excluir permissões apenas na pasta "unix".
Eu tenho este comando que funciona bem para mim na perspectiva da aplicabilidade das permissões necessárias, mas não posso adicionar a função de exclusão nisso.
icacls "\\Server\Parent\UserA" /grant Domain\Group:(OI)(CI)F /T
Você será capaz de orientar neste cenário?