RSS订阅 | 匿名投稿
您的位置:网站首页 > 相关知识 > 正文

Linux基础知识之用户和用户组以及 Linux 权限管理

作者:habao 来源: 日期:2017/3/4 18:36:43 人气: 标签:linux基本知识

  已经开始接触Linux用户管理,用户组管理,以及权限管理这几个逼格满满的关键字。这几个关键字对于前端程序猿的我来说真的是很高大上有木有,以前尝试学Linux的时候看到这些名词总是下意识的跳过不敢看有木有,一提起这几个名词马上脑海中总是升腾起无限的崇拜有木有!今天就硬着头皮捯饬捯饬这几个概念,希望能有所收获。

  前面的基本命令学习中,我们介绍了使用passwd命令可以修改用户密码。对于操作系统来说,用户名和密码是存放在哪里的呢?我们都知道一个站点的用户名和密码是存放在数据库中,数据库是用来保存记录数据的,我们常用的数据库有MySQL,Oracle,MongoDB等。其实,我们把MySQL等叫做数据库是不严谨的,因为它们只是数据库的管理软件,从广义上来说,任何能保存数据的东东都可以叫做数据库。比如文本。

  数据库是用来保存数据的,操作系统中的用户名和密码也理应存放在数据库中,这个数据库是啥呢?在Linux下,它是处于/etc下的一个叫passwd的文件。我们不妨看一下这个文件中的内容。

  于是你大胆的猜测:对的!这就是我们的用户表,这些表也包含一个个字段,这些字段用来存放用户的某些信息!事实上也正是如此,/etc/passwd保存了用户相关的信息,包括用户名,密码,所属组等等。或许你还会有疑问:明明我们只有两个用户,一个管理员账户root,一个是普通用户charley,那其他的东西是什么呢?为什么他们也出现在这个表里面?别急,先从分组形式讲起。

  上面的分组方式是不是看的你眼花缭乱呢?没关系,其实对用户或者用户组分组,本身就是多解的,只是由于站的角度不同,产生了不同的结果而已。换个角度,我们还可以再来N种分组形式,以上只是常规的分法。由于这些分组的形式可以体现在我们创建用户或者用户分组命令选项中,在学习了创建用户和创建用户组的命令之后,自然可以轻松的理解这些概念。

  我们知道/etc/passwd相当于操作系统保存用户信息的数据库,那么如此可以得出表中每行数据都是代表了一个特定的用户,但是除了系统的root用户和我们创建的一个普通用户charley之外,还有很多其他的东西,这些东西是什么呢?它们也是用户吗?是的,这些我们不认识的东东,也是用户,只不过不是有我们创建,而是由操作系统创建的,所以叫做系统用户。

  某人如果想使用操作系统的某些功能,那么他必须是这个系统上的一个用户(客人用户也是用户)。用户登录操作系统之后,操作系统可以由用户的特征码进行权限的分配,以便使用操作系统的功能。

  我们使用计算机,使用操作系统,是为了让他们帮我们完成某些任务,具体下来,是通过调用操作系统上的软件来完成,让软件帮我们做事。操作系统在启动的时候,有一些必要的应用、服务等需要启动,而遵循前面讲到的简单逻辑,启动软件的必须得是操作系统上的用户。按照这个逻辑,Linux系统为我们创建了一些系统用户,通过它们来在操作系统启动时执行相应的文件。可见系统用户是不需要登录的,也叫非登录用户,请先记住这一点。

  上面讲到了用户特征码,操作系统时通过用户特征码来识别用户的。对于淫类,我们识别用户是通过用户名,因为用户名(字符串)好记。而计算机觉得数字更好记一些,于是在创建用户时系统会为其分配一个唯一的特征码,用以识别该用户,这个特征码也叫UID。同样的,用户组也有特征码,叫做GID。

  Linux系统中,UID以如下的方式划分:

  密码占位符,其值是x,显然这不是真正的密码。真正的密码保存在哪里呢?在/etc/shadow文件中,此文件中保存的也不是明文密码,而是经过加密处理之后的密码。我们来看一下/etc/shadow中的内容(rootonly):

  对于/etc/shadow中每个字段的含义,手册中都给出了说明,我们可以去参考(这里只给出了一部分截图)。同理,对于/etc/passwd,我们也可以通过man5passwd查看每一个字段表示的含义。

  好了,回到PASSWORD字段,我们看一下root用户和charley的此项字段值,可以看到此值中有一些规律可循:

  单向加密(散列加密):只能加密不能解密。也就是说只能由明文取得密文,而不能由密文取得明文。经过单向加密得到的是一份唯一的特征码,每个数据的特征码是独一无二的,因此也叫作指纹加密。如果两次算法取得的特征码一样,那么就是同��份数据。单向加密可以用来做数据校验,如果数据被动了手脚,那么数据的特征码就不一样。常用的散列加密方式有:

  加盐:如果两个用户使用了同样的密码,那么经过MD5散列加密后的特征码就是一致的,如果一个用户偶然发现另一个用户的特征码和他自己是一样的,那么就可以推断另一个用户的密码。这是不太安全的。为了安全起见,我们需要用到散列加密特点中的雪崩效应,往密码中额外加点杂质(内容),这样加密后的特征码就千差万别了。这个过程就是所谓的加盐。

  说了那么多,终于来点真格的了,Linux中使用useradd命令添加一个用户。这个命令很简单,简单到只使用useraddUSERNAME就可以添加一个用户。

  我们新建一个用户MIKE,然后查看/etc/passwd中的对应内容:

  为什么需要给组添加密码呢?不妨先说一下用户的基本组,好像到现在我们还没有讲基本组的情况吧,嘿嘿。基本组很简单,Linux规定每个用户都需要在某一个组中,因此在创建用户的时候,我们可以指定用户的基本组(默认组):useradd-gGROUPNAMEUSERNAME。如果我们不手动指定用户的基本组,系统会默认创建一个和当前用户名一致的组,然后将这个组设置为用户的基本组。基本组的GID默认和用户UID一致(如果不被占用的话)。

  为啥用户必须要有一个组呢?因为Linux规定,一个文件的需要具备三种权限:文件所属主的权限,文件所属主所在组的权限,以及其他用户的权限。因此文件的所属主要是没有基本组的话,那是不是非常尴尬呢。这个问题先说到这里。

  回头看一下gpasswd的作用,一般情况下我们是不需要为组设置密码的。现在提一个需求:在执行某项操作的时候,要使用到其他组的权限,就需要临时切换到其他组,又不想改变现有组,那么就需要使用newgrp命令,newgrp命令就是用来临时切换用户基本组,注意此操作只对当前登录有效。在使用newgrp的时候,可能需要我们输入组密码。为什么是可能呢?因为在将额外组临时设置为用户的基本组时,是不需要密码的。只有将此前和用户毫不相关的组临时设置为基本组才会需要密码。如需还原基本组:exit或者logout。

  本文主要介绍了Linux的用户管理和用户组管理,并介绍了/etc/passwd和/etc/shadow这两个和用户有关的文件。和用户组有关的文件位于/etc/group和/etc/gshadow中。此外介绍了常见的加密形式:对称加密,公钥加密和散列加密。关于用户和用户组就介绍到这里,在此基础上我们将在下篇文章中介绍Linux的权限管理,和本文属于同一个系列。

  更多详情见请继续阅读下一页的精彩内容:

  Linux公社简介-广告服务-网站地图-帮助信息-联系我们

  本站(LinuxIDC)所刊载文章不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。

推荐:

读完这篇文章后,您心情如何?
0
0
0
0
0
0
0
0
本文网址: