问题
在使用 Docker 或者 NFS 的时候,需要文件系统挂在到不同的系统中拥有正确的读写权限,需要指定文件所属用户和组的 uid 和 gid。在创建用户和组的时候,系统会自动分配对应的值,这导致在不同的系统中很容易造成 uid 和 gid 不一样而造成读写权限混乱。
例如在系统 A 中,用户 git 的 uid 和组 git 的gid 如下:
[sysops@cn-bj-aliyun-3 ~]$ id git
uid=1001(git) gid=1001(git) groups=1001(git)
而系统 B 中的值如下:
[sysops@cn-bj-aliyun-3 ~]$ id git
uid=998(git) gid=998(git) groups=998(git)
我们在系统 A 以 git 用户创建目录或者文件:
[git@cn-bj-aliyun-3 data]$ ls -lh
total 60K
-rw-r--r-- 1 git git 100 Jul 5 23:22 file1
-rw-r--r-- 1 git git 400 Dec 18 2018 file2
-rw-r--r-- 1 git git 349 Dec 18 2018 file3
将这个目录挂在到 B 系统中时,将会出现这种情况:
[git@cn-bj-aliyun-3 data]$ ls -lh
total 60K
-rw-r--r-- 1 1001 1001 100 Jul 5 23:22 file1
-rw-r--r-- 1 1001 1001 400 Dec 18 2018 file2
-rw-r--r-- 1 1001 1001 349 Dec 18 2018 file3
这样就会导致在 B 系统中文件权限混乱,因为 B 系统中没有对应 uid 和 gid 的用户和组。接下来我们来修改 uid 和 gid,以下以修改系统 A 中的 git 为例。
修改命令
修改 UID
sudo usermod -u 998 git
修改文件的所属用户
find / -user 1001 -exec chown -h git {} \;
修改 GID
sudo groupmod -g 998 git
修改文件的所属用户
find / -group 1001 -exec chgrp -h git {} \;
其它说明
另外在修改之前可以查看 /etc/passwd
和 /etc/group
文件,以便选取一个没有被使用的 uid 和 gid