是否可以在 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