已经开始接触Linux用户管理,用户组管理,以及权限管理这几个逼格满满的关键字。这几个关键字对于前端程序猿的我来说真的是很高大上有木有,以前尝试学 Linux 的时候看到这些名词总是下意识的跳过不敢看有木有,一提起这几个名词马上脑海中总是升腾起无限的崇拜有木有!今天就硬着头皮捯饬捯饬这几个概念,希望能有所收获。
1.从 /etc/passwd 说起前面的基本命令学习中,我们介绍了使用 passwd 命令可以修改用户密码。对于操作系统来说,用户名和密码是存放在哪里的呢?我们都知道一个站点的用户名和密码是存放在数据库中,数据库是用来保存记录数据的,我们常用的数据库有 MySQL,Oracle,MongoDB等。其实,我们把 MySQL 等叫做数据库是不严谨的,因为它们只是数据库的管理软件,从广义上来说,任何能保存数据的东东都可以叫做数据库。比如文本。
数据库是用来保存数据的,操作系统中的用户名和密码也理应存放在数据库中,这个数据库是啥呢?在 Linux 下,它是处于 /etc 下的一个叫 passwd 的文件。我们不妨看一下这个文件中的内容。
大多数人看到这种东东一般都会说:什么?你确定这不是天书?这里面能瞅到啥?说实话,除了行号,我一个都不认识!
好了,再仔细看看,找找规律。经过你的仔细观察,你可能会注意到以下几点讯息:
每一行文本都有数个英文格式的冒号(:) ,它们对每一行文本进行了分割
仔细数一数,每行文本的冒号数量都是相同的
再仔细数一数,如果我们把冒号前后的东东叫字段的话,每行文本中的字段数目都是相同的(包括空字段)
首行的 root 和尾行的 charley,不就分别是我们的两个账户吗
于是你大胆的猜测:对的!这就是我们的用户表,这些表也包含一个个字段,这些字段用来存放用户的某些信息!事实上也正是如此,/etc/passwd 保存了用户相关的信息,包括用户名,密码,所属组等等。或许你还会有疑问:明明我们只有两个用户,一个管理员账户 root,一个是普通用户 charley,那其他的东西是什么呢?为什么他们也出现在这个表里面?别急,先从分组形式讲起。
2.一些常见的分组形式下面,我们就对用户,用户组以及上面的一些疑问进行展开讨论。首先介绍一些对用户或者用户组分组的方式,站在不同的角度,可以进行不同的区分。
通过用户类型分组,我们可以把用户分为:
管理员
普通用户
通过用户组类型分组,我们可以把用户组分为:
管理员组
普通用户组
从用户的角度,我们可以把用户组分为:
基本组(默认组)
额外组(附加组)
对于普通用户,我们还可以分为:
系统用户
普通用户
因此,对于普通用户组,我们也可以分为:
系统用户组
普通用户组
上面的分组方式是不是看的你眼花缭乱呢?没关系,其实对用户或者用户组分组,本身就是多解的,只是由于站的角度不同,产生了不同的结果而已。换个角度,我们还可以再来 N 种分组形式,以上只是常规的分法。由于这些分组的形式可以体现在我们创建用户或者用户分组命令选项中,在学习了创建用户和创建用户组的命令之后,自然可以轻松的理解这些概念。
3.理解用户我们知道 /etc/passwd 相当于操作系统保存用户信息的数据库,那么如此可以得出表中每行数据都是代表了一个特定的用户,但是除了系统的 root 用户和我们创建的一个普通用户 charley 之外,还有很多其他的东西,这些东西是什么呢?它们也是用户吗?是的,这些我们不认识的东东,也是用户,只不过不是有我们创建,而是由操作系统创建的,所以叫做系统用户。
某人如果想使用操作系统的某些功能,那么他必须是这个系统上的一个用户(客人用户也是用户)。用户登录操作系统之后,操作系统可以由用户的特征码进行权限的分配,以便使用操作系统的功能。
我们使用计算机,使用操作系统,是为了让他们帮我们完成某些任务,具体下来,是通过调用操作系统上的软件来完成,让软件帮我们做事。操作系统在启动的时候,有一些必要的应用、服务等需要启动,而遵循前面讲到的简单逻辑,启动软件的必须得是操作系统上的用户。按照这个逻辑,Linux 系统为我们创建了一些系统用户,通过它们来在操作系统启动时执行相应的文件。可见系统用户是不需要登录的,也叫非登录用户,请先记住这一点。