使用 ICACLS 设置用户目录的权限

使用 ICACLS 设置用户目录的权限

我正在尝试重置用户目录的权限,但在执行脚本的最后一步时遇到了一些问题。我的脚本基本上接管了整个用户目录,重置了目录中所有文件和文件夹的权限,明确授予我需要的权限,停止从父文件夹继承所有权限,为所有文件和文件夹设置合法所有者(指定用户),然后删除我授予自己的权限,以便我可以操作这些文件。我需要最后一步将自己从所有文件和子文件夹中删除,但目前它只是将我从 %userDir% 中删除,并保留所有继承的权限。这显然是 ICACLS 的一个缺点。有人知道还有其他方法可以实现这一点吗?

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /inheritance:r
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%"

答案1

首先要说的是:每次阻止继承时,您都会切断未来的灵活性。我无论如何都会避免阻止继承。

例如,如果您需要用户能够列出顶层“E:\Home Directories”文件夹的内容,请考虑以下权限:

  • 系统 - 完全控制 - 应用于此文件夹、子文件夹和文件
  • BUILTIN\Administrators - 完全控制 - 应用于此文件夹、子文件夹和文件
  • BUILTIN\Authenticated Users - 读取和执行 - 仅适用于此文件夹

最后一个权限不会继承到子文件夹中。在每个子文件夹中,继承仍然处于启用状态,您只需指定具有“修改”或“完全控制”权限的用户(取决于您对用户能够在其主目录中设置权限的看法)。(通常,我通过在非“高级”安全属性表中添加“经过身份验证的用户”来设置最后一个权限,取消选中“读取”和“读取和执行”复选框。然后,我进入“高级”对话框,并将该 ACE 的“应用于”设置更改为“仅限此文件夹”。就点击次数而言,这是设置它的最简单方法。)

然后,你的脚本变成:

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T

我强烈怀疑,添加我上面描述的“经过身份验证的用户”权限,并将继承设置为“仅限此文件夹”,将为您提供所需的功能,并且如果您发现必须设置可能需要继承到所有用户主目录的权限,它将为您提供未来的灵活性。

这是我针对用户主目录、重定向的“我的文档”、“桌面”等文件夹以及漫游用户配置文件目录制定的 SOP。效果很好。

编辑

回复:关于 BUILTIN\Administrators 访问权限的评论

多年来,我曾与人们就我对授予 BUILTIN\Administrators 访问权限的看法进行过各种争论,我的看法是这样的:

  • 如果您可以访问用户的文件,解决特定类型的用户问题会更容易。“获取所有权”是一件痛苦的事情,而且如果存在大量文件,速度也会很慢。

  • 正如您在 ICACLS 中看到的,BUILTIN\Administrators 可以“分配”所有权(除了“获取”所有权),因此,由于 BUILTIN\Administrators 无法访问文件,因此不会增加“安全性”。

  • 除非您使用审核(并筛选可能大量的误报条目),否则当 BUILTIN\Administrators 用户拥有他们不应该访问的文件的所有权、复制它们,然后将文件返回给他们的“适当”所有者和权限时,不会有审核跟踪。

  • 在 Microsoft 世界中,加密文件系统 (EFS) 旨在解决防止发生未经授权的 BUILTIN\Administrators 访问的问题。NTFS ACL 无法解决该问题。(显然,EFS 并不是唯一的选择。无论如何,加密才是解决“限制网络管理员访问”问题的真正答案。)

在我看来,不指定有权访问用户主目录(实际上是任何文件夹)的 BUILTIN\Administrators 意味着您增加了解决问题所需的复杂性和时间,同时却没有提供真正的安全性(“比没有还少”是因为它在没有安全的地方给人一种虚假的安全感)。

我已经放弃试图用逻辑来赢得与人的争论。对某些人来说,这似乎是一个情绪化的问题。这就像愚蠢的“拒绝/接收”ACE,它被放置在 Exchange 组织的根目录下,以防止某些特权组打开用户邮箱。它没有提供真正的安全性(因为如果没有审核,人们可以根据需要删除/重新应用 ACE),这是一种虚假的安全感,并且在解决实际问题时会造成阻碍。

即使你不喜欢我关于 BUILTIN\Administrators 有权访问你的论点通过在适当的情况下使用“仅限此文件夹”继承来保持继承层次结构的完整性。在权限层次结构中阻止继承肯定表明设计存在“问题”(颠倒等)。

答案2

首先,感谢您提供的脚本摘录。我一直在做同样的事情,但遇到了困难。在我的 SBS 2008 机器上,下面的代码对我有用(当然,假设它是以提升权限运行的)。我对操作系统创建的全新(默认)用户文件夹执行了 icacls %userdir% /t,并将其与运行此脚本后文件夹的 icacls %userdir% /t 进行了比较,看起来所有“O 和 I”都是正确的。希望它也能为您服务。

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(oi)(ci)f
ICACLS "E:\Home Directories\%userDir%\*.*" /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%\*.*" /inheritance:r
ICACLS "E:\Home Directories\%userDir%\*.*" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%" /t

此致,

 -d

答案3

如果技术上可行,我需要您的帮助来根据我的要求修改此命令。

结构如下

\服务器\父\用户A\unix

\服务器\父\用户 B\unix

\Server\Parent\UserC\unix.... 等等..

每个 User$ 文件夹下都有一个名为“unix”的文件夹。

我想添加一个用户或组,对“父”文件夹下列出的所有 User$ 文件夹(名称取自上述结构)具有完全权限,但只想排除“unix”文件夹的权限。

我有这个命令,从所需权限的适用性角度来看它对我来说工作正常,但我无法在此添加排除功能。

icacls“\\Server\Parent\UserA”/grant Domain\Group:(OI)(CI)F /T

您能在这种情况下提供指导吗?

相关内容