如何递归地设置权限,文件夹为700,文件为600,而不使用find命令。

7
我正在尝试找到一种方法,在特定路径上递归地设置目录和子目录的权限为700,文件的权限为600。我会使用以下命令:
find /path -type d -print0 | xargs -0 chmod 700
find /path -type f -print0 | xargs -0 chmod 600

但用户没有运行“find”命令的权限。 作为一种解决方法,我尝试创建一个包含以上命令的脚本,使用设置了setuid粘着位的根用户来运行它,因此它将以root特权运行(就像普通用户以root特权运行passwd或sudo命令一样):

chmod 4755 script.sh

但我无法在受限制的用户帐户中执行脚本,仍然显示我没有权限运行find命令。
有没有人有任何想法,如何在不使用find命令的情况下完成这个任务?
编辑: 操作系统: Centos 6.5
1个回答

10

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

  • Using chmod i would run:
    chmod -R 600 /path          # to remove executable permissions
    chmod -R u=rwX,g=,o= /path  # to make directories transversable
    

对于用户所有者,我赋予大写字母“X”,这仅适用于目录而不是文件。

  • Using ACL:

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

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


1
chmod 版本不太正常,X 是一个特殊的执行权限,如果其他模式中至少有一个具有执行权限,则会授予执行权限。这意味着如果文件已经在用户组或其他人中具有 x,则它将保留用户的执行设置。要仅使用 chmod 完成此操作,我们必须首先清除所有执行设置,然后运行您的 chmod 命令。例如 chmod -R a-x /path; chmod -R u=rwX,g=,o= /path - CMCDragonkai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接