UID和GID
linux中每个用户都有一个UID和GID,且linux只认UID,用户名只是方便用户记忆而已,用户名和UID的关系有点像域名和ip的关系。
每个用户创建后默认会创建一个与用户名同名的组,并分配一个GID。
用户的UID和GID可以在 /etc/passwd
文件中查看到:

需要注意的是,密码拦全部为 X,这是历史遗留,早期密码确实存在这里,但由于对密码安全性的要求以及密码本身添加了很多属性,所以将实际密码放到了 /etc/shadow
注1:前面说,linux只认UID,也就是说,如果此时你将 /etc/passwd 中某用户的UID改掉时,他仍然可以通过用户名登录到系统(linux只认UID说的是文件,linux是一个以文件为基础的系统),但是他之前所有的文件,仍然是绑定到他之前那个UID上的,所以他无法再访问这些文件了
注2:可以看到,除了我们自己创建的用户外,还有很多其他的用户,这些用户都是系统自己用的,勿动

group的相关信息保存在 etc/group
文件中

所以,要想让某个用户加入一个组,最简单的方法就是直接改 etc/group 这个文件,将该用户名添加到某个组第4列中
用户可以通过 groups 或 id 命令查看自己的组:

另:既然加入了一个组就能操作该组的文件,那么如果加入了多个组,我创建的文件是属于哪个组呢?
组也有默认组的概念,即通过groups命令得到的第一个组就是你创建文件所属的组。可以通过newgrp命令修改默认组
作用
需要注意的是,即使你将某个用户放到 adm 或 root 组下面,他仍然不能执行sudo命令,因为,所谓用户或组,指的只是对文件的 rwx 权限,只能说他现在可以操作 adm 或 root 组的文件,即文件权限符号的中间三个字符:
-rwxr-xr-x // 文件所有者权限,组成员权限,其他人权限
忘记密码?
如果是普通用户忘记密码,可以让root用户通过 passwd 命令直接修改密码而不需要输入原来的密码
如果是root忘记密码,则也有解决办法,前文说到,密码都保存在 /etc/shadow 文件中,此时只需要想办法进入该文件并将密码清空即可。进入该文件的方法有:1)使用linux本身提供的恢复模式等。2)使用类似windows的PE系统的做法,将linux的系统盘挂载到其他系统下进行读取和修改内部文件
ACL
一个文件或文件夹只能设定针对ower、一个group和其他人的权限,假如我有一个文件,我希望有些人/组可以读写,而另一些人/组只能读,那该怎么办呢?
linux提供了一套更为精细化的权限管理系统ACL,它可以针对某文件或文件夹单独对某个用户/组设置权限,用法为:setfacl -m d:u:user_name:rwx file
(其中的 d 指递归权限,即用户进入该目录内部创建的文件或目录也具有该ACL权限)和 getfacl file

sudo
前文说,用户组只是对文件访问权限的控制,而真正要想使用sudo需要专门对 /etc/sudoers
文件进行修改

此时,zh这个用户就能使用sudo权限了
注1:要想使用户具有sudo权限,只需要修改这个文件即可,不需要将用户添加到特定的组
注2:该文件不能直接使用vim编辑,会无法保存,只能通过 visudo
命令进行编辑。输入该命令后会自动使用 vim 打开该文件。
注3:root组前面要加%
注4:上图中 (ALL:ALL) 前一个ALL表示可以切换成任何用户使用,后一个ALL表示可以为任意用户组。什么意思呢?
要知道,用户是可以通过 sudo -u user xxx 来指定使用什么用户执行sudo,由于默认都是root,所以可以省略 -u user 这个参数,故这里的ALL就表示其可以切换为任何其他用户执行sudo
另,也可以使用群组的方式实现用户的sudo,方法大概是:在该文件中假如某个群组的名称,然后任何属于该群组的用户都具有sudo权限了
例如下图中,任何属于 wheel 群组的用户都具有root权限
