为什么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 这样的语句把它们都修改过来。

相关推荐
木白CPP8 分钟前
Linux DMA驱动详解(二)-----DMA的使用者
java·linux·运维
赵民勇41 分钟前
systemd-socket-activate命令详解
linux·运维
Cx330❀1 小时前
【Linux网络】网络层 IP 协议:从网段划分到内核源码解析
大数据·linux·服务器·网络·tcp/ip·性能优化·langchain
企鹅的蚂蚁1 小时前
LubanCat RK3588 实时 Linux 开发(七):YT6801 PCIe 网卡驱动移植与 vermagic 排查
linux·rk3588·linux驱动·yt6801·pcie网卡·vermagic
DYWorker0011 小时前
Linux驱动子系统:DMA子系统 —— Consumer和Provider(006)
linux·驱动开发
byte轻骑兵2 小时前
【BlueZ】 log 模块:日志系统的实现与自定义日志输出配置
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
探索云原生2 小时前
KubeClipper 1.7.0 发布:Operation 优化与 Kubernetes 1.37 支持
linux·docker·云原生·kubernetes·go
一技安身3 小时前
【信创】docker-26.0.2.tgz 原理 + 完整安装
linux·运维·服务器
程曦曦3 小时前
MySQL 生产库误删 98 张表后的时间点恢复实战:从 binlog 解析到资金对账
linux·数据结构·其他·算法·ubuntu·运维开发
郝学胜-神的一滴3 小时前
Effective Python 条款 13:善用星号解包,告别下标切片拆分的坑
服务器·开发语言·数据结构·python·程序人生·pycharm