如何设置文件夹的 NTFS 权限以实现类似 WORM 的行为

如何设置文件夹的 NTFS 权限以实现类似 WORM 的行为

是否可以在 Windows 服务器上的文件夹上设置组权限,以便可以创建、填充和关闭文件,但之后不能更改或删除?

答案1

您可以设置权限来允许这样做,但您可能会发现您对结果并不满意。(我还没有为提出请求的客户配置过这个功能,而且几天后还不得不去更改它。)

具体来说,某些程序(Microsoft Word 就是一个很好的例子)假设它们可以用一个名称写入文件,然后在写入后重命名它们。其他程序会创建文件,关闭文件,然后重新打开以进行写入。当这样的程序尝试以您描述的权限写入目录时,您会发现事情会中断。

如果您只是要将文件复制到这样的目录中,您可能会更幸运。

假设您希望“经过身份验证的用户”能够执行此操作。您需要使用“高级”ACL 编辑器添加最后一个权限:

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

这将允许“经过身份验证的用户”创建新文件,但他们无法修改刚刚创建的文件。(显然,SYSTEM 和管理员成员将要能够操作这些文件。

答案2

Evan 的回答非常有帮助。在这里,我编写了一个 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

相关内容