为不同目录设置不同用户权限
更新时间:2023-06-19
问题背景
在很多情况下,一个公司或组织内部的不同职能部门、业务需要共享数据,同时赋予不同的权限以保证数据的安全性。这个时候,用户希望像使用本地文件系统那样,为不同的用户设置不同的访问权限。 PFS 协议支持 UNIX 风格的权限认证机制,是以 UID、GID,而不是用户名、组名来进行权限验证的。因此,如果从两个不同的虚拟机访问 PFS 文件系统,根据用户的 UID 在这些虚拟机上是相同还是不同,会有不同的体验:
- 如果两个虚拟机上同一用户的 UID 相同,PFS 会将其视为同一用户;
- 如果两个虚拟机上同一用户的 UID 不相同,则 PFS 会将其视为不同的用户;
- 如果不同虚拟机上,两个不同用户的 UID 相同,则 PFS 会将其视为同一个用户。 除了极个别特殊的用户(如 root),不同机器上同一用户的 UID、GID 大概率是不一样的。所以,需要做一些特别的设置,以使访问权限能够正确工作。
统一用户的 UID 和 GID
您可以按照以下方法在每个虚拟机上设置 UID 和 GID
方法一:使用 usermode 和 groupmode 修改 UID 和 GID
- 如果用户不存在,创建用户,假设要创建的用户名字为 student,并通过 id 命令查看 UID 和 GID。命令和示例输出如下:
[root@bcc-pfs ~]# useradd student
[root@bcc-pfs ~]# id student
uid=1000(student) gid=1000(student) groups=1000(student)
- 通过 usermode 和 groupmode 命令修改 student 账户的 UID 和 GID 到一个预先设定的值,例如 888。命令和示例输出如下:
[root@bcc-pfs ~]# usermod -u 888 student
[root@bcc-pfs ~]# groupmod -g 888 student
[root@bcc-pfs ~]# id student
uid=888(student) gid=888(student) groups=888(student)
方法二:直接修改 /etc/passwd 和 /etc/group 文件
- 第一个步骤和方法一一样,创建用户,创建完之后,分别打开 /etc/passwd 和 /etc/group 编辑。
- 输入:
vi /etc/passwd
(该文件是系统用户配置文件),找到其中 student 用户所在的行,修改 UID 和 GID。
- 修改前
- 修改后
下面是每个字段的解释:
student
:用户名,表示该用户的登录名为student。x
:密码占位符。888
:用户ID(UID),这个字段表示用户student的UID为888。UID是一个唯一的数字标识符,用于标识用户在系统中的身份。888
:组ID(GID),这个字段表示用户student的主组ID为888。空字段
:表示用户的注释字段,通常用于描述用户的额外信息。/home/student
:用户的家目录路径,表示用户student的家目录位于/home/student。/bin/bash
:用户的默认登录Shell,表示当用户登录时,系统会使用Bash作为其默认Shell。
- 输入
:wq
退出编辑模式并保存修改。 - 输入:
vi /etc/group
(该文件是用户组配置文件),找到student所在的行,修改其组id。
- 修改前:
- 修改后:
下面是每个字段的解释:
student
:组名,表示该组的名称为student。x
:密码占位符。888
:组ID(GID),这个字段表示该组的组ID为888。组ID是一个唯一的数字标识符,用于标识组在系统中的身份。
- 输入
:wq
退出编辑模式并保存修改。
创建初始目录
默认情况下,只有 root 用户可以创建目录和文件。所以,还需要以 root 账户为创建每个用户设置自己的根目录,并 chown 修改权限后,用户才能以自己的身份使用。示例代码如下(假设挂载点为 /mnt
):
[root@bcc-pfs ~]# mkdir /mnt/dir0
[root@bcc-pfs ~]# chown -R student:student /mnt/dir0
[root@bcc-pfs ~]# ls -l /mnt
total 0
drwxr-xr-x 2 student student 0 Jun 15 15:38 dir0