使用ICACLS设置用户目录权限


16

我正在尝试重置用户目录的权限,并且在脚本的最后一步遇到了一些麻烦。我的脚本基本上拥有整个用户目录的所有权,重置该目录的所有文件和文件夹的权限,显式授予我需要的权限,停止从父文件夹的权限的所有继承,为所有文件设置合法的所有者(指定的用户)和文件夹,然后删除我授予自己的权限,以便可以对文件进行操作。我需要最后一步将自己从所有文件和子文件夹中删除,但此刻它只是将我从%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%"

我正在玩由Microsoft创建的不受支持的XCACLS.vbs脚本,我很幸运在脚本的最后一行使用了它。代替此ICACLS“ E:\ Home Directories \%userDir%” /删除“ MYDOMAIN \%username%”我将其替换为cscript.exe xcacls.vbs“ e:\ Test” / E / R“ MYDOMAIN \% username%“可以,但是我真的想避免使用XCACLS.vbs,因为它存在严重的性能问题。还有其他想法吗?
pk。

Answers:


18

首先观察:每次阻止继承时,您都将失去未来的灵活性。我避免不惜一切代价阻止继承。

例如,如果您需要用户能够列出顶级“ 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具有访问权限的论点,您也通过在适当的地方使用“仅此文件夹”继承来保持继承层次结构完整。在权限层次结构中阻止继承是一个确定的标志,表明有关设计的某些内容“已损坏”(倒置等)。


1
您是否建议给BUILTIN \ Administrators完全访问整个目录结构的权限?我认为,我们(管理员)在没有所有权的情况下实际上不应具有对每个用户的用户目录/配置文件的完全访问权限。
pk。

+1,喜欢关于错误的安全感的要点...
DCookie

1

首先,感谢您的脚本摘录。我一直在做同一件事,但被困在另一个地方。在我的SBS 2008框上,以下代码对我有用(当然,假设它运行在提升状态)。我执行了由操作系统创建的全新(默认)用户文件夹的icacls%userdir%/ t,并在运行此脚本后将其与文件夹的icacls%userdir%/ t进行了比较,它看起来像所有的“ O和我的”是正确的。希望它也会为您服务。

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

确保您验证脚本的最后一行。根据我的经验,ICACLS无法成功删除继承的权限。它将删除“ MYDOMAIN \%username%”文件夹中的条目,但是子文件夹的权限未更改。因此,如果直接访问“ MYDOMAIN \%username%”,仍然可以访问子文件夹,您将无法浏览它们。XCACLS.vbs为我解决了此问题。cscript.exe xcacls.vbs“ e:\ Test” / E / R“ MYDOMAIN \%username%”
pk。

那是部分来自我的编辑。在父文件夹上执行/ inheritance:r时,我遇到了同样的问题。但是继续做下去在父文件夹中似乎可以解决问题。运行上述命令后,%userdir%具有%username%,系统和管理员,但其中的所有内容仅是%username%和系统,这就是服务器最初设置它们的方式-正是我想要的。

-1

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

这是结构

\ Server \ Parent \ UserA \ unix

\ Server \ Parent \ UserB \ unix

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

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

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

我有此命令,从所需权限的适用性角度来看,它对我来说很好用,但是我不能在其中添加排除功能。

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

您可以在这种情况下进行指导吗?


1
您好,欢迎来到服务器故障!请不要通过答案提问。使用“ 提问”按钮发布您的请求。
Shunz先生
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.