码迷,mamicode.com
首页 > 其他好文 > 详细

系统用户的类别和管理

时间:2017-03-30 14:13:22      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:计算机   应用程序   上下文   

在使用一个系统的时候,能够实现资源使用和完成任务的主体是应用程序进程,进程是以其发起者的身份运行的,也就是说谁执行的进程谁就是所有者。可以理解为,进程的所有者就是发起者,在运行进程的时候会将发起者的信息标记在进程上。当进程试图去访问资源的时候,安全上下文(secure context)会比对进程的所有者和资源的所有者的关系,首先查看进程的所有者是不是组的所有者,如果是,就按照属主的权限使用资源;而如果不是,则判断进程的所有者是否属于资源所属组,如果是,按照数组的权限使用资源,如果还不是,则直接使用资源的其他人访问权限来使用资源。


以上这些基本遵循Cisco(思科)开发的AAA认证体系:

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

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

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


而用户账户就是计算机操纵者在系统中在满足了认证条件之后的身份映射。用户账户根据权限和功能的不同分为两类,分别是超级用户(管理员:root)和普通用户,普通用户也分为两种,第一种是为了保证安全,必须让那些运行在后台的进程或者服务类进程以非管理员的身份运行的系统用户,这类用户一般不需要登陆到系统就能完成想要的目的;另外一种是登陆用户,这是一个能够正常使用整个系统资源的用户。


为了分辨这些用户就需要用到用户的标识,例如为操作者准备的简单易记的字符串标识的用户的登陆名称,不过登陆名称只是为了方便使用者。在计算机系统内有能够唯一标识用户的ID,称为UID。ROOT用户的ID号为0,在Centos5和Centos6中系统用户的ID号是1~499,登陆用户的ID号是500~60000;在Centos7中系统用户的ID号是1~999,登陆用户的ID号是1000~60000。在60000以上的ID号为用户自定义的标识。在用户使用登陆名称登陆系统的时候系统会对登陆名称使用解析库(/etc/passwd)进行解析(名字 <---> UID)利用解析库完成认证机制,验证登陆用户输入的登陆名称是否存在。在系统确定用户存在之后就会在用户的认证信息库(/etc/shadow)中查找用户的信息,找到这个用户的权限等信息后允许其登陆。


为了安全着想,每个用户都需要密码才能进行登陆,系统采用采用密码认证的机制,而设置密码的一般性策略有:1.尽量使用随机字串作为密码;2.密码的长度不要少于8字符;3.密码中尽量包括大写字母、小写字母、数字和标点符号四类字符中的三类;4.不定期更换,每隔一段时间换一个密码(推荐42天内)。这是为了防止有人对密码进行破解后做一些不好的事情。在Linux中,保存到认证库中的密码信息经过加密保存的,采用hash单向加密算法,抽取原始数据的特征信息,数据指纹。这种单向加密算法的特征有:1.只要数据相同,其加密结果就必然相同;2.无论数据多大,其加密结果定长输出;3.雪崩效应,只要密码中的一个或几个符号改变,那么在加密后的结果会改变巨大,没有丝毫规律可循;4.不可逆,只能由密码得出加密结果,而不能由加密后的结果得到密码,比如:一个人能够使用指纹验证自己,但是不能根据指纹而反推出这个人是谁。要实现这种功能就需要使用到单向加密常用算法。


单向加密常用算法:

(1)md5:message digest(消息摘要):128位的定长输出

加密方式如:echo "123456"| md5sum

(2)sha1:Secure Hash Algorithm(安全的哈希算法):160位的定长输出

加密方式如:echo "123456"| sha1sum

和它的升级版本:

(3)sha224:224位的定长输出

加密方式如:echo "123456"| sha224sum

(4)sha256:256位的定长输出

加密方式如:echo "123456"| sha256sum

(5)sha384:384位的定长输出

加密方式如:echo "123456"| sha384sum

(6)sha512:512位的定长输出

加密方式如:echo "123456"| sha512sum


以上是加密的算法,但是真正保存在计算机中的加密后的密码是原始的密码加上一个随机数(salt)后在经过算法加密的结果。随机数由/dev中的random(仅仅从熵池中返回随机数(比如两次敲击键盘的间隔,保存在熵池中),如果熵池随机数耗尽,则进程被阻塞)、urandom(先试图从熵池中返回随机数,如果熵池耗尽,则利用伪随机数生成器生成随机数(这种随机数因为由软件生成,所以终归有规律可循))两个虚拟设备产生。可以通过认证库/etc/shaddow查看用户密码,在认证库中存放的信息:$6(加密方法)$salt(添加的随机数)$crytped_password(真正密码)。


为了更方便的对用户进行授权等操作,系统引入了用户组的概念,这是一个将具有某些相同或相似属性的用户联系在一起以便集中授权的容器,分类和用户的分类相似,第一个还是管理员组,它的组号是0.其次是在Centos5和Centos6中ID号为1~499,在Centos7中为1~999的系统组;最后是在Centos5和Centos6中ID号为500~60000,在Centos7中ID号为1000~60000的登陆组。组的标识方法也和用户相似,有方便操纵者使用的组名和为系统提供组标识的组的ID(GID)与提供解析的解析库:/etc/group和认证库:/etc/gpasswd。

以用户为核心来对组进行分类(每一个用户都必须在一个组中)

第一个是用户的主要组(基本组primary group):对于用户来说,这样的组必须要有而且只能有一个。

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

根据组所容纳的用户来分,可以分为私有组(组名与用户登陆名相同,并且组中只有此用户,默认情况下,用户的主要组都是其私有组)和公共组(组中可以包含其他多个不同用户)


在上头提到了两个解析库(/etc/passwd、/etc/group)和两个认证库(/etc/shadow、/etc/gshadow),我们可以通过cat来查看内容,通过man(例如man 5 passwd)(man 5 passwd:从man的第五章找passwd(先使用whatis passwd查看提示))查看具体功能。


/etc/passwd

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

name:登录名

password:密码字段(原先可以看到,但不安全,所以现在使用“x”作为占位符(什么都不写表示没有密码),告诉系统有密码,真正的密码放在shadow中)

UID:用户ID号(0代表root)

GID:此用户主要组的ID

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

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

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


/etc/group

group_name:password:GID:user_list

group_name:组名

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

GID:组的ID

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

shaoning:x:1000:shaoning


/etc/shadow(通过man 5 shadow 查看)

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

login name:用户的登陆名

encrypted password:加密了的密码

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

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

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

如果该字段为空,则表明用户可以无需输入密码即可登陆系统

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

minimum password age:

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

maximum password age:在多长时间之后密码过期,默认为99999,意思是永久有效

password warning period:密码过期之前的友善提醒天数,默认为七天

password inactivity period:密码过期之后的宽限期(也能正常登陆,但是已经过期),默认为-1,意思是永久宽限期

account expiration date:

一个用户账户密码过期的日期(一旦到了这一天即使密码还没有过期也不能使用了),这是一个绝对的过期期限

reserved field:保留字段,现在还没有用到


/etc/gpasswd

group name:encrypted password:administrators:members

group name:组名

encrypted password:加密后的密码

administrators:管理员

members:成员


组管理的命令:

groupadd:新建组账户,添加组

-g gid:

在创建组账户的时候,指定组账户的GID。如果不使用该选项指定,系统会选择在组解析文件中出现在的不大于60000最大GID加1(比如使用groupadd 创建一个用户,(查看/etc/group)系统会挑最大组ID加1)

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

groupmod:修改组的相关属性信息

-g gid:修改组账户的ID为gid

-n:修改组名

groupdel:删除组账户

注意:如果某个组是某个用户的主要组或私有组,则该组无法删除,比如当前登陆的用户


用户管理的命令(/etc/passwd、/etc/shadow、group、gshadow查看)

useradd:添加用户账户(系统为我们改了很多东西,具体保存在配置中/etc/default/useradd、/etc/login.defs、/etc/skel这三个文件和目录能够帮助管理员在未指定任何选项时,也能创建用户,并为用户赋予默认的属性)

选项:

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

-d:

在创建用户的时候为用户指定家目录绝对路径,被指定的目录应该是事先不存在的目录,否则这个用户的家就不能正常被创建

-g:在创建用户时为用户指定主组(如果存在就不会创建了,如果不存在则创建)

-G:在创建用户时为用户添加附加组

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

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

-r:创建系统用户

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

-s:在创建用户的时候,指定默认shell,但是必须得写绝对路径

比如 -s /bin/ssh(shell使用shells命令查看)

-D:查看或修改用户的默认属性(查看帮助)

-s:修改/etc/default/useradd文件


usermod:修改用户账户信息

选项:

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

-g:修改用户的主要组

-G:修改用户的附加组为列表中的组

-a:将用户添加到附加组(必须和-G一起用),给用户添加新的附加组

-d:修改用户的家目录

-m如果使用-d不加这个选项则原来的目录下的文件会找不到

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

-l:更改用户账户的登录名

-s:修改用户账户的登陆shell

-u:修改用户的UID

-L:锁定用户密码(lock)

-U:解锁用户密码(unlock)


userdel:删除用户账户

-r:在删除用户的同时清除用户的家目录(没有这个选项只是删除用户不删家)


一些其他的相关命令:

passwd:设置和查看用户的口令(密码)信息(man 1 passwd)

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

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

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


选项:

-l:锁定用户密码(锁定可以通过/etc/passwd中的!查看,!代表锁定)

-u:解锁用户密码

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

如果使用usermod -L锁定的用户密码可以使用passwd -U解锁

而使用passwd -L锁定的用户密码不可以使用usermod -U解锁

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

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

--stdin:没有这个选项的时候一定要从标准输入输入,有了这个选项则可以借助于管道将输入数据流当作标准输入信息送给passwd命令

echo "123456" | passwd --stdin shaoning


gpasswd:

选项:

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

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


su:切换用户身份

su USERNAME

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

su - USERNAME

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

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

使用su命令的时候,从root切换到其他普通用户,无需密码,普通登陆用户进行切换时,必须给出目标用户的密码,否则切换失败

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


newgrp GROUPNAME:临时更改当前登陆用户的主要组,使用exit返回之前的状态

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

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

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

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

-u:只显示用户的有效UID

-G:显示用户所有组的ID

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


系统用户的类别和管理

标签:计算机   应用程序   上下文   

原文地址:http://11142243.blog.51cto.com/11132243/1911646

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!