![windows xp Professional 在 cacls /t /e /p 之后恢复安全描述符](https://linux22.com/image/1455084/windows%20xp%20Professional%20%E5%9C%A8%20cacls%20%2Ft%20%2Fe%20%2Fp%20%E4%B9%8B%E5%90%8E%E6%81%A2%E5%A4%8D%E5%AE%89%E5%85%A8%E6%8F%8F%E8%BF%B0%E7%AC%A6.png)
有人使用 cacls 更改了多台机器的权限,这解决了一个问题,但却带来了更大的问题。我正在寻找方法来恢复此问题,但似乎无法将其恢复到原来的状态。
我使用测试机器进行了复制,输出如下。我使用 subinacl 来获取输出。
更改使用:
ECHO Y|CACLS C:\APPSYS /t /e /p User1:F
权限更改的原因是因为某些文件是由以管理员身份登录的人添加的,而用户也需要完全访问权限。我仍然想知道一种安全的方法,可以将用户组 1 添加到这些文件中,同时又不会干扰其他不需要更改的文件。这不是静态的文件列表,有些机器只有 1 或 2 个文件,而其他机器有 20-50 个文件,用户 1 需要完全控制这些文件,但没有权限。
运行 ECHO "Y|CACLS C:\APPSYS /t /e /p User1:F" 之前
====================
+File C:\APPSYS\BIN
====================
/control=0x400
/owner =PC1125230\ORGUSER
/primary group =PC1125230\none
/audit ace count =0
/perm. ace count =8
/pace =PC1125230\USERGROUP1 Type=0x0 Flags=0x13 AccessMask=0x1f01ff
/pace =builtin\administrators Type=0x0 Flags=0x13 AccessMask=0x1f01ff
/pace =system Type=0x0 Flags=0x13 AccessMask=0x1f01ff
/pace =PC1125230\ORGUSER Type=0x0 Flags=0x10 AccessMask=0x1f01ff
/pace =creator owner Type=0x0 Flags=0x1b AccessMask=0x10000000
/pace =builtin\users Type=0x0 Flags=0x13 AccessMask=0x1200a9
/pace =builtin\users Type=0x0 Flags=0x12 AccessMask=0x4
/pace =builtin\users Type=0x0 Flags=0x12 AccessMask=0x2
=============================
+File C:\APPSYS\ERROR.LOG
=============================
/control=0x0
/owner =PC1125230\ORGUSER
/primary group =PC1125230\none
/audit ace count =0
/perm. ace count =0
运行 ECHO "Y|CACLS C:\APPSYS /t /e /p User1:F" 后
====================
+File C:\APPSYS\BIN
====================
/control=0x0
/owner =PC1125230\ORGUSER
/primary group =PC1125230\none
/audit ace count =0
/perm. ace count =9
/pace =PC1125230\User1 Type=0x0 Flags=0x3 AccessMask=0x1f01ff
/pace =PC1125230\USERGROUP1 Type=0x0 Flags=0x13 AccessMask=0x1f01ff
/pace =builtin\administrators Type=0x0 Flags=0x13 AccessMask=0x1f01ff
/pace =system Type=0x0 Flags=0x13 AccessMask=0x1f01ff
/pace =PC1125230\ORGUSER Type=0x0 Flags=0x10 AccessMask=0x1f01ff
/pace =creator owner Type=0x0 Flags=0x1b AccessMask=0x10000000
/pace =builtin\users Type=0x0 Flags=0x13 AccessMask=0x1200a9
/pace =builtin\users Type=0x0 Flags=0x12 AccessMask=0x4
/pace =builtin\users Type=0x0 Flags=0x12 AccessMask=0x2
=============================
+File C:\APPSYS\ERROR.LOG
=============================
/control=0x0
/owner =PC1125230\ORGUSER
/primary group =PC1125230\none
/audit ace count =0
/perm. ace count =1
/pace =PC1125230\User1 Type=0x0 Flags=0x0 AccessMask=0x1f01ff
许多文件和文件夹对于不同的机器来说都是唯一的,因此我试图找到一种适用于所有机器的方法,而无需指定每个精确的文件。
我使用 subinacl 授予被拒绝访问 ERROR.LOG 的用户组权限,例如授予 APPSYS 文件夹中的所有文件和文件夹的权限,因为存在许多应用程序崩溃的问题。这解决了该问题,但我担心与原始设置相比,所做的更改会产生持久影响。
在使用 subinacl 方法授予权限之前,我尝试过删除 User1 权限,但 ERROR.LOG 再次无法恢复到原来的权限。我也尝试过 suppresssid,结果同样没有区别。我尝试过在运行 cacls 命令之前使用测试设备进行备份,然后使用 subinacl 恢复备份,但从我所看到的情况来看,它无法正确恢复,“/pace =builtin\users Type=0x0 Flags=0x12 AccessMask=0x4”已从 ACL 中删除。
我对安全描述符没有经验,所以如果描述太明显或者我遗漏了细节,请见谅。我花了 5 天 5 夜阅读我能找到的资料,以找出问题所在,并利用批处理程序修复它。
我仅限于基本脚本(Windows XP Pro)VB,批处理我可以使用资源工具包中的工具和某种程度上的第三方实用程序,但再次必须使用批处理脚本。
答案1
我已设法找到解决方案(忘了在这里发布)。
使用 xcacls.vbs 并使用以下参数:
Filename = "c:\APPSYS\"
/F (All Files under current directory)
/S (All Sub Directories under current directory)
/T (Traverse Directories)
/E (Edit ACL leaving other users intact)
/I (Inheritance)
ENABLE
这会将文件夹中文件的继承恢复到原来的状态,并且对于没有 ACE(设置为允许所有人)的文件,它们继承了所需的用户组。
希望这对处于同样境地的其他人有所帮助。