思考:多个用户可以使用同一个UID吗?
说到这个议题,相信很多初学甚至些许老手了,都在思考的问题;
我们知道,我们可以通过修改用户的uid为“0”,从而使其成为超级管理用户;
那么其他用户呢,是不是也可以修改其UID,从而是多个用户共用同一个UID呢?
我们知道,UID作为计算机识别用户的标识,就像身份证每个都是唯一的,但是姓名确实可以重复的;
但是在linux系统中用户名是唯一的,uid是唯一的却是可供给多个用户共用的;我们先来看一下下面的几个命令:
[root@Moni ~]# useradd oxblog1 [root@Moni ~]# useradd oxblog2
!--可以看到我创建了两个用户--!
[root@Moni ~]# tail -n 2 /etc/passwd oxblog1:x:501:501::/home/oxblog1:/bin/bash oxblot2:x:502:502::/home/oxblog2:/bin/bash
!--两个用户的uid分别是501和502,gid也是501和502--!
[root@Moni ~]# tail -n 2 /etc/group oxblog1:x:501: oxblog2:x:502:
!--创建用户时,默认自动创建与之用户对应的用户组--!
[root@Moni ~]# usermod -u 501 oxblog2 usermod: UID '501' already exists
!--看我像通过命令直接修改用户oxblog的组id为501,显然是不行的--!
[root@Moni ~]# useradd oxblog2 useradd: user 'oxblog2' already exists
!--我又执行了一次创建oxblog,显然用户名也是唯一的--!
[root@Moni ~]# id oxblog2 uid=502(oxblog2) gid=502(oxblog2) 组=502(oxblog2) [root@Moni ~]# sed -i '$coxblog2:x:501:502::/home/oxblog2:/bin/bash' /etc/passwd [root@Moni ~]# id oxblog2 uid=501(oxblog1) gid=502(oxblog2) 组=501(oxblog1)
!--看到没有,我通过/etc/passwod文件修改了用户oxblog2的uid,但你会发现--!
虽然oxblog2的uid修改为了501,但是括弧里面却显示了oxblog1,而其用户对应的gid依然是502(oxblog2)因为我们并没有修改gid,但是后面的组已经是501oxblog1了;我们在继续看!
[root@Moni ~]# su - oxblog1 [oxblog1@Moni ~]$ exit logout [root@Moni ~]# su - oxblog2 su: 警告:无法切换到目录/home/oxblog2: 权限不够 -bash: /home/oxblog2/.bash_profile: 权限不够 -bash-4.1$
!--我们切换oxblog1用户正常的,但是当我们切换到oxblog2用户却报错了,这是因为我们没有足够的权限访问宿主目录--!
[root@Moni ~]# ls -ld /home/oxblog2 drwx------ 4 502 oxblog2 4096 5月 23 19:37 /home/oxblog2 [root@Moni ~]# chown -R oxblog2 /home/oxblog2 [root@Moni ~]# su - oxblog2 [oxblog1@Moni ~]$
!--是的,很显然这里用户系统依然识别到的是uid502,然后我们重新修改属主,便可以正常切换用户咯--!
因此我们可以得出结论:
linux系统uid是唯一的但可以供多个用户使用,gid其实同理也是可以的;
我们无法通过命令来创建已存在的用户名,无法通过命令修改用户uid为已被关联到其他用户的uid;
我们通过修改password文件修改uid,但是其用户之前被赋予的目录文件权限其实并没有修改,这里是说除了宿主目录,也包括其他曾经赋予了权限的目录;
最终,如果用户已经使用许久,擅自修改uid,会造成文档目录权限混乱哦!
当然如果修改的uid是没有使用的,自然是没有问题的!
那么问题又来了,既然普通用户,会有这样的问题,那么root用户的uid“0”,和系统用户呢?
如果根用户和系统用户也是这样,那岂不是没人敢这么做了?
事实上,linux的超级用户uid“0”是特殊的存在,并不受限制,而系统用户和普通用户是一样的哦!
[root@Moni ~]# sed -i '$coxblog2:x:0:0::/home/oxblog2:/bin/bash' /etc/passwd [root@Moni ~]# ls -ld /home/oxblog2 drwx------ 4 501 oxblog2 4096 5月 23 19:46 /home/oxblog2 [root@Moni ~]# su - oxblog2 [root@Moni ~]#exit [root@Moni ~]# sed -i '$coxblog2:x:502:502::/home/oxblog2:/bin/bash' /etc/passwd [root@Moni ~]# ls -ld /home/oxblog2 drwx------ 4 oxblog2 oxblog2 4096 5月 23 19:57 /home/oxblog2
到这里,你知道这其中的叉叉道道了吧,当然没事就别折腾了!
(今天就到这里了,有疑问的地方欢迎大家留言哦。)
看了本篇文章的还道友还要看:linux系统命令和shell