覆盖 700 权限,使其成为组可读或至少可供给定用户(但所有者除外)访问?

覆盖 700 权限,使其成为组可读或至少可供给定用户(但所有者除外)访问?

鉴于应用程序正在写入具有700权限的文件,这意味着该组无法读取这些文件,因此我需要特殊的备份用户帐户可以读取这些文件。

ACL似乎完全没用,因为chmod修改了掩码并且除所有者或其他组之外的用户仍然没有权限。

  1. 定期进行递归chmod? Hakish 和资源浪费,尤其是在非常大的文件集上。
  2. 为此使用root(通过sudo)?不安全。没有细粒度的控制。不适合在远程计算机(例如 NAS)上启动的 rsync。
  3. 使用与制作这些文件的应用程序相同的用户,即使用所有者用户进行备份。仍然是哈克式的,不受欢迎,因为备份用户应该有仅限读取访问权限且仅限给定目录。。对于从外部发起的 rsync 尤为重要。
  4. 使用类似bindfs?的方法将给定目录安装到另一个目录性能受到很大影响,对于这种简单的与权限相关的任务来说是不合理的。

我想知道为什么linux不允许管理员指定应用程序对文件的最小允许权限(可以使用掩码限制最大权限,但不能强制执行或透明添加,这看起来很奇怪)

有什么解决办法吗?

答案1

在类似的情况下,我采取了这种chmod方法,但通过在启动时启动并由inotifywait。这是我实际使用的代码的精简版本,它还处理所有权/分组关系,并记录所有更改或错误:

#!/bin/bash
inotifywait --monitor --recursive --event create,attrib --format '%w%f' "$@" |
    while IFS= read -r item
    do
        # Avoid looping when we apply the fix-up chmod
        perm=$(stat -c %A "$item")

        if [[ -d "$item" ]] && [[ ! "$perm" =~ dr.xr.xr-x ]]
        then
            # Directory with wrong permissions
            printf 'dir\t%s\n' "$item"
            chmod ug+rx,o=rx "$item"
        fi
        if [[ ! -d "$item" ]] && [[ ! "$perm" =~ -r..r..r.. ]]
        then
            # Item (not a directory) with wrong permissions
            printf 'other\t%s\n' "$item"
            chmod ug+rw,o-w,o+r "$item"
        fi
    done

尽管您会发现chmod代码无法处理包含换行符的文件名,但这是由一个仅在创建文件或修改其属性时触发的工具来调节的。对于大型理智数据集是可接受的。

您可能希望通过一个偶尔的过程来补充这一点,无条件地修复所有权限。此示例确保用户/组权限至少具有读取(如果是目录则为执行),其他人的权限相同但没有写入:

find /path/to/base -type d -exec chmod ug+rx,o=rx {} \; -o -exec chmod ug+rw,o-w,o+r {} \;

如果我今天编写解决方案,我可能会考虑incron而不是循环

相关内容