为子目录 (rx) 设置全局可浏览权限,但使除所有者和组成员之外的所有人都无法访问文件

为子目录 (rx) 设置全局可浏览权限,但使除所有者和组成员之外的所有人都无法访问文件

我通常有一个目录,我希望所有用户都能够浏览该目录,但文件不可读且不可执行。

我看到一些相关问题与我想要的不完全匹配:

  • 这个问题正在使用umask.不适用,因为这些文件已经创建。

  • 这个问题正在使用 ACL。不过我想在这里使用 UNIX 权限。

我通常使用find命令,但我知道它有一些弱点。我稍后会将其作为潜在的答案以及为什么我认为可能有更好的方法发布。

答案1

我通常使用以下内容:

find . -type f -print0 | xargs -0 sudo chmod 440
find . -type d -print0 | xargs -0 sudo chmod 555

但是,这没有考虑可执行文件。我正在考虑对文件做这样的事情:

find . -type f -print0 | xargs -0 sudo chmod ug+r ug-w o-rwx

但这仍然是两个命令,我不确定这是否是最好的方法。也许有人有更好的建议。

答案2

好吧,只是不要对目录及其中的文件设置相同的权限:

$ chmod g+rx directory/
$ chmod g= directory/*

在这里,群组成员可以进入并浏览该目录,但他们将无法读取其中的文件。

编辑:关于你的新标题,我建议:

$ chmod a+rx directory/
$ chmod u=rwX,g=rX,o= *

答案3

对于已经创建的目录和文件:

查找/start_directory -type d -exec chmod 755 {} \;

查找/start_directory -type f -exec chmod 660 {} \;

如果您的用户应该能够创建新文件和/或子目录,请提供更多详细信息,因为解决方案取决于具体要求。

相关内容