如何在不使用 find 的情况下递归设置权限,文件夹 700,文件 600

How to set permissions recursively, 700 for folders and 600 for files, without using find

我正在尝试找出一种递归设置权限的方法,特定路径上的目录和子目录为 700,文件为 600。我会使用这些命令:

find /path -type d -print0 | xargs -0 chmod 700
find /path -type f -print0 | xargs -0 chmod 600

但是用户没有运行“查找”命令的权限。 作为一种解决方法,我尝试制作一个脚本,其中包含来自设置了 setuid 粘性位的 root 用户的上述命令,因此它将 运行 具有 root 权限(例如普通用户 运行 具有 root 权限的 passwd 或 sudo 命令权限):

chmod 4755 script.sh

但我无法从受限用户帐户执行脚本,它仍然说我没有 运行 查找命令的权限。

有谁知道我如何在不使用 find 命令的情况下完成此操作?

编辑: OS:Centos 6.5

显然这很容易实现。有两种方法:仅使用 chmod,或在所需路径上设置 ACL(访问控制列表):

  • 我会使用 chmod 运行:
    chmod -R 600 /path          # to remove executable permissions
    chmod -R u=rwX,g=,o= /path  # to make directories transversable
    

对于用户所有者,我给了大写字母“X”,因此它仅适用于目录而不适用于文件。

  • 使用 ACL:

    setfacl -Rm u::rwX,g::0,o::0 /path
    setfacl -Rm d:u::rwX,g::0,o::0 /path
    

再次使用大写 X,因此它仅适用于目录而不适用于文件。第一个命令应用 ACL,第二个命令使其成为默认策略,因此新创建的文件将继承所需的权限。