![不同客户端上的 GlusterFS 权限](https://linux22.com/image/689098/%E4%B8%8D%E5%90%8C%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B8%8A%E7%9A%84%20GlusterFS%20%E6%9D%83%E9%99%90.png)
我在使用 GlusterFS 替换现有的非 HA NFS 设置以在机器之间共享数据时遇到问题。首先介绍一下配置:
概念验证 glusterfs 是一个包含 2 台机器和一个复制卷的设置。然后有 2 个客户端导入此卷。一个客户端是供客户连接和发送文件的 SFTP 服务器,另一个是我们的应用程序运行的服务器。
我遇到的问题与用户和权限有关。连接到 SFTP 服务器的用户将被关在特定目录中 (chroot),并且 SFTP 需要严格的权限 (该目录由 root 用户拥有,并且 root 是唯一允许写入权限的用户) 同时,以特定用户身份运行的应用程序在另一台服务器上将需要对目录树具有完全访问权限。
我要替换的设置使用 NFS,并且在两个客户端上使用不同的所有权/权限(安装时使用 uid 和 gid 选项)安装导出;这样,两个服务器上的用户就拥有了他们需要的权限。
另一方面,据我所知,GlusterFS 不允许在每台机器上安装具有特定所有权的卷。我知道 GlusterFS 符合 POSIX 标准,我可以使用标准权限系统和 ACL
我已经考虑和/或测试了几个选项,但没有一个令我满意。
使用 ACL:当为应用服务器的用户添加读/写权限时,它会将该权限视为“组”权限,并且 SFTP 会抱怨。
在机器之间创建通用用户:不太灵活,依赖系统管理员来维护通用用户,并且当转移到生产时情况会变得复杂,因为更多的系统必须进行交互。
挂载到不同的地方并绑定到正确的目录。但后来我发现我无法更改所有权...
使用 NFS/Ganesha 或 SAMBA。这有点过分了,我可以安装 glusterfs 客户端,但我不想使用必须配置和维护的附加层。
该卷本身及其所有内容均归用户 root 和组 root 所有。
你们有更好的主意吗?或者知道 GlusterFS 的某个功能可以让我更简单地进行设置?
提前致谢。
答案1
我认为我找到了一个可以接受的解决方案。我忘记了 SFTP 守护进程的行为。确实,SFTP 需要 jail 目录由用户 root 拥有,并且只有 root 才具有写入权限。但子目录可以具有任何权限。
我没有将 ACL 配置到 gluster 卷的根目录,而是仅更改 jail 目录内容的 ACL,方式如下:
客户端 1 - 应用服务器
root@appsrv$ cd /path/to/gluster/volume
root@appsrv$ chown -R root:root *
root@appsrv$ chmod -R 2750 *
root@appsrv$ ls -la
total 6
drwxr-x--- 14 root root ./
drwxr-xr-x 4 appuser appgroup ../
drwxr-xr-x 3 root root .trashcan/
drwxr-s--- 5 root root User1/
drwxr-s--- 5 root root User2/
drwxr-s--- 5 root root User3/
root@appsrv$ setfacl -Rm u:appuser:rwx */*
root@appsrv$ setfacl -Rm g:appgroup:rx */*
root@appsrv$ setfacl -Rdm u:appuser:rwx */*
root@appsrv$ setfacl -Rdm g:appgroup:rx */*
root@appsrv$ ls -la
total 6
drwxr-x--- 14 root root ./
drwxr-xr-x 4 appuser appgroup ../
drwxr-xr-x 3 root root .trashcan/
drwxr-s---+ 5 root root User1/
drwxr-s---+ 5 root root User2/
drwxr-s---+ 5 root root User3/
客户端 2-SFTP 服务器
root@sftpsrv$ cd /path/to/gluster/volume
root@sftpsrv$ setfacl -Rm g:sftpgroup:rx *
root@sftpsrv$ setfacl -Rm g:sftpgroup:rwx */input
root@sftpsrv$ setfacl -Rdm g:sftpgroup:rx *
root@sftpsrv$ setfacl -dRm g:sftpgroup:rwx */input
root@sftpsrv$ ls -la
total 6
drwxr-x--- 14 root root ./
drwxr-xr-x 4 root root ../
drwxr-xr-x 3 root root .trashcan/
drwxr-x---+ 5 root root User1/
drwxr-x---+ 5 root root User2/
drwxr-x---+ 5 root root User3/
现在,SFTP 可以正常工作,并且不会抱怨权限问题,并且应用程序服务器在需要时具有完全访问权限