文件权限

文件权限

几年前/几个版本之前,我发现了一个脚本,该脚本利用了当前文件夹的目录组/权限来获取新文件子文件夹

目前,当我使用 Shotwell 将照片导入 12.04 时,我必须使用终端发出:chgrp photography *.JPG。这使“摄影”组的其他 ubuntu 成员能够将这些文件添加到他们的 Shotwell 版本中。

我发现修改文件夹属性/权限不会将组设置为“将权限应用于封闭文件”

答案1

因此,如果我理解正确的话,您希望放入特定文件夹的文件(图片)自动分配到特定组(摄影)。

一个可能的解决方案是设置“setgid 权限“在存储所有图像的父文件夹中。setgid 权限(参见例如维基百科) 确保在设置了 setgid 位的文件夹中创建的所有文件和文件夹都获得该文件夹的组(而不是文件创建者设置的组)。

由于这不会影响已在此目录中创建的文件和文件夹,因此首先使用递归方式更改其组

chgrp photography -R <your shotwell photo folder>

现在在该文件夹上设置 setgid 位。为此,请运行

chmod g+s <your shotwell photo folder>

执行完这两个命令后,你的shotwell照片文件夹以及里面的所有内容都属于“摄影”组,并且setgid也设置好了:

ls -ld <your shotwell photo folder>
drwxrwsr-x 2 <your user> photography 4096 Aug 27 20:42 <your shotwell photo folder>

注意 中的 s drwxrwsr-x。该“s”表示已设置 setgid 位。

现在,每次将照片复制到您的 shotwell 文件夹时,它们都会自动分配到“摄影”组。

警告:
如果文件和文件夹被移动到该目录中(而不是复制)。它们的组不会改变。这是由于工具本身的原因。“mv”基本上只是重命名文件,保留其原始所有权和权限,而“cp”会在目标目录中创建一个新文件。

答案2

如果您只有一组人,并且每个人对文件都具有相同的权限,那么 ceage 答案中的 setgid 位解决方案将完美地发挥作用 (+1),但如果您需要对多个组、不同的权限甚至每个用户规则进行更多控制,则可以使用 acl。你可以看看man setfacl

例如,在您的情况下,您可以为摄影组定义一个 acl:

setfacl -Rm d:g:photography:rwX,g:photography:rwX /photo_dir

    -R : recursive to all sub-folders and files
    -m: modify using arguments in command line (can be used from config files)
    d:g:photography:rwX: apply default (d:) permissions (rwX:) for photography group (g:group) on new files/directories
    g:photography:rwX: same as above on existent files/directories (no d:)

rwX: capital X defines x only for directories

您可以使用以下方式检查已应用的权限getfacl /photo_dir

例如,如果您需要第二个具有只读权限的组,则可以定义另一个 acl,并以相同的方式将其应用于新组,而rX不是rwX。可以为整个目录或单个文件定义 ACL。

这将是永久性的,当您添加、删除或修改图片时,您无需重新定义权限。您只需定义一次 ACL,然后“忘记”它。

看到的用户和组ls -l将不再相关/足以控制文件访问(当您第一次运行 setfacl 时它们会在 acl 中转换)并且权限列表末尾会有一个“+”,如drwxrws---+ 6 root....

相关内容