缘起
在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 这样的语句把它们都修改过来。