如何模拟有Active Directory / NTFS的WORM环境

NTFS / Active Directory中,假设我映射了两个驱动器:

H:\ I:\ 

用户可以编辑H:\中的文件,但不能在I:\中编辑。 我希望用户能够使用脚本将文件移动到I:\驱动器,除非发生覆盖。 在复制文件之后,该脚本删除I:\中复制文件的写入权限,以便用户不能再更改权限,I:\上的文件在某种意义上成为永久性的。

我怎样才能以安全的方式进行设置?

经过一堆试错之后,这个PowerShell脚本似乎是这样做的:

 $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 

虽然pipe理员可以采取以下措施来控制:

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

我会说,如果你需要一个工业级解决scheme来满足SEC的要求,那么你可能需要投资NetApp和SnapLock:

https://library.netapp.com/ecmdocs/ECMP1196889/html/GUID-7334EEB5-94E9-4500-BA40-681DEC572420.html

正如我所看到的,如果脚本以用户身份运行,则需要具有写入I驱动器的权限。

你也许可以有一个计划的任务,在I驱动器上写入权限运行,拉动文件。 也许他们可以创build一个名为“readytocopy.txt”或类似的文件。 当计划的任务在用户的目录中find该文件时,它将复制文件(readytocopy.txt除外)。

你想要解决什么具体问题?

这可以通过脚本,计划任务和NTFS权限的组合来实现。

假设你没有子文件夹,只有一个文件夹中的文件,这是如何实现它:

  • 设置一个用户组
  • 设置pipe理员组

(如果你喜欢使用内置的)

目标文件夹上的NTFS权限(我:)

  • 读取,列出文件夹内容,执行,写入 – 仅此文件夹,到用户组
  • 完全控制 – 该文件夹,子文件夹,文件到pipe理员组

计划任务

  • 从每个具有写入权限的文件中删除所有写入权限的脚本
  • 可以是使用icacls.exe,Powershell,vbscript的批处理脚本,任何东西都可以
  • 将任务设置为手动启动
  • 需要以完全控制文件夹和文件的用户身份运行(Admins组)
  • 为用户组提供启动计划任务的适当权限(可以是本地计算机上的任务或远程计算机上的任务)

脚本

  • 可以几乎任何语言(PS可能是偏好)
  • 仅在文件不存在的情况下复制文件
  • 复制后,使用Powershell调用Start-ScheduledTask,或者如果使用其他脚本语言,则使用schtasks.exe来启动计划任务。 在本地或远程机器上运行。

将会有一段时间,用户仍然可以对文件进行写入,具体取决于脚本的编码方式,文件夹中有多less文件等等,这个时间将会低至毫秒。

你应该可以用普通的NTFS权限来做到这一点。 我发现这篇文章。 它大约十岁,但它很清楚地显示了这个例子:

https://technet.microsoft.com/en-us/magazine/2006.01.howitworksntfs.aspx

  1. 仅将此文件夹(在“应用于”列表中select)的“读取和执行”和“写入”权限授予您想要访问该文件夹的用户。
  2. 将子文件夹和文件的读取和执行权限授予相同的用户。
  3. 将写入权限授予特殊用户创build者所有者。

这样做的效果是,所有的用户都可以将文件添加到文件夹并读取彼此的文件,但只有创build文件的用户才能修改它。