在之前的章节中讲述了bash的基础特性以及IO重定向以和管道等其它的功能程序,之后介绍了一些其相关的命令,例如:tr和tee命令等,之后我们介绍了Here document,在这一章中,我们开始讲述用户、组及权限管理中的一部分,我们首先来说用户和组。
一、用户
Linux操作系统是一款多用户Multi-Users
及多任务Multi-tasks
的操作系统,也就是说,可以多个用户同时登录该系统执行各自的任务,彼此用户与用户之间互不干扰,这也是当时为了解决主机资源所提供的一种有效手段,那时候主机都在中心当中,价格也比较昂贵,普通人根本就无法做到像现在一样人手一台,所以为了解决这个问题,就有多用户和多任务这个概念,从Unix主机开始一直到现在各个操作系统,服务器都支持该功能。
那么什么是用户?在Linux中没有什么用户的概念,而是对系统来说,用户是一种隔离资源的手段,比如说张三新建某一个文件让李四删除了,这种事情是绝对不能允许的,反之也是依然如此,除了root这个超级用户。
每个使用者登录系统时都有用户标识和密码,用户标识就是指定该用户的唯一性,而密码就是验证该用户是否为这个用户,验证成功之后,就开始进行授权,分配其相应的资源和权限,最后系统监督该权限,权限的执行结果到底是否符合该条例,那么以上我们就称之为3A认证。
Authentication 认证 Authorization 授权 分配相应的资源 Audition 审计 监督权限,权限的支持结果到底是否符合条例
二、组
组其实就是用户组,也是用户的容器,一个组里面可以有多个用户,同时一个用户也可以属多个组,其主要作用就是对用户的资源进行一个整合,对目录或文件能够有统一的权限。
三、用户类别
用户类别其实通常分为两个大类,一个是管理员用户,另一个是普通的用户,管理毋庸置疑,权限最大,而普通用户虽然权限没有那么大,却也分成了两个小类,一个是系统用户,另一个是登录用户,前者不允许登录,通常是给服务程序设定的用户,程序启动时通过该用户进行启动,所以不允许登录,因为登录的话很有可能该程序就会一系列安全性问题,后者我们可通过手工创建来进行终端登录。
3.1 用户标识
对于用户来说,用户标识是它们检测该用户是否唯一,就像居民身份证一样,你叫张三,他也叫张三,名字都一样,模样也一样,不过系统不会让你创建一个相同类型的用户,那什么不一样?就是身份证号码和指纹不一样,所以说,用户标识我们称之为UserID简称为UID,它是由16位二进制数字组成一共65536个,从0开始,到65535结束,0属于管理员,剩下的1-65535都属于普通用户,那么刚才我们说过,普通用户也分为两类,一个是系统用户,另一个则是登录用户,在系统用户中,CentOS 6分配的ID好从1-499,登录用户则从500一直到60000结束,而CentOS 7不一样,系统用户从1开始到999,普通用户从1000开始到60000结束。
每一个用户都有一个UID与之相对应,当用户输入用户名和密码之后,就会解析成相对应的用户ID号,解析完成之后,将其结果反馈出来。也就是登录成功的结果,它们其实根据名称解析库来进行,其路径在/etc/passwd目录下。
四、组类别
组类别,也成为组标识。称之为GroupID,简称GID,和用户类别一样,也分成两个大类,只不过组类别有很多种,我们现在来慢慢介绍组类别1:组类别1与用户类别几乎相同,分为管理员组和普通用户组,管理员的ID号还是0,普通用户组也是从1开始到65535。也分为两类,一类是系统用户组,在CentOS 6中,分配的组ID号为1-499,从500-60000分配给了登录用户组,而在CentOS 7中,系统用户组的ID号为1-999,而登录用户组的为1000-60000。
每一个组名都会有一个GID与之相对应,将组名(groupname)解析成为组ID(GID),它们这也是根据刚才所说的名称解析库解析才行,而组的解析库的路径为:/etc/group。
以上就是组类别1,我们接下来说一下组类别2,组类别2分为两个组,一个是用户的基本组,另一个是用户的附加组。用户的基本组就是在创建用户的同时把组创建出来,我们也称为用户的初始组,一个组可以没有用户,但是用户不能没有这个组,而用户的附加组就是,可以事先存在,将多个用户附加到这个组里面,同时我们可以用户的话,可以将基本组指定到这个附加组里面去。
最后一个就是组类别3,类别3共分为两类,一类是私有组,一类是公共组,在私有组中,组名同用户是一样的,而且只能包含一个用户,而公共组是组内包含了多个用户。
五、认证信息
当我们登录系统时,必然要输入用户名和密码,如果密码错误会给出提示请输入一遍或者退出,如果输入正确的话会给你提示成功之后进入系统,而密码就是你可以理解为输入用户的认证信息,它是通过比对事先存储信息,与登录时提供的信息要完全一致。而密码的存储的路径为/etc/passwd,不过这是在CentOS 5中这样存储,在CentOS 6和7中将/etc/passwd中的密码映射到了/etc/shadow中。
虽然密码是认证信息的一种,提供了一种有效安全的手段,不过太阳底下没有隐私,长时间不换密码很容易会遭到破解,所以我们要了解密码的使用策略,策略如下:
1、使用随机密码; 2、最短长度不要低于8位数字; 3、应该使用大写字母、小写字母、数字标点符号四类字符中至少三类; 4、定期更换;
5.1 加密算法
在CentOS 7 中我们打开/etc/shadow文件,以:为分隔符,我们可以看到第二个都一段很长的字符,并不规则,那么这些就是将密码通过某个算法进行加密形成之后的结果,我们称之为加密算法,加密算法的主要作用就是隐藏原始的密码字符,防止被人窃取及篡改。那么加密算法的方式有以下几类,分别为:
对称加密:加密和解密使用同一个密码; 非对称加密:加密和解密使用的是一对儿密钥; 产生两个密钥对儿: 公钥:public key 私钥:private key 单向加密:只能加密,不能解密;提取数据特征码; 定长输出: 雪崩效应:原始数据的微笑改变都会引起后期数据结果的巨大变化; 算法: md5:message digest, 128bits sha:secure hash algoithm, 160bits sha224 sha256 sha384 sha512 在计算之时加salt,添加的随机数;
六、/etc/passwd和/etc/shadow文件
我们首先来说一下/etc/passwd,它是用户的信息库,也是用户名和UID相互解析的一个重要文件,各个功能使用冒号分隔,其格式信息如下:
name:password:UID:GID:GEDS:directory:shell
以上就是该/etc/passwd文件的格式,具体的释义如下:
name:用户名 password:可以是加密的密码,也可以是占位符x; UID:用户所属的属主的ID号; GID:用户所属的主组的ID号; GECOS:注释信息; directory:用户的家目录; shell:用户的默认shell,登录时默认shell程序;
还有一个文件为/etc/shadow文件,我们称之为影子文件,任何普通用户都没有权限进行查看该文件,因为它保存这用户的密码和规定的日期,各个功能也是使用冒号来进行分隔,其格式信息如下:
用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时段:过期时段:保留字段
以上也是见名知义,用户名和加密的密码我们都了解,但最近一次的修改密码的时间是从你1970年到现在所经过的天数,当然这也是最初的密码没有更改,
最短使用期限是上次改的密码最近中间经过的天数。
最长使用期限也是上次改密码多经过的天数。
警告时间是最长使用期限倒回去之前所经过的天数。
非活动期限为密码已经过了最大天数之后还能保留几天,如果还不改的话,就被禁用(过期时段)。
那么修改的密码就是最长时间减去最短使用期间的天数,在密码快到期之前进行警告,如果过了最长时间,会给你宽限期,密码处于非活动时间,不过可以更改,如果过了宽限期,或者不改密码的话,就会禁用。
那么警告和非活动的差别分别是:警告就是提示你,但是能用;而非活动就是必须改密码,这期间该用户不能进行登录。
七、/etc/group文件
/etc/group文件是用户组的信息库,用来解析该用户属于那个组,也是用冒号分隔,示例如下:
group_name:password:GID:user_list
以上前三个也是可以见名知义的,但user_list其实也是很简单,它是以此组为附加组的用户的用户列表。
好的,那就是以上介绍的用户和组的概念以及它的相关文件,在之后的章节中我们来讲述用户的组的相关命令,例如:
useradd, userdel, usermod, passwd, groupadd, groupdel, groupmod, gpasswd, chage, chsh, id, su