linux用户和用户组


添加一个用户pikipeter:

              [peter@initroot ~]$ sudo useradd pikipeter
            
更改用户pikipeter的密码:
              [peter@initroot ~]$ sudo passwd pikipeter
              Enter new UNIX password:
              Retype new UNIX password:
              passwd: password updated successfully
            
删除用户pikipeter:
              [peter@initroot ~]$ sudo userdel pikipeter
            
linux是一个多用户多任务操作系统,系统中可以同时有多个用户登录在线,查看系统中所有已登录的用户信息:
              [peter@initroot ~]$ who
              peter tty7 2021-04-03 23:06 (:0)
            
查看当前终端的登录账号:
              [peter@initroot ~]$ whoami
              peter
            

1.用户和用户组概念

回到顶部

Linux是典型的多用户多任务操作系统,在使用linux操作系统之前,需要先通过帐号登录系统。 默认情况下,系统中所有账号信息都记录在/etc/passwd文件中,用户的口令密码记录在/etc/shadow文件中,用户组信息纪录在/etc/group文件内!

用户的账号一方面可以控制用户对系统资源的访问,帮助系统管理员对使用系统的用户进行跟踪; 另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都有唯一的用户名和口令。
不同的用户拥有不同的权限,在linux中,root拥有至高无上的权限。 每个用户都会加入至少一个用户组。一个用户一定会加入一个用户组,称为主用户组,可能会加入多个用户组,称为附属用户组。 在同一个用户组中的用户,都拥有该用户组的相应权限。

2.用户UID和用户组GID

回到顶部

linux内部通过ID号识别用户和用户组。 系统中每个用户和用户组都分别对应唯一的ID,用户ID称为UID(User ID),用户组ID称为GID(Group ID)。
linux用户信息记录在/etc/passwd文件中,用户组信息记录在/etc/group文件中。
除了查看/etc/passwd和/etc/group文件外,我们也可以使用id命令观察用户的UID和GID, id命令可以查询某个用户的UID和GID等信息,常用格式如下:

              [root@study ~]# id [username]
            
如果不加任何参数,id默认显示当前登录用户的id信息,假设当前登录账号为root,用id查看root的ID:
              [root@study ~]# id
              uid=0(root) gid=0(root) groups=0(root)
            
可以看到超级用户root的uid和gid都是0,root也只有一个群组,那就是root组。
用id看看peter的id:
              [root@study ~]# id peter
              uid=1000(peter) gid=1000(peter) groups=1000(peter),0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),112(lpadmin),127(sambashare),999(vboxsf)
            
账号peter的uid和gid都是1000. groups就是peter所加入的所有用户组id,上面我们可以看出peter加入了很多用户组。
如果是系统中不存在的用户,id也会给出用户不存在的提示,可以据此判断系统中是否存在某个账号:
              [root@study ~]# id peterr
              id: ‘peterr’: no such user
            

3.linux文件的拥有者和所属用户组

回到顶部

linux文件的所有者和所属用户组是文件的两个重要属性,在用ls -al显示文件属性的时候, ls会根据文件的所有者ID和所属用户组ID分别从/etc/passwd和/etc/group文件中找到对应的用户名和用户组名并显示出来。 所以在用ls -al查看linux文件属性的时候,我们看到的是文件的拥有者名称和所属用户组名称。 但是在linux内部,linux文件的拥有者和所属用户组属性记录的是拥有者和所属用户组对应的ID。
有时候我们在网络上下载一些文件,文件的拥有者和所属用户组属性显示的是ID号, 因为这个下载的文件的拥有者和所属用户组并不是linux主机中的存在的用户,linux无法找到和ID号对应的用户和用户组, 只能显示ID号码。不过这种情况是极少发生的,因为linux的处理是谁下载的文件这个文件就属于谁。
不过我们依然可以做个小实验验证一下,例如当前的登录账号为peter,peter的ID为1000, 我们通过ls -al /home/peter发现该目录下的文件的拥有者就是peter:

              [root@study ~]# ls -al /home/peter
              drwxr-xr-x  6 peter peter      4096 Feb 23 11:09  .
              drwxr-xr-x 39 peter peter      4096 Feb 23 11:16  ..
              #...省略...
              -rw-r--r--  1 peter peter 101213499 Jul 13  2019  kblog.tar.gz
              drwxr-xr-x  8 peter peter      4096 Oct  6 21:14  linuxsource
              #...省略...
            
切换到root登录,以root身份编辑vim /etc/passwd文件,将peter的ID改成系统中还没有分配的一个号码,例如1010。
              [root@study ~]# vim /etc/passwd
              #...省略...
              #将ID号1000改为1010
              peter:x:1010:1000:peter,,,:/home/peter:/bin/bash
              #...省略...
            
再次观察/home/peter目录中的文件属性,会发现该目录的下所有文件的拥有者变成了1000:
              [root@study ~]# ls -al /home/peter
              drwxr-xr-x  6 1000 peter      4096 Feb 23 11:09  .
              drwxr-xr-x 39 1000 peter      4096 Feb 23 11:16  ..
              #...省略...
              -rw-r--r--  1 1000 peter 101213499 Jul 13  2019  kblog.tar.gz
              drwxr-xr-x  8 1000 peter      4096 Oct  6 21:14  linuxsource
              #...省略...
            
这是因为我们把peter的ID号改成1010后,ls无法找到1000对应的用户名了,只能显示ID号码了。
除非有特殊需求,一般情况下绝不应该编辑/etc/passwd文件的内容。特别是在企业生产环境下,这是非常不安全的操作。 现在将/etc/passwd文件复原:
              [root@study ~]# vim /etc/passwd
              #...省略...
              peter:x:1000:1000:peter,,,:/home/peter:/bin/bash #将ID号改回1000
              #...省略...
            
编辑/etc/passwd文件需要用到root权限,切换到root账号的方法有很多,可能的方法有:
1.先登出系统,再以root身份登录;
2.用ctl+alt+[F1-F6]切换到其他终端,以root身份登录;
3.使用su命令切换到root;
4.在命令的前面加上sudo;
特别要注意的是第四种方法,如果用sudo的话,再次编辑/etc/passwd文件的时候,由于用户ID已经被篡改,导致系统已经无法识别, 所以无法使用root权限了,也无法切换到root账号:
              [peter@study ~]# sudo vim /etc/passwd
              sudo: unknown uid 1000: who are you?
              [peter@study ~]# su
              su: Cannot determine your user name.
              [peter@study ~]# su -
              su: Cannot determine your user name.
            
可以先注销再以root身份登录或者使用ctl+alt+[F1-F6]切换到其他终端,以root身份登录, 然后将/etc/passwd文件恢复原样。
如果没有将/etc/passwd文件恢复原样,那么下次peter再次登录系统时,原本属于peter的文件将不再属于peter。 从而会面临许多权限问题,甚至无法进入自己的家目录!
这将是一个不小的企业生产事故。
在运行的Linux环境下,有很多和账号相关的数据已经被建立,随意修改账号的UID很可能会由于权限问题而导致某些程序无法正常运行,影响整个系统的稳定!
以上的练习只适合在学习环境下操作,切忌不可在企业生产环境下操作。

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读