科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航



ZDNet>服务器频道>ZD评测>6个让人迷惑的文件服务器NTFS权限问题

6个让人迷惑的文件服务器NTFS权限问题

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

基于Windows平台的文件服务器是个简单易行的方案,而NTFS是Windows文件服务器最关键的权限机制。正如我们所知,NTFS提供了一套有效的文件(文件夹)安全访问机制,它可以让我们对用户如何读取、写入以及以其它方式来操作系统中的文件进行严格的控制。

来源:IT专家网 2009年09月14日

关键字:NTFS权限 文件服务器

  基于Windows平台的文件服务器是个简单易行的方案,而NTFS是Windows文件服务器最关键的权限机制。正如我们所知,NTFS提供了一套有效的文件(文件夹)安全访问机制,它可以让我们对用户如何读取、写入以及以其它方式来操作系统中的文件进行严格的控制。但NTFS权限是复杂的,通常情况下,管理员虽然在文件服务器上按要求设置了文件或文件夹权限,但是却未能得到我们所预期的效果,即使是一个经验丰富的管理员也会遇到这样的困惑。是什么原因呢?笔者认为主要原因是他们不知道或者忽略了NTFS的某些安全特性。本文将就六个令人困惑的NTFS权限问题进行解密,希望对大家提升文件服务器的安全有帮助。

  1、ACL权限继承中为什么有例外?

  (1).ACL之间存在冲突

  NTFS所使用的继承机制在文件的访问控制上扮演了重要的角色。为了确定权限,Windows必须查看影响该文件的所有ACL。任何文件或文件夹都有自己的ACL,通过它来授予或拒绝特定用户或用户组的访问。此外,每个对象还会从父文件夹及各种上级文件夹继承复杂的权限。所有这些权限都存在相互冲突的潜在可能:一条ACL允许用户访问文件,而另一条则明确拒绝访问。另外,一个用户也可能同时是多个用户组的成员,从而拥有不同的权限。(图1)

  

不再迷惑,6个文件服务器NTFS权限问题

  (2).避免ACL冲突的规则

  为了解决ACL之间的冲突问题,Windows规定了以下一组规则:(1).在任一级别上,来自不同用户组的权限将进行组合。(2).在任一级别上,拒绝权限优先于允许权限。(3).直接设定在某一对象上的权限优先于该对象继承来的权限。(4).从近亲文件夹继承来的权限优先于从远亲文件夹继承来的权限。(5).任何对象都可以通过继承父文件夹的权限而受到保护。在处理这些规则时,Windows首先会检查该对象自身所带有的访问控制项目。如果没找到,Windows就会继续往上查看它的父文件夹,直至找到明确规定允许或拒绝访问该对象的访问控制项目。

  (3).阻止权限继承

  我们可以阻止某个对象继承父文件夹权限,具体做法是:打开该对象的安全属性高级对话框,找到“权限”页,清除“从父项继承那些可以应用到子对象的权限项目,包括那些在此明确定义的项目” 复选框即可。如果我们这么做了,那么父文件夹的权限将不再影响到当前文件或文件夹以及再下一级文件或文件夹至少大多数情况下是这样的。(图2)

  

不再迷惑,6个文件服务器NTFS权限问题

  (4).权限继承中的两个例外

  然而,有关权限继承的两个鲜为人知的例外却会给我们带来困惑。第一个例外是:如果父文件夹允许列出文件夹的话,那么对其下文件拒绝“读取属性” 权限将不起作用。即使我们明确拒绝“读取属性” 权限,任何用户只要具有列出文件夹权限就一定能够查看该文件夹下任何文件的属性。这一例外显然违背了规则2和3,它不仅让一条允许权限优先于一条拒绝权限,而且让父文件夹的权限优先于对象自身的权限。这一例外同时也违背了规则4和5,因为即使我们通过清除“从父项继承那些可以应用到子对象的权限项目,包括那些在此明确定义的项目” 复选框的方式来明确阻止继承权限,父文件夹仍然会对其子对象的权限产生影响。(图3)

  

不再迷惑,6个文件服务器NTFS权限问题

  第二个例外是:如果父文件夹允许“删除子文件夹及文件”权限的话,那么对其下文件或文件夹拒绝“删除”权限将不起作用。因为大多数文件夹都默认允许“删除子文件夹及文件”权限,所以对其下文件拒绝“删除” 权限鲜有效果。这个例外也会带来一些困惑,因为我们可能需要禁止某用户删除某个文件,但是当我们拒绝他的“删除”权限后我们却发现他仍然可以删除文件。这一例外同样也违背了多条继承规则,而且即使我们明确阻止从父文件夹继承权限也无济于事。(图4)

  

不再迷惑,6个文件服务器NTFS权限问题

  (5).如何才能真正拒绝删除文件?

  更令人不解的是,我们或许认为允许“删除子文件夹及文件” 权限的话,用户就能够删除子文件夹及文件。而拒绝该权限就意味着不允许用户删除子文件夹及文件。然而事实却并非如此。对某个文件夹拒绝“删除子文件夹及文件“ 权限实际上所起的效果是对其下的所有子对象开启了“删除“ 权限。我们不能单独依靠“删除子文件夹及文件” 和“删除” 这两个权限中的任何一个来阻止用户删除文件。防止文件被删除需要两个步骤:首先,对该文件本身拒绝“删除”权限;然后再对其父文件夹拒绝“删除子文件夹及文件” 权限。可见,权限继承及其例外情况实在太复杂了,对此管理员们一定要理解透彻才不会在遇到问题时困惑。(图5)

  

不再迷惑,6个文件服务器NTFS权限问题

  2、“运行文件”权限有什么用?

  有些时候,那些细分NTFS权限往往起不到应有的作用,不过有一个例外,那就是“运行文件” 权限。基本权限中有一个叫做”读取和运行”,不过实际上用户并非必须具有读取权限才能运行文件。大多数情况下,用户运行文件所需的全部权限是“运行文件” 和“读取属性”。此外,一般情况下我们都不需要特意授予用户“读取属性”权限,因为该权限往往可以从父文件夹那儿继承来。需要特别注意的是:有些程序可能需要读取数据或读取扩展属性的权限才能运行可执行文件,不过这样的程序毕竟不多见。取消“读取”权限的另一个负面影响还在于用户将无法查看该文件的任何版本信息或其它属性,Windows资源管理器也将无法正常显示程序图标,因为它无法从文件中读取图标信息。

  然而,有时候某个可执行文件也会包含一些敏感信息(比如:数据库连接字符串),我们显然不希望这样的信息被他人通过16位进制编辑器来读取,这时,取消“读取”权限就显得很有必要了。此外,还有一个好处是: 用户在没有“读取”权限的情况下是无法将可执行文件拷贝到另一个地方的。我们可以通过灵活运用“运行文件”权限来实现不同级别的访问控制。然而,需要牢记的是:脚本和批处理文件的情况正好相反,运行这类文件,用户必须具有“读取” 权限,而不一定需要“运行文件” 权限。还有一点非常有趣:如果对一个DLL或OLE自定制(OCX)ActiveX组件拒绝“运行文件“ 权限的话,用户将无法使用regsvr32.exe来注册该组件。(图6)

  

不再迷惑,6个文件服务器NTFS权限问题

  3、为什么有些文件权限不如另一些管用?

  有些文件权限不如另一些管用,原因仅仅在于其它默认的系统特权将它们覆盖了。比如,如果用户具有“还原文件和目录” 系统特权的话,我们就无法拒绝他的“取得所有权” 权限,默认情况下“Administrators” 和“BackuP Operators” 用户组成员都属于这类用户,因为他们具有“取得文件或其它对象所有权” 这一特权。我们虽然可以剥夺管理员所具有的这一系统特权,但管理员毕竟是管理员,他们也可以把特权重新夺回来。

  (1).关于“取得所有权”权限

  “取得所有权”权限在很大程度上是没有意义的,因为默认情况下只有“Administrators” 或“BackuP Operators” 组的成员才有权取得某个文件的所有权,而这两个组中任意一组的成员已经具有了“取得文件或其它对象所有权” 这一系统特权。唯一用的上这一权限的情形是:如果某一用户或用户组不属于“Administrators”组,不具有“还原文件和目录” 系统特权,但是又具有“取得文件或其它对象所有权”特权,而我们希望拒绝该用户或用户组取得某些文件的所有权。只有在这种场合,“取得所有权”权限才会像我们期待的那样发挥作用,否则就不要在它身上浪费时间了。

  (2).“读取权限” 和“更改权限”

  “读取权限” 和“更改权限” 这两个权限对文件的所有者不起作用,即使我们明确拒绝这两个权限。因此,这些权限对于任何具有“取得文件或其它对象所有权” 特权的用户也不起作用。如果我们要拒绝“读取权限” 和“更改权限”,我们必须同时拒绝“取得所有权” 权限。注意,尽管“读取权限“ 和“更改权限” 没有明确地允许或限制对审核设置(即:系统访问控制列表SACL)的访问,大多数查看权限的方法(比如:在Windows资源管理器里查看对象属性对话框的安全页)在权限即自由访问控制列表DACL)不可用的情况下都不会显示SACL。

  (3).关于“遍历文件夹”权限

  最后一点,我们大可不必在“遍历文件夹” 这个权限上浪费时间,因为系统已经默认授予所有用户“绕过遍历检查” 特权,这使得该权限形同虚设。此外,微软也一直建议不要强制执行遍历检查,因为某些应用程序无法正确处理目录遍历错误,从而会导致一些问题。

  4、共享极限和NTFS权限哪个级别高?

  当我们在某个共享文件夹上设置权限时,这些共享权限会以相对独立的方式与NTFS权限一同作用于相关的文件和文件夹。Windows会兼顾这两方面权限,取其更严格者实施。在这两组权限中,NTFS权限的重要性更高。尽管共享权限可以控制用户通过网络共享来访问文件,但它却不能阻止用户从本地系统或通过终端服务来直接访问这些文件。在控制文件访问方面,值得信赖的永远都是NTFS权限,而共享权限只能作为一种辅助手段来对网络用户的访问控制做进一步的限制。

  另外,需要注意的是,各共享文件夹的权限只对该共享本身起作用,这些权限不会继承也不会传播给其它共享,即使在同一物理目录结构中是上下级关系。举个例子,假设我们为所有用户建了一个共享,映射到“C:\ctocio”。所有用户都可以访问这个共享以及其中的所有对象。现在,我们又专门为管理员建了一个共享“C:\ctocio\admin”。就第二个共享而言,尽管它寄宿在第一个共享内部,但在权限上却与第一个共享毫无关联。就算我们拒绝普通用户访问“C:\ctocio\admin” 共享,他们还是可以先访问“C:\ctocio” 共享然后再进入“admin” 目录。要阻止用户访问“admin” 目录,我们必须设置相应的NTFS权限。所以,为了避免此类情况发生,最好不要把一个共享寄宿在另一个共享内部。(图7)

  

不再迷惑,6个文件服务器NTFS权限问题

  5、能否通过阻止Everyone组限制匿名访问?

  对于“Everyone”用户组我们必须当心。在XP以前的Windows版本里,“Everyone”用户组中默认包含匿名用户,所以那时专家们总是忠告不要授予“Everyone”组任何访问权。而在Windows Server XP/2003/Vista/2008里,“Everyone”组默认不包含匿名用户,所以根据我们的特定权限设置,拒绝”Everyone”组的访问权限并不一定意味着匿名用户的访问也被拒绝。要阻止匿名用户以及其他不希望的用户访问资源,最保险的方法不是拒绝某些用户组的权限,而是把允许访问权限只授予那些需要访问的用户和用户组即所谓的白名单。

  6、如何快速地对用户赋权?

  当我们为文件和文件夹设置权限时,不要忘了利用各种内置的用户组,Windows会在用户登录系统时自动将内置用户组的权限分配给用户。比如,对于“Remote Desktop Users”这个用户组,我们可以根据登录类型来设置非常详细的NTFS权限。比方说,我们可能希望只允许管理员或那些实际登录到本地控制台的用户访问某些敏感文件。这时,我们把访问权只授予“Administrators”和“Interactive Logon Users”这两个组就可以了。我们还可以做进一步的限制,比如只允许作为服务登录的帐号访问相关文件等等。结合内置用户组来设置权限这能够在很大程度上减轻管理员的工作量,同时也利用集中管理。(图8)

  

不再迷惑,6个文件服务器NTFS权限问题

  总结:毫无疑问NTFS是一套安全高效的文件系统,当然它也是非常复杂的,希望本文所揭示的这些能够让大家在面对一些复杂局面时少几分困惑,更好地发挥NTFS权限的作用,最大程度提升文件服务器的安全。

邮件订阅

如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅ZDNet技术邮件将是您的最佳途径之一。