结合chmod和chgrp的Shell命令

时间:2014-09-11 10:58:01

标签: linux unix system-calls chmod chgrp

是否有chmodchgrp的组合变体在每个文件的单个系统调用中设置权限和组?

2 个答案:

答案 0 :(得分:3)

没有这样的变体,因为两个操作chmod(2)chown(2)是由不同的系统调用实现的。

离开chmodchown

由于安全问题,您可能正在寻找chmodchown的此类变体。如果是这种情况,您可以使用以下策略:

  1. 剥离模式标记到目标文件上非常保守的集合(可能为空)。
  2. 更改目标文件的所有者和组。
  3. 为目标文件指定所需的模式标志。
  4. 这样可以避免与对chmodchownchownchmod的连续调用相关的潜在安全问题。

    install / open技巧

    同时唯一的系统调用设置模式标志和所有权信息可能是open(2)。因此,您可以使用模拟目标所有者的进程以适当的模式打开文件。这可能是install所做的,所以如果这是一个选项:

    1. 重命名旧文件。
    2. 使用install命令将旧文件复制到具有所需所有权和访问模式信息的新文件。
    3. 删除旧文件。
    4. 然而,这样做会破坏硬链接。基于chownchmod的解决方案没有这个问题。

答案 1 :(得分:1)

AFAIK,没有。

此外,由于文件访问模式和所有者/组信息是使用不同的系统调用设置的(请参阅man 2 chmodman 2 chown),我认为不会可以实现这样的命令......至少在类似Unix的主流系统上。

(显然,可以修改GNU / Linux内核以添加组合系统调用,但是使用系统调用的假设命令将不可移植。)