将chmod和chgrp组合的Shell命令

4

是否有一种结合了chmodchgrp的变体,可以在每个文件中进行一次系统调用来设置权限和组?

2个回答

3

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

使用 chmodchown 的技巧

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

  1. 在目标文件上将模式标志削减到非常保守的集合(可能为空)。
  2. 更改目标文件的所有者和组。
  3. 将目标文件赋予所需的模式标志。

通过这种方式,您可以避免与连续调用 chmodchownchownchmod 相关的潜在安全问题。

install/open 技巧

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

  1. 将旧文件重命名。
  2. 使用 install 命令将旧文件复制到具有所需所有权和访问模式信息的新文件中。
  3. 删除旧文件。

这样做会破坏硬链接。基于 chownchmod 的解决方案不存在此问题。


1
据我所知,不行。
此外,由于文件访问模式和所有者/组信息是使用不同的系统调用设置的(请参见man 2 chmodman 2 chown),我认为在主流类Unix系统上实现这样的命令是不可能的。
(显然,可以修改GNU/Linux内核以添加组合系统调用,但使用该系统调用的假设命令将不可移植。)

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