正如问题所说。
我有一个包含约 10M 文件的数据池,其访问权限由 NFSv4 ACL 控制。它可以通过 CLI、Samba 使用,有时可以通过守护进程或 来使用rsync
,对于某些目录可以通过 ftp/sftp 使用,所以随着时间的推移,很多东西可能会变得混乱。它看起来好的,但我无法通过肉眼检查池的大小,并且过去我不得不修复 ACL。所以我有点不确定它的 ACL 是否应该如此,经过这么长时间,我想检查它们(“审核”可能是一个更好的词)以获得保证和良好的实践。
因为我将来可能想再次执行此操作,并且一次编写它的脚本文件会很慢,所以我希望有一些专门用于此目的的 FreeBSD 实用程序或包,或者至少有一种更快的方法来实现它!
理想的输出将是具有与其父级不同的 ACL 的任何文件/目录的列表(理想情况下包括检查 ACL 顺序,因为 Windows 很挑剔,但这不太重要)。一些定义明确的文件应该有不同的 ACL,因此我正在寻找这些文件出现在结果中,以确认一切正常。
生成这样的列表最有效的方法是什么?
更新 - 更多信息:
正如 @Claus_Anderson 评论的那样,最初的 Q 写得不够具体。
我主要关心的是仔细检查自己。我想确保我设置的 ACL 按我的预期工作,这将是“除了极少数特定文件之外的所有内容都会继承”。我的限制非常严格,除了在设置时没有足够仔细地检查之外,主要的风险是我自己的操作搞乱某些东西的风险 - 我从不正确的 uid 或愚蠢的东西访问文件或目录,或者设置 WSambainherit
参数并忘记将其删除。愚蠢但可能发生。检查自己的工作很重要,我愿意这样做:)
该池使用 NFSv4 ACL(Q 已更新以明确这一点)。我可以轻松地在 shell 中编写一些脚本,运行find
,遍历文件系统树,并且对于每个“普通”file+dir 获取该对象的 ACL 及其父 ACL,并检查它们是否相同,并转储异常列表(它们不相同的对象的路径)到文本文件中。如果该文件中有很多路径,则显然会出现系统错误,我可以修复该问题并重新检查;如果很少,那么我可以通过眼睛检查它们是否是预期的。一旦出现一些预期的异常,我可以通过每周运行脚本cron
,并通过电子邮件获取列表中添加/删除/总数的文件计数。
我对此的担忧是,它的效率非常低。一个专用实用程序,可以直接与权限 API/归档系统交互,批量获取 ACL 进行检查structs
,并且不必在脚本中遍历,并且为每个项目生成 2 个文件系统调用,转换为文本格式,然后执行文本比较...效率很低。 Unix之道是拥有一个工具并做好一项专门的工作(或密切相关的工作)。虽然脚本可以做到这一点,但从优雅/效率的角度来看,这只是可怕的,除非 ACL 处理方面做得更好(无论如何对我来说!)。因此,我想知道是否有更好的方法 - 意味着一些标准实用程序、setfacl/getfacl/otheracl
选项或移植包,这将使过程更加高效?
重置权限将是一个好方法,但我想确定我是否犯了错误,而不是修复它们但不知道它。或者,因为除了少数已知例外之外的所有例外都应该只具有遗传权限,遍历并列出发现的任何文件+目录明确的ACL 也是一个巧妙的解决方案,因为它避免了第二次查找。
答案1
您在问题中做出了太多假设。如果我只回答你的标题,我会说“一个脚本”。我不知道有什么通用工具,因为这不是您通常会做的事情。
你有标准的 Unix权限模型和访问控制列表。第一个是使用chmod
和进行管理chflags
- 另一个是使用setfacl
和进行管理getfacl
。
我不认为您一次查看 ACL 根本不是问题。这就是 Unix 的做事方式。然后你就可以建立漂亮的管道。如果您只想检查文件是否具有与父文件不同的 ACL,则相应地构建管道。
从你的问题来看,你似乎认为很明显你想如何监控事物并将其保持在适当的位置。但你不给任何具体的例子。对你来说显而易见的事情对我们其他人来说并不明显。
所以!我有方便的脚本来解决您的具体问题吗?不。即使您贴上“awk”标签,我也不打算写一个:-)
但我确实有一些典型的模式:
1. 掌控一切
ACL 的功能非常强大,通过高度关注细节来设置所有内容,您可以确保权限保持您的预期。这自然需要你来负责。使用正确的 acl,您将拥有比简单的用户/组更强大的功能。如果我是指定控制的人,我将花费巨大的努力来确保事情按照我想要的方式设置。如果是这种情况,那么我们应该讨论如何避免在特定情况下过于宽容。如果用户不打算设置权限,那么我们应该相应地设置它们。继承可能是一个挑战,但它是可以解决的。
2. 掌控一切
另一种典型且简单的方法是简单地重置权限。如果更多人拥有管理访问权限,这会派上用场。所以而不是依赖于它看起来好吧,然后定义你的阻塞点并重置权限。如果您希望文件具有与父级相同的权限,请遍历父级并重置子级。任何不幸设置了错误权限的管理员都将得到系统的“帮助”。如果是这种情况,脚本将是 chmod/chflags/setfacls/setuid 的简单列表。
3. 清洁工
如果您有一个真正复杂且安全性较低的系统,并且您需要充当管理员并以谨慎的方式进行清理(而不是简单地控制),那么在某些情况下,研究入侵检测系统 (IDS) 是有意义的。一个这样的著名系统可能是绊线。这可以帮助您监控系统并在发生意外更改时通知您。您应该特别查看 Tripwire 政策双重政策和财产p - Permission & filemode bits
审计可能也有你的兴趣。