为什么Linux系统里用户id和组id不一样?怎么改成一样呢?

缘起

在FreeBSD宿主系统里,看到有异常进程,id是1003,于是去查,发现是虚拟机里的个人账户,但是去虚拟机里面,发现该个人账户的组id是1004:

复制代码
1003    29772   0.0  0.0    4596  3488  -  TsJ  15:05        0:00.06 sh (bash)
1003    29775   0.0  0.0    4348  3320  -  TsJ  15:05        0:00.01 bash -ilc \n# Server installation script\n\nTMP_DIR="${XDG_RUN
1003    29777   0.0  0.0    4348  3320  -  TJ   15:06        0:00.00 bash -ilc \n# Server installation script\n\nTMP_DIR="${XDG_RUN
root    31954   0.0  0.0   15432  1968  -  IsJ  21Nov25      0:00.48 /usr/sbin/sshd
1003    52044   0.0  0.0    4596  3488  -  TsJ  19:10        0:00.06 sh (bash)
1003    52049   0.0  0.0    4348  3320  -  TsJ  19:10        0:00.01 bash -ilc \n# Server installation script\n\nTMP_DIR="${XDG_RUN
1003    52063   0.0  0.0    4348  3320  -  TJ   19:10        0:00.00 bash -ilc \n# Server installation script\n\nTMP_DIR="${XDG_RUN

对应的用户:

复制代码
www:x:1000:1000::/home/www:/sbin/nologin
mysql:x:1001:1002::/home/mysql:/sbin/nologin
ftpuser:x:1002:1003::/home/wwwroot/:/sbin/nologin
skywalk:x:1003:1004:sky,,,:/home/skywalk:/bin/bash
mariadb:x:1004:1006::/home/mariadb:/sbin/nologin

为什么它的用户id和用户组id不一样呢?

AI说这是正常现象,用户id和用户组id分别管理,创立的时候可以不一样,有的是为了安全考虑,有的是因为相同id已经被占用了,就顺位建立一个新的组id。

我思考了一下,好像这台机器是先安装的mysql、ftp等,再创建的skywalk账户,结果就导致这样了....

查看一下

用id来查看用户:

复制代码
skywalk@ubjail1:~$ id skywalk
uid=1003(skywalk) gid=1004(skywalk) groups=1004(skywalk),999(ollama)
skywalk@ubjail1:~$ id www
uid=1000(www) gid=1000(www) groups=1000(www)
skywalk@ubjail1:~$ id ftpuser
uid=1002(ftpuser) gid=1003(ftpgroup) groups=1003(ftpgroup)

skywalk@ubjail1:~$ id 1001
uid=1001(mysql) gid=1002(mysql) groups=1002(mysql)

用getent group 1000来查看组

复制代码
skywalk@ubjail1:~$ getent group 1000
www:x:1000:
skywalk@ubjail1:~$ getent group 1001
amh:x:1001:
skywalk@ubjail1:~$ getent group 1002
mysql:x:1002:
skywalk@ubjail1:~$ getent group 1003
ftpgroup:x:1003:
skywalk@ubjail1:~$ getent group 1004
skywalk:x:1004:

查看所有用户和组 cat /etc/passwd cat /etc/group

复制代码
# 查看所有用户和组
cat /etc/passwd
cat /etc/group

可以看到组1001被amh占用了,id1001是mysql的,它的组id只好用1002,后面导致大家依次+1 ,都错位了。

amh是一个面板管理软件的账户,我已经把它删除了,但是不知道为什么组id没有删除,结果导致了这样的情况发生。

尝试统一UID/GID

复制代码
# 修改用户的主要组
sudo usermod -g 1001 mysql  # 将mysql用户的主要组改为1001

# 或创建同名组
sudo groupadd mysql
sudo usermod -g mysql mysql

先删除amh这个用户组

复制代码
sudo groupdel amh
[sudo] password for skywalk:

这时候再来getent group 1001看看,发现没有信息了。

尝试修改

复制代码
skywalk@ubjail1:~$ sudo usermod -g mysql mysql
usermod: no changes
skywalk@ubjail1:~$ sudo usermod -g 1001 mysql
usermod: group '1001' does not exist
skywalk@ubjail1:~$ sudo usermod -g mysql 1001
usermod: user '1001' does not exist

没修改成....

问问AI吧:

这样的账户,www:x:1000:1000::/home/www:/sbin/nologin

mysql:x:1001:1002::/home/mysql:/sbin/nologin

ftpuser:x:1002:1003::/home/wwwroot/:/sbin/nologin

skywalk:x:1003:1004:sky,,,:/home/skywalk:/bin/bash

mariadb:x:1004:1006::/home/mariadb:/sbin/nologin 我想把它们改成顺序的,比如mysql 1001 1001 ftpuser 1002 1002 skywalk 1003 1003 ,应该怎么操作?

ai回答

复制代码
# 如果遇到"group already exists"错误,先删除再创建
sudo groupdel mysql
sudo groupadd -g 1001 mysql
sudo usermod -g 1001 mysql

sudo groupdel ftpuser
sudo groupadd -g 1002 ftpuser
sudo usermod -g 1002 ftpuser

sudo groupdel skywalk
sudo groupadd -g 1003 skywalk
sudo usermod -g 1003 skywalk

sudo groupdel mariadb
sudo groupadd -g 1004 mariadb
sudo usermod -g 1004 mariadb

明白了,原来需要先创建,再改

复制代码
sudo groupdel mysql
sudo groupadd -g 1001 mysql
sudo usermod -g 1001 mysql

不行,删除不了:

skywalk@ubjail1:~$ sudo groupdel mysql

groupdel: cannot remove the primary group of user 'mysql'

不过这样也对,系统本来就不应该允许删除组.....

明白了,应该这样操作

先创建新的

然后再修改

复制代码
sudo groupmod -g 1001 mysql

就第一个mysql比较坎坷,后面的就没有再删除、创建,就都ok了 。其实不是,应该就是用groupmod 来修改。

使用groupmod来修改

复制代码
skywalk@ubjail1:~$ sudo groupmod -g 1002 ftpgroup
skywalk@ubjail1:~$ sudo groupmod -g 1003 skywalk
skywalk@ubjail1:~$ id 1002
uid=1002(ftpuser) gid=1002(ftpgroup) groups=1002(ftpgroup)
skywalk@ubjail1:~$ id 1003
uid=1003(skywalk) gid=1003(skywalk) groups=1003(skywalk),999(ollama)

现在看起来就好看多了

复制代码
www:x:1000:1000::/home/www:/sbin/nologin
mysql:x:1001:1001::/home/mysql:/sbin/nologin
ftpuser:x:1002:1002::/home/wwwroot/:/sbin/nologin
skywalk:x:1003:1003:sky,,,:/home/skywalk:/bin/bash
mariadb:x:1004:1004::/home/mariadb:/sbin/nologin

总结

第一次发现Linux里用户id和用户组id不一样,AI说这样没问题。

但是强迫症发作看着不舒服啊,就用sudo groupmod -g 1002 ftpgroup 这样的语句把它们都修改过来。

相关推荐
HIT_Weston2 小时前
72、【Ubuntu】【Hugo】搭建私人博客:Git 下载方式对比
linux·git·ubuntu
百锦再2 小时前
UniApp与UniApp X:跨平台开发的范式革命与全面技术解析
服务器·ai·uni-app·k8s·core·net
gaize12132 小时前
腾讯云和阿里云谁家更合算,性价比更高
服务器
天骄t2 小时前
OSI与TCP/IP:网络协议栈深度解析
linux
无事好时节2 小时前
Linux 进程通信:信号与共享内存详解
linux·网络·网络协议
春日见2 小时前
如何提升手眼标定精度?
linux·运维·开发语言·数码相机·matlab
weixin_462446232 小时前
使用 Ubuntu 构建 code-server Docker 镜像的完整指南
linux·ubuntu·docker
Tipriest_2 小时前
Python 常用特殊变量与关键字详解
linux·python·关键字·特殊变量
zsyy@2 小时前
Maven本地仓库有jar还会向远程仓库下载依赖的问题
java·服务器·maven