我有以下示例文件夹结构:
U:\One\Two\A
U:\One\Two\B
U:\One\Two\C
U:\One\Two\D
U:\One\Two\E
文件夹“一”和“二”设置为普通用户只能读取,不能修改它们或它们的内容。文件夹“A”-“E”对自己有读取权限,对其内容/子文件夹有写入权限。
Windows 是否允许对文件夹“Two”设置权限,以便将来创建的子文件夹“F”、“G”等将获得与“A”-“E”现在相同的权限?如果不允许,还有哪些其他解决方案可以实现此结果?
答案1
拒绝更改直接子文件夹/文件但允许修改子文件夹的内容
您只需要对 A 至 E 子文件夹的“父”文件夹应用特殊权限。对于您而言,父文件夹就是该Two
文件夹。
将这些权限应用到父文件夹:
- 用户:
Read & execute (This folder, subfolders and files)
- 用户:
Modify (Subfolders and files only)
用户:
DENY 'Delete' (Subfolders only)
并启用Apply these permissions to objects and/or containers within this container only
笔记:
Users
用您希望授予访问权限的特定身份替换该组。笔记:您还需要授予管理员(或负责添加/删除子文件夹的用户)对此文件夹的完全控制权限。否则,任何人都无权创建子文件夹。
‘用户’组的最终权限:
- 无法在父文件夹内创建、重命名或删除文件夹或文件
- 可以创建、重命名、修改和删除文件夹或文件子文件夹父文件夹。
您的情况下产生的权限:
U:\One\Two <-- "Parent" folder
- Users can read everything below this folder
- Users cannot create, rename, or delete files or folders here
U:\One\Two\A (through E) <--- "Subfolder" of Parent
- Users can create, rename, modify, and delete files or subfolders here
显然,由于分配给父文件夹的权限是继承的,因此在该Two
文件夹中创建的将来的文件夹将自动接收相同的权限集。
答案2
不,正如所述,F 和 G 将继承 One 和 Two 的权限 ICACLS 可以作为脚本执行您想要的操作 - 我附加了一个 CMD 文件,我之前每次出于某种目的创建目录时都会使用它来执行此操作 -
我已经对其进行了修改以使用本地组而不是域组和一些其他内容,但它确实有效 - 但我希望下面的内容有助于解释如何使用它
SET DIR=TESTPERMS
SET DOMAIN=%COMPUTERNAME%\
SET DOMAIN=
SET
ROOTPATH=%TEMP%\
REM SET ROOTPATH=U:\One\Two\ REM SET DIR=A
REM Create the groups locally on the machine - I added for debug
NET LOCALGROUP FSP_%DIR%_MODIFY /ADD
NET LOCALGROUP FSP_%DIR%_READ /ADD
NET LOCALGROUP FSP_%DIR%_READexecute /ADD
NET LOCALGROUP FSP_%DIR%_FULLCONTROL /ADD
NET LOCALGROUP FSP_%DIR%_WRITE /ADD
REM Make the directory I'm about to modify
md %ROOTPATH%%DIR%
REM Make sure I know who the owner is - so I can take ownership
ICACLS %ROOTPATH%%DIR% /setowner %DOMAIN%FSP_%DIR%_FULLCONTROL /T
REM Reset to a known state inherited and nothing else
ICACLS %ROOTPATH%%DIR% /T /reset
REM remove inheritance - but copy so we don't lose access
ICACLS %ROOTPATH%%DIR% /inheritance:r
REM Give the rights to the Groups The last () is the rights being granted
ICACLS %ROOTPATH%%DIR% /GRANT:R %DOMAIN%FSP_%DIR%_MODIFY:(OI)(CI)(M)
ICACLS %ROOTPATH%%DIR% /GRANT:R %DOMAIN%FSP_%DIR%_READ:(OI)(CI)(R)
ICACLS %ROOTPATH%%DIR% /GRANT:R %DOMAIN%FSP_%DIR%_READexecute:(OI)(CI)(RX)
ICACLS %ROOTPATH%%DIR% /GRANT:R %DOMAIN%FSP_%DIR%_FULLCONTROL:(OI)(CI)(F)
ICACLS %ROOTPATH%%DIR% /GRANT:R %DOMAIN%FSP_%DIR%_WRITE:(OI)(CI)(W)
REM Remove rights from everyone else
ICACLS %ROOTPATH%%DIR% /REMOVE:g "Authenticated Users"
ICACLS %ROOTPATH%%DIR% /REMOVE:g Everyone
ICACLS %ROOTPATH%%DIR% /REMOVE:g SYSTEM
ICACLS %ROOTPATH%%DIR% /REMOVE:g BUILTIN\Users
REM Show me what I've done
ICACLS %ROOTPATH%%DIR% /T
REM Now remove my self - If I am sure everything is ok
PAUSE
ICACLS %ROOTPATH%%DIR% /REMOVE:g BUILTIN\Administrators