第一篇博客 纪念一下!!!

上节课主要学的是用户和组的管理,首先说明一下相关的几个概念

1.Cisco公司开发的所谓AAA认证体系

主要有一下概念

Authentication:认证,核实身份是否正确;

Authorization:授权,对已经核实身份的用户进行资源分配;

Accounting:审计,监管资源被使用的情况;

3A认证体系的第一步是核实用户的身份,只有在用户的身份被核实后,系统才会对其提供服务,认证完的下一步就是对用户进行授权,因为对于一个系统来说,所有的资源和服务有很多,有基础性的,有专业性的,有关键性的,所有对于用户来说进行授权是必不可少的一个环节,什么级别的用户能享有什么等级的权利,这是我们需要解决的问题,解决完这个问题后,我们还需对用户使用资源的情况进行监管,以保证用户不会威胁到资源的安全性,所有的用户必须在系统的监管下去使用资源,一旦发现用户不合理的使用资源,系统将对其进行必要的处理,个人认为这是一套比较完善的体系,基本上可以满足系统对于用户的服务,同时安全性也有一定的保证



下面再说一下多用户,多任务的系统

应用程序就是能够实现资源使用和完成任务的主体,在我的理解来看多用户说的是一个系统不可能只是被一个用户所占用,其必然是能服务多个用户,每个用户根据自己不同的需求,利用系统的某些资源,这些都是不相同的,还有就是多任务,一个用户想要去利用系统完成某个任务,肯定需要应用程序进程的帮助,然后一个进程是远远不够的,必定是多个进程相互协作的结果,以上是我对多任务、多用户系统的理解



还有一个就是叫做安全上下文的东西,首先我们来看一下这么一句话,“进程是以其发起者的身份来运行的:可以理解为,进程的所有者就是发起者;会将发起者的信息标记在进程上”也就是说每一个进程都有其所有者,进程的在系统中的运行是以发起者的身份来运行的,你比方说如果我们的身份是root,想要用touch去建立一个文件,touch就相当于一个进程,我们以root的身份去利用这个进程去创建一个文件,那么问题来了,为什么我们这么强调一个进程的发起者身份,因为当进程试图去访问资源的时候,安全上下文会去比对进程的所有者和资源的有者的关系

首先查看进程的所有者是不是资源的所有者,如果是,就按照属主的权限使用资源,如果不是则判断进程的所有者是否属于资源所属组,如果是,按照属组的权限使用资源;如果不是,则直接使用资源的其他人访问权限来使用资源。这就保证了资源的安全性,不是你这个用户所拥有权限的资源,你就无法去访问,也就不存在去破坏其他用户的资源,这点是很有必要的



再来看一个概念

用户账户:就是计算机操作者在操作系统中的身份映射,在满足了认证条件之后的身份映射

因为我们肉体的人是无法去和计算机去完成交互的,我们得以一个计算机能认识的身份去和计算机进行交互,用户账户就是我们在计算机中的那个身份



用户主要有以下几个分类

超级用户(管理员用户):root

普通用户:

    系统用户:为了保证安全,必须让那些运行在后台的进程或者服务类的进程以非管理员的身份运行,这类用户不需要登录到系统

    登录用户:能够正常使用整个系统资源的用户

  

 在我的理解看来,系统用户是一个系统运行所必不可少的一些进程,只要这个系统想运作,就必须去运行这些进程,然而这些进程并不一定需要登录到系统中去,说实话我还是不明白登录到系统和不登录到系统的区别,这个还得请教一下老师,这个先说到这。




 下面说一下系统是怎么区分这些用户的,这就必须说到标识这一概念


 用户的标识:

用户的登录名称:为操作者准备的简单易记的字符标识;

用户的ID(UID):为计算机系统准备的数字标识;16bit-->32bit

超级用户:0

系统用户:centos5、6:1~499

          centos7:1~999

登录用户:

centos5、6:500~60000

Centos7:1000~60000

60000以上的标识符为用户自定义的标识;


有些同学可能会问,为什么一个用户需要登录名称和ID两个标识,在我看来,用户的登录名是方便我们计算机使用者去使用的,因为在计算机代表一个用户的一串二进制数,不方便人去记忆,也不好理解,同样的计算机也不好理解人的语言,所以便设置了两个标识,这样既方便计算机去识别,也方便用户去记忆,默认的root用户的标识符是0,linux中提供了上线为60000的用户标识符,这个可以满足大部分计算机使用者的需求了


当我们建立了一个用户账户之后,需要解决的就是如何去验证这个账户了,这就是名称解析

名称解析:

名字 <--> ID

解析库:/etc/passwd

系统利用解析库完成认证机制:验证登录用户是否是你声称的那个人

认证库:

用户的认证信息库:/etc/shadow

组的认证信息库:/etc/group


先来说解析库,解析库就是linux系统目录下的一个文件,里面存储的是用户的认证信息,但这样感觉和接下来要讲的用户的认证信息库就有点没有区别了,这个问题暂时无法解决。


先说组的认证信息库吧,其实我还是不是很理解组存在的意义,可能是为了方便管理,这个问题也亟待解决,先把这个概念记住,在/etc/group下可以看到组的认证信息


下面再说一下密码认证机制:

设置密码的一般性策略:

1.尽量使用随机字串作为密码

2.密码的长度一般不要少于8个字符

3.密码中至少包括大写字母、小写字母、数字和标点符号四类字符中的三类

4.不定期更换,每隔一段时间换一个密码


这个感觉没啥可讲的,大家都能理解。


因为密码信息是保存在计算机中的,所以为了防止其他用户去窃取这些密码信息,保存到认证库中得密码信息是经过加密保存的,其中主要是Hash单项加密算法


Hash单项加密算法:抽取原始数据的特征信息,数据指纹

单项加密算法的特征:

1.只要数据相同,其加密结果就必然相同;

2.无论数据多大,其加密结果定长输出;

3.雪崩效应;

4.不可逆;


前两条应该不难理解,主要说一下雪崩效应和不可逆特性

雪崩效应说的是密码当中某些小的不同在经过加密后会使得两者加密之后的结果完全不一样,这在唯一程度上加强了密码的安全性,可逆性就是说的是,经过加密后的密码不会被还原回来,我就纳了闷了,既然不可逆,计算机是怎么匹配的,很神奇。


下面再介绍几种常用的加密算法

1.md5:message digest,消息摘要,128bit定长输出;

2.sha1:Secure Hash Algorithm,安全的hash算法,160bit定长输出;

3.sha224

4.sha256

5.sha384

6.sha512


前面对应的编号就是在linux系统中其对应的编号


为了解决两个用户密码相同该如何识别的问题,linux开发者想到了随机数的概念,就是在加密后的结果中插入任意的随机数,随机数的获取主要有以下两种方法


/dev/random:仅仅是从熵池中返回随机数,如果熵池随机数耗尽,则进程被阻塞

/dev/urandom:先试图从熵池中返回随机数,如果熵池耗尽,则利用伪随机数生成器生成


熵池的概念自己总结的不好所有百度了一下,大概的意思就是把系统环境的噪声数据放到特定的文件中形成熵池


还有一种就是伪随机数,伪随机数其实是计算机自己根据某种算法生成的随机数,在统计样本足够大的情况下,还是有规律可言的,所以叫做伪随机数



最终验证字符串:算法+salt+密码

在认证库中存放的信息:$6$salt$crytped_passwd

这样一个密码的加密后的就形成了,可难为了Linux开发者了。。。



接下来说说用户组的概念:

用户组:将具有某些相同或相似属性的用户联系在一起以便集中授权的容器

貌似关于组的疑问解决了呢。。。方便集中授权,简单粗暴,跟用户的分类一样,组的分类也分为以下几类


管理员组:

普通用户组:

   系统组:

   登陆组:

 这些相关的内容大家可以参照用户的相关概念加以理解


说完了组的概念,同样的系统是怎么识别组的组的呢,跟用户一样,用户组的标识方法也分为组名和组ID


组名:方便操作者使用的;

组的ID(GID):为系统提供组标识;

管理员组:0

系统组:

Centos5、6:1-499

Centos7:1-999

登陆组:

Centos5、6:500-60000

Centos7:1000-60000

解析库:/etc/group


组也需要认证,组也有认证库:/etc/gpasswd


组也需要密码保护:


如果组没有设置密码保护的话,则不能随时加入

这项概念与用户的概念差不多,大家结合着上面自行理解。


下面分别以用户为核心和根据所容纳的用户来对组进行一下简单的分类


以用户为核心来对组进行分类:

用户的主组(基本组):Primary Group,对于用户来讲,这样的组必须要有,且只能有一个。

用户的附加组(附属组,额外组):Addtion Group,这样的组对于用户来说,可以没有,也可以有多个。

打击可以这么理解,对于一个用户来说,他具有的特性肯定不止一个,而且肯定有主要特性和次要特性,就像哲学中所说的主要矛盾和次要矛盾,对于归纳了用户主要特性的组就称之为这个用户的主组,归纳了用户次要的特性的组就叫附加组。


根据组所容纳的用户来分

私有组:组名与用户登陆名相同,并且组中只有此用户

公共组:组中可以包含其他多个不同用户


注意:默认情况下,用户的主要组都是其私有组

其实我很不理解为什么要有私有组这个东西,既然你组存在的意义是方便集中授权,你私有组只有一个组,怎么就方便了,这个问题暂时放下。


说完了用户和组的概念,接下来就该说说用户合租的管理了,涉及命令的内容比较多,可能比较枯燥了。。。


组管理相关的命令:

1.groupadd

2.groupdel

3.groupmod



用户管理相关的命令:

useradd、userdel、usermod

认证管理相关的命令:

passwd、gpasswd、chage

其他的相关管理命令:

chsh、finger、su、id


组管理命令:

1.groupadd:

groupadd:新建组账户,添加组

groupadd [选项] group

-g gid:在创建组账户的时候,指定组账户的GID,如果不使用该选项指定,那么系统会选择在组解析文件中出现的不大于60000的最大GID加1;

注意:如果系统中最大的GID已经是60000了,则系统跳过60000寻找第二个最大的ID加1

-r:创建系统组,意思就是创建一个GID在1-999(1-499)之间的组

关于groupadd命令大家掌握这么多就差不多了


2.groupmod:

修改组的相关属性信息

groupmod [选项] GROUP

-g gid:修改组账户的ID

-n NEW_GROUPNAME:修改组名


3.groupdel:

删除组账户

groupdel [选项] GROUP

注意:如果某个组是某个用户的主要组或私有组,则该组无法被删除(为啥无法被删除?)




用户管理命令:

useradd:添加用户账户

useradd [选项] 登录

选项:

-c,--comment’COMMENT’:在创建用户时,为用户添加注释信息,一般为全名

-d, --homeHOME_DIR:在创建用户的时候为用户指定家目录的绝对路径,被指定的目录应该是事先不存在的目录

-g, --gidGROUPNAME:在创建用户时为用户指定主组

-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:在创建用户时,为用户添加附加组

-k, --skelSKEL_DIR

-m, --create-home:在创建用户时强制性的为用户创建家目录

-M:在创建用户时,不会创建用户的家目录,即使在/etc/login.defs中的CREATE_HOME的值为YES也不创建

-r, --system:创建系统账户

-u, --uidUID:在创建用户的时候为用户指定UID,这个UID可以超出60000的限制

-s, --shell/PATH/TO/SHELL:在创建用户的时候,为用户指定默认shell

-D, --defaults:显示或修改用户默认属性值

    -s, --shell/PATH/TO/SHELL:修改/etc/default/useradd 文件中shell的默认值


Usermod:修改用户账户信息

选项:

-c, --commentCOMMENT:修改用户的注释信息

-g, --gidGROUP:修改用户的主要组

-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:修改用户的附加组为列表中的组

-a, --append:与-G选项用时使用,给用户添加新的附加组

-d, --home/PATH/TO/HOME_DIR:修改用户的家目录

-m, --move-home:与-d选项同时使用,将旧的家目录中的数据移动至新家之中

-l, --loginNEW_LOGIN:修改用户账户的登录名

-s, --shellSHELL:修改用户账户的登录shell

-u, --uidUID:修改用户的UID

-L, --lock:锁定用户的密码

-U, --unlock:解锁用户密码


userdel:删除用户账户

userdel [选项] 登录名

选项:

-r, --remove:删除用户的同时,清除用户的家目录


补充:也不知道老师啥时候讲的

解析库的内容格式

/etc/passwd:

name:password:UID:GID:GECOS:directory:shell

name:登录名

password:密码字段,现在在使用了shadow的机制中,通常使用x作为占位符

UID:用户的ID

GID:此用户主要组的ID

GECOS:comment,表示注释类的信息,现在一般都会用来存放用户的说明信息或全名

Directory:用户的家目录的绝对路径

Shell:用户的默认登陆shell的绝对路径


/etc/group:

group_name:password:GID:user_list

group_name:组名

password:组密码占位符,默认为空

GID:组的ID

user_list:以该组为附加组的用户的列表


/etc/shadow:

login name:encrypted password:date of password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field

login name:用户的登录名

encrypted password:加密了的密码

格式:$算法$salt$真正意义的加密密码

如果该位置为!:则表明用户的密码被禁用

如果该位置为*:则表明该用户为系统用户,不能登录

如果该字段为空:则表明该用户无需输入密码即可登录系统,不推荐使用

Date of password change:

相对时间概念,相对于1970年1月1日到最后一次修改密码的那天的天数

Minimum password age:

在多长时间之内无法修改密码,默认值为0,意即:随时可以修改密码,如果是非0的其他数字,意思是在这么长的天数里不能改密码

Maximum password age:

在多长时间之后密码过期,默认值为99999

Password warning period:

密码过期之前的友善提醒天数,默认值为7天

Password inactivity period:

密码过期过后的宽限期,默认为-1,意思是永久宽限期

Account expiration date:

一个用户账户密码过期的日期,这是一个绝对的过期期限xxxx/xx/xx

Reserved field:

保留字段,以备以后使用


/etc/gpasswd:

Group name:encrypted password:administrators:members



接下来是与用户认证相关的一些命令:

Passwd:设置和查看用户的密码信息

passwd  [-k]  [-l]  [-u  [-f]]  [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username

1.如果省略用户名,意味着更改当前登录用户的密码

2.如果指定用户名,就更改指定用户的密码,只能root使用


选项的使用:

-l, --lock:锁定密码

-u, --unlock:解锁密码

相比较usermod的-L、-U而言,其优先级更高

如果使用usermod -L锁定的用户密码,可以使用passwd -u解锁,但是使用passwd-l锁定的用户密码,不可以使用usermod -U解锁

-d, --delete:删除用户密码:将/etc/shadow文件中第二字段清空

-S, --status:查看用户的密码状态

--stdin:借助于管道将输入数据流当做标准输入信息来送给passwd命令

Echo “password” | passwd --stdin USERNAME


组认证相关命令:

gpasswd:

gpasswd [选项] group

选项:

-a, --adduser:向名为 group 的组中添加用户 user

-d, --deleteuser:从名为 group 的组中移除用户 user


其他命令:

su:Switch user 切换用户身份

 Su USERNAME:部分切换,半切换,切换用户的时候,不会重新读取用户的配置文件,因此,用户并没有登录行为,所以工作环境不初始化

 Su - USERNAME:登录式切换或完全切换,在切换用户的时候,重新读取目标用户的配置文件,并且初始化工作环境,相当于Su -l USERNAME

-c COMMAND:并不会切换用户身份,而是以目标用户的身份执行某命令

使用su命令的时候,从root切换到普通用户时,无需密码,但普通用户进行切换时,必须给出目标用户的密码:

进行用户切换之后,不要连续切换,而是用exit命令返回之前的用户


Newgrp GROUPNAME:临时更改当前登录用户的主要组,使用exit命令返回之前的状态


id:显示真实的和有效的用户和组的ID

真实的ID:在/etc/passwd定义的用户的ID和GID

有效的ID:在当前生效的用户的ID和GID

id [OPTION]... [USER]

-u, --user:只显示用户有效的ID

-g, --group:只显示用户有效的GID

-G, --groups:显示用户所有有效的GID

-n, --name:以名称来代替ID进行显示


此次博客的内容差不多到这就结束了,没想到可以写这么多,本以为最多一个小时就可以写完,没想到用了两个多小时,不过自己梳理了一遍确实通透了一些,虽然是迫于老师的压力写的吧,不过好像有点上瘾呢。。。下星期再见吧!!!!