在一次 beta 测试期间,一位客户安装了我们的一些软件,该软件意外修改了All Users/Application Data
大约 500 台计算机上文件夹的权限。他们使用 Altiris 部署了该软件。权限被更改,并开始导致想要将数据写入该文件夹的应用程序(如防病毒软件)出现问题。
权限更改不是递归的。作为测试,我们创建了一个他们可以作为补丁安装的软件版本,该版本赋予“所有人”用户完全控制权。 这解决了防病毒软件的问题,但现在权限不安全。
在我的 MSI 工具创建器(高级安装程序)中,我可以非常接近复制默认的 Windows 设置,但下面绿色箭头指示的条目除外。
替代文本 http://www.blakerobertson.com/storage/perm/ApplyOnlyToFolders.png
系统管理员能给出关于如何重置权限的建议吗?如果有人知道的话,客户可以使用 Altiris 管理软件来执行某种实用程序。
答案1
尝试命令行工具(http://support.microsoft.com/kb/825751)。它是 Microsoft 提供的免费 VBScript 命令行实用程序,与 cacls 命令类似,但具有更多选项。它能够应用比 cacls 更细粒度的权限,但请仔细阅读说明(通过键入不带任何选项的命令显示:cscript xcacls.vbs);它们相当复杂!它做能够仅将权限应用于“此文件夹及其子文件夹”;我以前曾使用它来执行此操作。
如果您运行的是 Windows Vista 或更高版本,则随附的伊卡克尔斯公用事业 (http://technet.microsoft.com/en-us/library/cc753525(WS.10).aspx)可能更合适。
编写了正确的命令(使用任一工具)后,将其放入 *.cmd 脚本中,然后将脚本添加到组策略对象,以便通过组策略将其应用于计算机。请注意,如果采用这种方式,您还必须以某种方式将 xcacls.vbs 加载到每台计算机上。这可以通过包含一个命令来实现,该命令从文件共享下载 xcacls.vbs 脚本并将其本地保存在权限设置命令所在的同一 *.cmd 脚本中(或者您可以尝试直接从文件共享运行它)。
答案2
您可以使用 GPO 轻松纠正此问题。
如果他们想使用 Altiris,则设置一项作业以使用 cacls.exe 重置文件夹的权限。
答案3
以下是根据 Jay Michaud 的建议得出的最终代码。
我最终在安装程序中添加了一个自定义操作。该操作在文件复制完成后运行。如果您这样做,您将需要以下代码,并且需要将其作为参数传入:APPDIR|CommonAppDataFolder。(是的,这是分隔它们的管道)
dim XCACLS_EXEC, APPDATAFOLDER, WindowStyle
' COMMENT OUT THIS SECTION IF NOT RUNNING AS AN INSTALLER CUSTOM ACTION,
' SET XCACLS_EXEC and APPDATAFOLDER variables some other way.
actdata = Session.Property("CustomActionData")
tokens = Split( actdata, "|", -1)
XCACLS_EXEC = tokens(0) & "XCACLS.vbs"
APPDATAFOLDER = tokens(1)
WindowStyle=0 '0 for hide, 1 for show.
set objShell = CreateObject("WScript.Shell")
'MsgBox XCACLS_EXEC & " " & APPDATAFOLDER & " " & Session.Property("CustomActionData")
objShell.Run "cscript """ & XCACLS_EXEC & """ """ & APPDATAFOLDER & """ /SPEC C /G users:W", WindowStyle, True
objShell.Run "cscript """ & XCACLS_EXEC & """ """ & APPDATAFOLDER & """ /E /G users:X", WindowStyle, True
objShell.Run "cscript """ & XCACLS_EXEC & """ """ & APPDATAFOLDER & """ /E /G ""Power Users"":M", WindowStyle, True
objShell.Run "cscript """ & XCACLS_EXEC & """ """ & APPDATAFOLDER & """ /E /G ""CREATOR OWNER"":F", WindowStyle, True
objShell.Run "cscript """ & XCACLS_EXEC & """ """ & APPDATAFOLDER & """ /E /G Administrators:F", WindowStyle, True
objShell.Run "cscript """ & XCACLS_EXEC & """ """ & APPDATAFOLDER & """ /E /G Administrator:F", WindowStyle, True
objShell.Run "cscript """ & XCACLS_EXEC & """ """ & APPDATAFOLDER & """ /E /G SYSTEM:F", WindowStyle, True