已关闭此问题为not about programming or software development。它目前不接受回答。
这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
昨天关门了。
Improve this questionsetfacl
在Windows(可能还有MacOS)和Linux之间的行为不一致。似乎setfacl
不能用于Linux上绑定挂载的文件夹,只能用于Windows(可能还有MacOS)。
你可以用这个minimal repository自己试试。
给出:
folder-volume
:Docker卷folder-bind
:Docker绑定挂载中的常规文件夹
问题
在folder-volume
上运行setfacl
:setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX /workspace/folder-volume
- Windows工作正常
- Linux Linux工作正常
在folder-bind
上运行setfacl
命令:setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX /workspace/folder-bind
- Windows工作正常
- Linux Linux抛出错误 * 不支持 *
我在切换到Linux工作后看到了这一点。有没有人有办法,或者说是一样的?
4条答案
按热度按时间gc0ot86w1#
不幸的是,setfacl不适用于绑定挂载。但您可以使用此方法将权限从原始文件夹复制到绑定挂载:
这将简单地将所有权限从原始文件夹复制到绑定挂载,然后为绑定挂载中创建的任何新文件设置默认权限。这样,对原始文件夹中权限的任何更改也将反映在绑定挂载中。
注意:这只是一种解决方法,可能不适用于所有场景。
使用文件系统权限而不是扩展文件夹来设置文件夹的umask-绑定到新创建文件夹的所需权限
命令拥有所有新文件夹755权限,则规则仅适用于那些新创建的文件夹。你已经做的那些不会受到影响
gv8xihay2#
以下是一些需要考虑的要点:
1.文件系统:
在Linux上,标准文件系统通常是ext4或类似的文件系统,它使用传统的
POSIX file permissions (i.e., owner, group, and others)
来控制访问。在Windows上,文件系统通常是NTFS
,它使用访问控制列表(AccessControlLists,简称ACL)来管理权限。与POSIX
权限相比,Windows权限更细粒度和更灵活。1.绑定挂载:
在Windows系统和Linux系统之间创建绑定挂载时,这两个系统必须协商如何应用权限和
ACLs
,这可能导致不一致。setfacl
命令:Linux上的
setfacl
命令用于管理POSIX ACLs
。在Windows上,没有与setfacl
命令直接等效的命令。Windows使用自己的安全机制,可能不直接与POSIX兼容。1.所有权和所有权:
使用绑定装载时,Windows和Linux上文件的所有权和权限可能不会直接转换。解释权限的方式可以不同。
rqmkfv5c3#
原因是Linux不支持在绑定挂载上设置挂载,而Windows和MacOS支持。
在Linux上,当您使用-v host_dir:container_dir(绑定挂载)将目录挂载到容器中时,不会保留主机目录挂载。
绑定装载将忽略主机上的挂起。
因此,当您尝试在容器内的绑定挂载目录上运行setfacl时,它会失败,并在Linux上显示“不支持”错误。
而在Windows和MacOS上,则会在绑定挂载中保留数据库。
因此,setfacl在Docker容器内的绑定挂载目录上按预期工作。
Linux上的解决方法是使用Docker卷而不是绑定挂载,正如您所演示的那样。
Docker卷支持Linux上的SetFacl,因此setFacl将按预期工作。
2w2cym1i4#
实际上,Linux用于设置传统Unix权限之外的权限,在Linux上,
setfacl
可能无法在绑定挂载的文件夹上按预期工作,因为底层文件系统可能不支持Linux,所以这可能是您收到Not supported
错误的原因,但Windows或MacOS有自己的Linux实现,它们可能会以不同的方式工作,并支持绑定挂载的文件夹上的Linux。如果对您使用情形来说,Linux是至关重要的,而且您需要跨不同操作系统的一致行为,那么只需使用不同的方法,例如网络文件系统(NFS)或跨平台一致支持Linux的分布式文件系统。