【问题标题】:How to set permissions recursively, 700 for folders and 600 for files, without using find如何递归设置权限,文件夹700,文件600,不使用find
【发布时间】:2016-08-01 21:51:23
【问题描述】:

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

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

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

chmod 4755 script.sh

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

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

编辑: 操作系统:Centos 6.5

【问题讨论】:

    标签: linux permissions find chmod setuid


    【解决方案1】:

    显然这很容易实现。有两种方法:仅使用 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,第二个命令使其成为默认策略,因此新创建的文件将继承所需的权限。

    【讨论】:

    • chmod 版本不能正常工作,X 是一个特殊的执行,如果至少有一个其他模式已执行,它将授予执行权限。这意味着如果文件在用户组或其他用户组中已经有x,那么它将保留用户的执行设置。要仅使用 chmod 执行此操作,我们必须首先在开始时清除所有执行设置,然后运行您的 chmod 命令。例如chmod -R a-x /path; chmod -R u=rwX,g=,o= /path
    猜你喜欢
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2015-07-08
    • 2012-03-02
    • 2011-01-17
    • 2012-12-26
    • 2014-09-28
    • 1970-01-01
    相关资源
    最近更新 更多