Como simular um ambiente WORM com o Active Directory / NTFS

2

No NTFS / Active Directory, suponha que eu tenha duas unidades mapeadas:

H:\
I:\

Os usuários podem editar arquivos em H: \, mas não em I: \. Eu quero que os usuários possam, usando um script, mover seus arquivos para a unidade I: \, a menos que ocorra uma sobrescrita. Depois que os arquivos são copiados, o script remove as permissões de gravação dos arquivos copiados em I: \, de forma que os usuários não possam mais alterar as permissões de volta e os arquivos em I: \ se tornem, de certo modo, permanentes.

Como posso configurá-lo de maneira segura?

    
por Carbon 11.06.2016 / 00:29

4 respostas

2

Após um monte de tentativa e erro, este script do PowerShell parece fazê-lo:

$worm="C:\WORM"
mkdir -Force $worm
cd $worm

<#  https://serverfault.com/a/17869

SYSTEM - Full Control - Apply onto: This folder, subfolders, and files
Administrators - Full Control - Apply onto: This folder, subfolders, and files
Authenticated Users - Read - Apply onto: This folder, subfolders, and files
Authenticated Users - Create Files / Write Data - Apply onto: This folder and subfolders

#>

$acl  = Get-Acl $worm
$ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'Users', '
        'CreateDirectories, CreateFiles, ListDirectory, Read', '
        'ContainerInherit, ObjectInherit', '
        'None', '
        'Allow'
$acl.AddAccessRule($ace1)
Set-Acl -AclObject $acl -Path $worm

$acl  = Get-Acl $worm
$ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'Users', '
        'DeleteSubdirectoriesAndFiles,Delete', '
        'ContainerInherit, ObjectInherit', '
        'None', '
        'Deny'
$acl.AddAccessRule($ace1)
Set-Acl -AclObject $acl -Path $worm

$acl  = Get-Acl $worm
$ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'Users', '
        'WriteData', '
        'ObjectInherit', '
        'InheritOnly', '
        'Deny'
$acl.AddAccessRule($ace1)
Set-Acl -AclObject $acl -Path $worm

Não é à prova de erros, já que um administrador pode recuperar o controle com:

icacls C:\WORM /T /Q /C /RESET

Eu direi que, se você precisar de uma solução de nível industrial para conformidade com a SEC ou qualquer outra coisa, talvez seja necessário investir na NetApp e no SnapLock:

link

    
por 01.10.2017 / 18:17
2

A meu ver, há um problema de que, se o script estiver sendo executado como usuário, eles precisam ter permissão para gravar na unidade I.

Você poderia, talvez, ter uma tarefa agendada, executando com permissões de gravação na unidade I, que puxa os arquivos. Talvez eles pudessem criar um arquivo chamado "readytocopy.txt" ou algo parecido. Quando a tarefa agendada encontra esse arquivo no diretório do usuário, ele copia os arquivos (exceto readytocopy.txt).

Qual problema específico você está tentando resolver?

    
por 11.06.2016 / 00:39
1

Isso é possível com uma combinação de um script, uma tarefa agendada e permissões NTFS.

Supondo que você não tenha subpastas e apenas arquivos em uma única pasta, veja como conseguir:

Grupos

  • Configurar um grupo de usuários
  • Configurar um grupo de administradores

(use os internos, se quiser)

Permissões NTFS na pasta de destino (I:)

  • Ler, Listar conteúdo da pasta, Executar, Gravar - somente esta pasta, para o grupo de usuários
  • Controle total - Esta pasta, subpasta, arquivos para o grupo Administradores

Tarefa agendada

  • Um script que remove todas as permissões de gravação de cada arquivo que tenha permissões de gravação
  • Pode ser um script em lote usando icacls.exe, Powershell, vbscript, qualquer coisa realmente
  • Definir tarefa para início manual
  • Precisa ser executado como um usuário que tem controle total da pasta e dos arquivos (grupo Admins)
  • Conceder ao grupo Usuários os direitos apropriados para iniciar a tarefa agendada (pode ser uma tarefa em sua máquina local ou em uma máquina remota)

Script

  • Pode ser praticamente qualquer idioma (PS é provavelmente a preferência)
  • Copia os arquivos somente se eles não existirem
  • Após a cópia, usando Powershell chamar Start-ScheduledTask ou se estiver usando outro script idioma use schtasks.exe para iniciar a tarefa agendada. Trabalha em locais ou máquinas remotas.

Haverá um momento em que o arquivo ainda pode ser gravado pelo usuário, dependendo de como os scripts são codificados, quantos arquivos estão na pasta, etc., que serão tão baixos quanto milissegundos.

    
por 18.06.2016 / 00:01
0

Você deve conseguir fazer isso com permissões normais de NTFS. Eu encontrei este artigo. Tem cerca de 10 anos, mas mostra esse exemplo claramente:

link

  1. Grant the Read & Execute and Write permissions for This folder only (selected in the Apply onto list) to the users you want to have access to the folder.
  2. Grant the Read & Execute permission for the Subfolders and files only to the same users.
  3. Grant the Write permission to the special user Creator Owner.

The effect of this is that all of the users will be able to add files to the folder and read each other’s files, but only the user that created a file will be able to modify it.

    
por 11.06.2016 / 01:31