########################
####1.用户和用户组理解####
########################
一 基本概念
用户:就是系统"使用者"的身份,比如shell窗口中可以切换用户
文件所有者:狭义的理解为文件的创造者(这个可以改变)------>应用隐私(秘密、情书等)
用户组:用户所属的团体(组)----->抱团取暖(社团、协会等)----->户口本(里面有许多成员)
应用:团队开发时,可以资源共享,组内的成员可以互相修改对方的数据,但是其他组的成员无法修改和查看
其他组:角色扮演(成年男性既是儿子也是父亲也是老师也是丈夫),说深一点(万花丛中过片叶不粘身)
二 户信息涉及到的系统配置文件(很重要,去理解里面的信息!)
(1)/etc/passwd ###用户信息
查看帮助信息: man passwd
字段分析:
用户名:系统中的所以用户(包括系统用户和自定义的用户)
密码标示:x表示有密码,相应的信息转至"/etc/shadow"查看
用户id(uid--->u):id 为0的是超级用户,自定义用户id 从1000之后增加
补充知识点:"?搜索"
用户组id(gid-->g):用户初始组id , 每个用户只能有一个初始组(自成一组)
注释(c):用户的描述信息
家目录(d-->):决定了用户登录之后进入的默认位置
命令解释器(shell-->s):用户登录后{默认}的解释器shell,理解为衣服的牌子(七匹狼、海澜之家等)
需求1:如何查看shell的种类呢?
操作:/etc/shells记录了当前用户能使用的shell的名字
思考1:系统中除了root和student用户之外还有很多其他用户?
说明:这些用户是系统用户,系统运行的后台进程用户(运行必备),不需要进程交互登陆
(2)/etc/shadow ###用户认证信息(主要是密码密文信息--用户密码策略文件)
帮助文档:省略
特点:由若干个字段组成,字段之间用“:”隔开
字段分析:
1. 用户名:该密码对应的用户
2. 用户密码:相关说明
- 如果为空,则对应用户没有密码口令,登录时不需要口令;
- 星号*代表用户帐号被锁定;
- 双叹号!!表示这个密码已经过期了;
$6$
开头的,表明是用SHA-512加密(128位的密码串密文----->root、student);$1$
表明是用MD5加密;$2$
是用Blowfish加密;$5$
是用 SHA-256加密;
3. 修改日期: 最后一次修改密码的时间,linux 下的时间戳表示
解释:表示的是从某个时刻起,到用户最后一次修改口令时的天数,时间起点对不同的系统可能不一样
4. 修改间隔: 两次密码修改之间最少的间隔时间,单位天
解释:两次密码修改的间隔时间,要过多少天才可以更改密码,默认是0,即不限制密码的有效期(随时随地修改)。
解释:既然是密码修改,如果在此期限内则不能修改密码,该密码的最短有效期(过了这个期限密码一旦修改就不能此密码登陆)
5. 密码有效期: 不修改密码的前提下,该密码的有效期,单位为天, 默认99999 可表示永久有效
6. 警告时间(提醒): 系统开始警告用户到用户密码正式失效(包括活跃期)之间的天数(倒计时),登录之后会有提示,单位为天
7. 宽限时间(非活跃期): 密码到期之后的宽限时间,0 表示立即失效,-1 表示永不失效, n 表示几天后失效, 单位为天-->一般7天
8. 账号失效时间(帐号到期日): 到期之后,账号失效,无论密码策略是什么,linux 下的时间戳表示
9. 保留字段
(3)/etc/group ###用户的所有组信息
组织结构:组名称:组密码:组id:附加组成员
组名:
组名是用户组的名称,由字母或数字构成。特点:与/etc/passwd中的登录名一致,组名不应重复。
口令标示:
x表示有密码,密码在/etc/gshadow ---->存放的是用户组加密后的口令字。
组标识号(组id):
组标识号与用户标识号类似,也是一个整数,被系统内部用来标识组,别称GID.
组内用户列表(当前组的用户):
属于这个组的所有用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名
补充:这个用户组可能是用户的主组,也可能是附加组。
(4)/etc/gshadow ###组认证信息
字段分析
1. 组名:保持一致
2. 组密码: SHA 512 加密后的密码串, 不常用,容易有安全漏洞(常为空)---->了解
3. 管理员(组长):组的管理员,管理员有密码之后,就可以对组内的用户进行管理(权限管理)---->有用处
4. 用户列表(小组成员): 组下包含的用户列表
(5)/home/username ###用户家目录
(6)/etc/skel/.* ###用户骨架文件
注意: /etc/skel/ 这个目录中的所有文件或目录在用户新建的过程中会被复制到用户的家目录里,这个目录中默认存在的隐藏文件是用户的默认配置文件
说明:创建用户时候,没有指定相关信息则可以自成一组!
补充:用户就是系统"使用者"的身份,在系统中用户存储为若干窜字符+若干个系统配置文件
##################
####2.用户管理####
##################
1.用户建立(预定义一些信息)
useradd 参数 用户名字
-u ##指定用户uid
-g ##创建用户的同时指定用户初始组信息(gid),这个组必须已经存在--->useradd -g uid 用户名
-G ##指定附加组,这个组必须存在(对应的id)
-c ##用户说明(注释)
-d ##用户家目录(一旦切换登陆进入的目录)
-s ##用户所使用的shell,/etc/shells记录了用户能使用shell的名字
说明:如果不指定相关信息,则自成一组且id是从1000(第一次创建)开始,
2.用户删除
userdel -r 用户名称
说明:-r表示删除用户信息及该用户的系统配置(很重要!!!)
原因:1是占内存,2不知道文件是啥信息(粒度控制不好,不知道文件的作用),3可能会引起系统的紊乱!
3.组的建立(见名知意)
groupadd -g ##建立组
groupdel 组名字 ##删除组
做以上实验的监控命令:
watch -n 1 'tail -n 3 /etc/passwd /etc/group;echo ===;ls -l /home;echo ===;ls -l /mnt'
说明:每秒动态监控/etc/passwd 和/etc/group系统配置文件的后三行信息,并将输入的信息送往标准输出(控制台)!
4.用户id(谁的)信息查看
id 参数 用户
-u ##用户uid
-g ##用户初始组id
-G ##用户所有所在组id(包括其他组--次组)
-n ##显示名称而不是id数字
-a ##显示所有信息(默认--->不指定参数时)
5.用户信息更改(天赋固然重要,但后天努力更重要!)
usermod 参数 用户
-l ##更改用户名称
-u ##更改uid
-g ##更改gid------> usermod -g gid 用户
-G ##更改附加组gid(特点:每次都会覆盖)
-aG ##添加附加组(特点:可以添加多个)
-c ##更改说明(注释)------> usermod -c '注释的内容' 指定用户
-d ##更改家目录
-s ##更改shell
-L ##冻结帐号(或者passwd -l)---->涉及到用户的权限问题
-U ##解锁
说明:passwd -l 冻结强度要比usermod -U 冻结强度高
6. 小结
1. 用户组密码配置文件不常用,设置组密码容易出现安全漏洞
2. 没有设置密码的用户,不能远程登录
3. 锁定用户: 只需在passwd 文件中密码位前添加!即可(疑问???)
4. 每个用户创建的时候,都会创建一个与其同名的用户组,并作为此用户的初始组
5. 查看用户的初始组:passwd查看初始组id, group 中查看组名称
######################
####3.用户权力下放####
######################
说明:普通用户本身没有权限去创建一个用户
需求:在系统中超级用户(权力的掌控者)可以下放普通用户不能执行的操作(rwx)给普通用户->使之成为VIP用户(较普通用户而言)
sudo:superuser do
下放权力配置文件:/etc/sudoers
2.下放权力的方法
首先超级用户(root)必须先执行visudo------>会再进入编辑/etc/sudoers模式;注意:不是直接 vim /etc/sudoers
查看其信息此命令的信息:-rwxr-x---. 1 root root 118152 Jun 28 2016 /usr/sbin/useradd ------>普通用户是没有执行的权限(x)
格式:获得权限用户 主机名称=(获得到的用户身份) 命令
------> :set nu------>:99------>I编辑模式------>test desktop0.example.com=(root) /usr/sbin/useradd
解释:test用户(待执行命令用户)能在主机名为desktop0.example.com的主机上以超级用户身份执行/usr/sbin/useradd这条命令
3.执行下放权限命令
测试:切换到test用户(ctrl+d或者exit)--->sudo(表明是以超级用户的权限去执行相应的命令) 命令(useradd 用户)
说明:会去读取配置文件的信息(验证),如果第一次执行sudo需要输入当前用户密码,以后不需要了!
需求1:用户调用sudo命令的时候不需要自己密码
设置:root用户在/etc/sudoers中设置如下:
test(被赋予权限的用户) desktop0.example.com(在哪台机器上生效)=(root--->赋予权限的用户) NOPASSWD: /usr/sbin/useradd
此时test用户(普通用户)调用sudo命令的时候不需要自己密码
思考:仅仅是赋予一些命令执行的权限吗?
############################
####4.用户认证信息的控制####
############################
chage 参数 用户
-d ##用户密码组后一次修改的时间,如果设定成0,用户登陆系统后必须修改自己的密码(级别最高)---->等效于:passwd -e
-m ##最短有效期(单位是天)
-M ##最长有效期
-W ##警告期
-I ##用户非活跃天数
-E ##帐号到期日格式 -E "YYYY-MM-DD"
测试:chage 参数-{d,m,M,W,I,E} 参数 用户
补充:passwd命令的相关操作!
############################
####5.root密码忘记####
############################
操作步骤:
1.重新启动系统(虚拟机的话双击----真机则开关键)-----注意:如果是
2.在系统启动阶段按上下健(方向)停止系统系统引导
3.选择启动引导标题(下面有提示),按“E(e)”进行编辑
4.光标移动找到linux16引导条目这一行,end跳到行末尾,从这行最后删除到ro选项,并把ro改为"rw空格rd.break"选项
5.ctrl+x启动设定过后的系统引导条目(下面有提示)
6.进入系统后执行chroot /sysroot切换到真实的系统环境------>which whoami(判断当前的用户--->非必须)
7.键入paswd----->提示修改密码----->两次键入密码----passwd root修改超级用户(root)密码
8.建立文件 "touch /.autorelabel"让系统从新扫描所有文件(很重要)
9.exit两次使系统自动重新启动
补充:系统会开始去加载文件,以百分比的形式显示进度,剩下的就是测试了!