文件存储CFS

    为不同目录设置不同的用户权限

    问题背景

    在很多情况下,一个公司或组织内部的不同职能部门、业务需要共享数据,同时赋予不同的权限以保证数据的安全性。这个时候,用户希望像使用本地文件系统那样,为不同的用户设置不同的访问权限。

    NFS 协议支持 UNIX 风格的权限认证机制,是以 UID、GID,而不是用户名、组名来进行权限验证的。因此,如果从两个不同的虚拟机访问 CFS 文件系统,根据用户的 UID 在这些虚拟机上是相同还是不同,会有不同的体验:

    • 如果两个虚拟机上同一用户的 UID 相同,CFS 会将其视为同一用户;
    • 如果两个虚拟机上同一用户的 UID 不相同,则 CFS 会将其视为不同的用户;
    • 如果不同虚拟机上,两个不同用户的 UID 相同,则 CFS 会将其视为同一个用户。

    除了极个别特殊的用户(如 root),不同机器上同一用户的 UID、GID 大概率是不一样的。所以,需要做一些特别的设置,以使访问权限能够正确工作。

    统一用户的 UID 和 GID

    您可以按照以下方法在每个虚拟机上设置 UID 和 GID:

    方法一:使用 usermode 和 groupmode 修改 UID 和 GID

    1. 如果用户不存在,创建用户,假设要创建的用户名字为 cfs,并通过 id 命令查看 UID 和 GID。命令和示例输出如下:
    [root@test-cfs ~]# useradd cfs
    [root@test-cfs ~]# id cfs
    uid=500(cfs) gid=500(cfs) groups=500(cfs)
    1. 通过 usermode 和 groupmode 命令修改 cfs 账户的 UID 和 GID 到一个预先设定的值,例如 888。命令和示例输出如下:
    [root@test-cfs ~]# usermod -u 888 cfs
    [root@test-cfs ~]# groupmod -g 888 cfs
    [root@test-cfs ~]# id cfs
    uid=888(cfs) gid=888(cfs) groups=888(cfs)

    方法二:直接修改 /etc/passwd 和 /etc/group 文件

    第一个步骤和方法一一样,创建用户,创建完之后,分别打开 /etc/passwd 和 /etc/group 编辑。

    vi /etc/passwd,找到其中 cfs 用户所在的行,修改 UID 和 GID。

    修改前:

    Snipaste_2019-07-24_15-24-21.jpg

    修改后:

    Snipaste_2019-07-24_15-25-14.jpg

    输入 :wq 退出编辑模式并保存修改。

    vi /etc/group,找到其中 cfs 用户所在的行,修改其所在的组。

    修改前:

    Snipaste_2019-07-24_15-30-58.jpg

    修改后:

    Snipaste_2019-07-24_15-31-25.jpg

    输入 :wq 退出编辑模式并保存修改。

    创建初始目录

    默认情况下,只有 ROOT 用户可以创建目录和文件。所以,还需要以 root 账户为创建每个用户设置自己的根目录,并 chown 修改权限后,用户才能以自己的身份才能使用。示例代码如下(假设挂载点为 /mnt):

    [root@test-cfs ~]# mkdir /mnt/cfs
    [root@test-cfs ~]# chown -R cfs:cfs /mnt/cfs
    [root@test-cfs ~]# ls -l /mnt/
    total 8
    drwxr-xr-x 2 cfs  cfs  4096 Jul 24 15:38 cfs
    drwxr-xr-x 2 root root 4096 Jul 24 15:39 root

    内核禁止使用非 root 用户挂载文件系统,所以在用户使用之前,仍然需要先以 root 账号挂载文件系统。这个步骤可以通过“自动挂载”来实现自动化。同时挂载的时候,可以直接以用户的根目录路径挂载,将使用范围局限到用户自己。

    上一篇
    操作指南
    下一篇
    跨地域或账号使用文件系统