为不同目录设置不同的用户权限
问题背景
在很多情况下,一个公司或组织内部的不同职能部门、业务需要共享数据,同时赋予不同的权限以保证数据的安全性。这个时候,用户希望像使用本地文件系统那样,为不同的用户设置不同的访问权限。
NFS 协议支持 UNIX 风格的权限认证机制,是以 UID、GID,而不是用户名、组名来进行权限验证的。因此,如果从两个不同的虚拟机访问 CFS 文件系统,根据用户的 UID 在这些虚拟机上是相同还是不同,会有不同的体验:
- 如果两个虚拟机上同一用户的 UID 相同,CFS 会将其视为同一用户;
- 如果两个虚拟机上同一用户的 UID 不相同,则 CFS 会将其视为不同的用户;
- 如果不同虚拟机上,两个不同用户的 UID 相同,则 CFS 会将其视为同一个用户。
除了极个别特殊的用户(如 root),不同机器上同一用户的 UID、GID 大概率是不一样的。所以,需要做一些特别的设置,以使访问权限能够正确工作。
统一用户的 UID 和 GID
您可以按照以下方法在每个虚拟机上设置 UID 和 GID:
方法一:使用 usermode 和 groupmode 修改 UID 和 GID
- 如果用户不存在,创建用户,假设要创建的用户名字为 cfs,并通过 id 命令查看 UID 和 GID。命令和示例输出如下:
[root@test-cfs ~]# useradd cfs
[root@test-cfs ~]# id cfs
uid=500(cfs) gid=500(cfs) groups=500(cfs)
- 通过 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。
修改前:
修改后:
输入 :wq
退出编辑模式并保存修改。
vi /etc/group
,找到其中 cfs 用户所在的行,修改其所在的组。
修改前:
修改后:
输入 :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 账号挂载文件系统。这个步骤可以通过“自动挂载”来实现自动化。同时挂载的时候,可以直接以用户的根目录路径挂载,将使用范围局限到用户自己。