因为linux系统是一个多用户多任务的操作系统,管理好用户才能保证系统有条不紊的工作
用户是linux系统最底层的安全设备,属于权限问题,系统要回收权力
系统用户即系统的使用者,用户管理是对文件进行管理,用户的存在是为了回收权力
用户组是用户的延伸,可以得到身份,共享用户的权力
相当于我是我自己,但我还属于我的家,我和家人就组成了初始用户组
在学校,我属于自己班级的一员,我和班里的同学组成了附加用户组
组的存在是为了共享权力,组和用户是两个不同的机制
组的分类:
初始组 | 用户刚建立时就加入的组 |
---|---|
附加组 | 用户后期加入的组 |
声明:为了防止真机被搞坏,关于用户管理这一部分操作我将在desktop这台虚拟机里面做
步骤:在真机的shell里面输入命令打开desktop虚拟机
(1)查看当前正在使用的用户:
whoami 查看当前用户
(2)查看系统中用户的信息:
id | 查看正在使用的用户的所有id信息 |
---|---|
id -u | 查看用户的uid |
id -g | 查看用户的gid |
id -G | 查看用户所在的所有组的id |
id -n | 显示名字而不显示id数字 |
id 查看正在使用的用户的所有id信息
id -u ##查看用户的uid(用户自己的身份证号)
id -g ##查看用户的gid(用户所属初始组的身份证号)
id -G ##查看用户所在的所有组的id(用户所属附加组的身份证号)
id -n ##显示用户的名字而不显示id数字
(3)切换用户:
gnome–session–quit–force ##注销当前用户,用其他用户登陆
su - 用户名称(前提是该用户在系统当中已经存在,若不存在需要现在超级用户模式下新建立用户)
su - 中 “-” 标示在用户身份切换时同时切换当前用户的环境
(否则环境不改变)
注意:
su - 中 “-” 标示在用户身份切换时同时切换当前用户的环境
su - 执行时高级用户切换到低级用户不需要密码,低级用户切换到高级需要,平级用户切换切换也需要
每次su切换到其他用户操作之后必须退出,然后再次切换到其他用户,否则会造成用户紊乱
其实用户也是文件,对用户的管理就是对文件的管理
用户其实就是以文件的方式存储的,和文件一样
默认shell的指定有哪些可以查看系统中/etc/shells文件
(1)用户信息文件: /etc/passwd
说明:用户信息文件里面存储了用户的一些基本信息
包括的内容:用户名称:用户密码:uid:gid:说明:家目录:默认shell
用户名称 | 用户自己的名字 |
---|---|
用户密码 | 用户自己的密码 |
uid | 用户自己的身份证号 |
gid | 用户所属组的身份证号 |
说明 | 默认shell的指定有哪些,可以查看系统中的/etc/shells |
家目录 | 该文件一开始在的目录 |
默认shell | 和系统的聊天软件类型 |
(2)用户组信息文件: /etc/group
说明:用户组信息文件里面存储了用户所属组(用户组)的一些基本信息
包括的内容:组的名字:组的密码:组的id:组的成员
组的名字 | 这个组的称谓 |
---|---|
组的密码 | 这个组的密码 |
组的id | 这个组的身份证号 |
组的成员 | 该组里面包括了哪些用户 |
(3)认证信息文件: /etc/shadows
说明:认证信息文件里面包括了一些认证信息,比如每个用户登陆时的密码
包括的内容:用户名称:密码(sha512非对称加密)
(4)默认开启shell的配置,用户的骨文件:/etc/skel/.*
说明:骨文件里面存储了默认用户和系统对话工具的相关信息
(5)用户的家目录: /home/username
注意:家目录指的是该用户建立的所属目录
用户其实就是文件的内容以及文件内容所指定的那些文件
uid相当于用户的身份证号 ,真正区别用户的不是名字,而是uid
用户说明和用户名字不一样
组用户为附加用户 ,并不是原有用户
初始组和附加组不一样
目录名称 | 目录说明 | 目录下的内容格式 | 解释说明 |
---|---|---|---|
/etc/passwd | 用户信息文件 | 用户名称:密码:uid:gid:说明:家目录:默认shell | 默认shell的指定有那些可以查看系统中/etc/shells文件,在此文件中,有nologin不可与系统进行交流对话,即不含有交互界面 |
/etc/group | 用户组信息文件 | 组的名字:组密码:组id:组成员 | 无 |
/etc/shadows | 认证信息文件 | 无 | 无 |
/etc/skel/.* | 默认开启shell的配置,用户的骨文件 | 无 | 无 |
/home/username | 用户的家目 | 无 | 无 |
groupadd 用户组名字 | 建立用户组 |
---|---|
groupadd -g 6666 用户组名字 | 建立用户组并指定用户组的id |
groupdel 用户组名字 | 删除用户组 |
(1)动态监控每一个命令作用后的状态采用watch命令
实时监控的命令 ### watch -n 监控间隔时间;ctl+c退出
比如:watch -n 1 "tail -n 3 /etc/passwd /etc/group ; ls -l /home/"
首先打开一个shell,监控自己建立文件的过程
输入监控命令 watch 由里到外输入命令,不易出现错误
用户信息监控命令
watch -n 1 “tail -n 3 /etc/passwd /etc/group ; ls -l /home “
注意:ctrl+c可以退出,watch -n 1 表示每秒更新一次。
(2)用户组的建立:groupadd
groupadd 用户组名
(2)用户组的删除:groupdel
groupdel 用户组名
(3)groupadd -g uid 用户组名字 ###建立用户组并指定用户组的id
当建立一个用户组的时候,若显示已经存在,则直接删除再建立(这就是为什么每次实验前需要清空实验环境);
在建立一个用户组的同时它的gid会被同时给定,具体的范围可以查看一个文件预先知道;
如果想要自己指定uid,则先删除刚才建立的用户组,在建立的同时指定uid ### groupadd -g uid 用户组名字;
建立用户组的同时也会建立它的家目录,同样删除用户组的同时也会删除它的家目录(这一点与用户的管理不一样);
用户组不能重复建立,一定要先删除才可以建立;
在建立用户之前,可以查看/etc/login.defs这个文件,查看所有内容的规则(id范围等等),但是这些建立用户的时候都可以指定修改;
建立用户组 组的管理 不能重复
组的建立与删除整体注意事项:
首先打开一个shell设置监控信息 ,当watch监控 多个命令时,多个命令之间用分号隔开 并且要加双引号
再打开一个shell设置用户组的信息groupadd groupdel
如果要改用户组的uid 必须用 groupadd -g uid 用户组名
因为用户组不能重复建立 必须删除才能重新建立,在重新建立的同时直接给用户组的uid即可
在虚拟机做实验时必须先reset虚拟机 ,否则有的用户组已经建立(影响实验效果) 每次都保证有一个干净的实验环境
根下/root(超级用户) 根下/home(普通用户)
useradd 用户名 | 建立用户时,读取/etc/login.defs 文件内容确定规则 |
---|---|
useradd -u 6666 用户名 | 建立用户的同时指定用户uid |
useradd -g 21 用户名 | 指定用户初始组id,“21用户组必须是存在的” |
useradd -G 21 用户名 | 指定用户的附加组id “21用户组必须存在” |
useradd -c “xxxxx” 用户名 | 指定用户的说明 |
useradd -d /home/lee 用户名 | 指定用户的家目录 |
useradd -s /bin/sh 用户名 | 指定用户的默认shell |
(1)用户的建立:useradd
useradd 用户名 ###建立用户的同时会建立它的配置文件(包括用户的组信息和用户的家目录信息)
userdel 用户名 ###删除用户但不删除用户的配置文件
userdel -r 用户名 ###删除用户的同时还会删除用户的配置文件
注意:一个用户的id 包括:uid(用户自己的id) gid(用户所属初始组的id) group(所有组)
(3)useradd -u uid 用户名 ###指定用户的id
(4)useradd -g gid 用户名 ###指定用户的初始组id(用户组gid必须是存在的)
(5)useradd -G id 用户名 ###指定用户附加组的id(用户组id必须是存在的)
(6)useradd -c “hello” 用户名 ###指定用户的说明
(7)useradd -d /home/lee 用户名 ###指定用户的家目录
(8)useradd -s /bin/sh 用户名 ###指定用户的默认shell
当建立一个用户的时候,若显示已经存在,则直接删除再建立(这就是为什么每次实验前需要清空实验环境);
删除一个用户的时候必须 -r ,否则它的配置文件还存在,就不能重新建立;
用户也不能重复建立,一定要先删除再建立;
当只剩下家目录的时侯,家目录是一个文件,用rm 删除家目录文件即可
建立用户的同时会建立他的组信息,家目录信息;
用户建立的数据可以设定 ,g为初始组 ,G为附加组 ;
除了密码不能指定外,其他用户信息建立时均可以指定;
默认shell(和系统对话采用的软件,系统有的shell才可以指定 ),说明(登陆)
每次改一个参数都要先删除一下 ,试一个删一个 弄清楚每一个参数的作用;
指定shell的作用: 让用户和系统 使用同一个聊天软件;
指定说明的作用:登陆系统时显示的用户说明;
总结:以上改用户组和用户的信息都需要先删除,在新建立的同时指定信息
注意:以下为不用再新建用户,直接在已有的用户基础上修改用户的信息
usermod -l 新名称 用户名 | 更改用户的名称 |
---|---|
usermod -u uid 用户名 | 更改用户uid |
usermod -g gid 用户名 | 更改用户的初始组 |
usermod -G gid 用户名 | 更改用户的附加组,可以接组名,也可以接id |
usermod -aG id 用户名 | 添加用户的附加组 |
usermod -G “” 用户名 | 删除用户所有附加组的身份 |
usermod -c “XXX” 用户名 | 指定用户说明文字 |
usermod -d /home/lee 用户名 | 更改用户家目录的指向 |
usermod -md /home/lee 用户名 | 更改用户家目录 |
usermod -s /bin/sh 用户名 | 更改用户的shell |
(1)usermod -l 新名称 用户名 ###更改用户的名称
(2)usermod -u uid 用户名 ###更改用户的uid
(3)usermod -g gid 用户名 ###更改用户的初始组(gid必须是存在的)
(4)usermod -G id 用户名 ###更改用户的附加组
(5)usermod -aG id 用户名 ###添加用户的附加组
注意:使用-G时,如果已有附加组,则会代替;如果不想代替,想让两个都存在的话,使用-aG
(6)usermod -G “” 用户名 ##删除用户所有附加组的身份
(7)usermod -c “XXX” 用户名 指定用户说明文字
(8)usermod -d / / 用户名 ###只改变家目录的指向
(其实就是相当于改变家庭地址)家目录指向,只是存放东西的一个路径,实际不改变文件的内容
(9)usermod -md / / 用户名 ###同时改变家目录的指向和家目录的名字
(10)usermod -s /bin/sh 用户名 更改用户的shell
“”将动词变名词 指定说明时加“”和不加“”的区别
加“”是一个名词,该动作不执行
不加“”是一个动词,该动作要执行
附加组的作用:加到一个组才有资格,有权利。加入附加组是为了共享权力 ,与初始组不一样
家目录指向:改变了文件内容 ,对系统来说找东西要改路径 ,对用户来说不用走新的路径
怎样查看所有的shell类型 ( 用cat一个文件查看 cat /etc/shells ) ### cat /etc/shells
怎样查看一个文件的三个时间戳 ( 用stat )
家目录指向其实就像一个路径
uid为用户自己的id gid为用户的初始组id groups为用户的所有组的信息
什么是家目录 :用户的家目录 , 建立用户的时候直接指向了它在哪里(默认的位置)
更改家目录指向 -d 更改家目录指向及其名字 -md
清屏 ctrl+l或者clear
注意:
做这个实验的时候也要监控 watch -n 1 tail -n 3 /etc/shadow
/etc/shadow这个文件是记录用户的认证信息
例如:westos:!!:17895:0:99999:7: : : ###一共有9项内容(此文件一共有9列)
[1] [2] [3] [4] [5] [6][7] [8] [9]
第一列 | 用户名称 |
---|---|
第二列 | 用户密码的加密字符串,默认用的加密方式为sha512对称加密,如果加密字符串前出现“!”,则该用户的帐号被冻结 |
第三列 | 用户密码最后一次被修改的时间,此时间的计算是从1970-1-1日起累计的总时间天数 |
第四列 | 用户密码最短有效期限(用户在这个数字天数之内不能修改密码)如果此位有设定数字,那么在此数字范围内的天数内是不能更改用户的密码的 |
第五列 | 用户密码最长有效期限,用户必须在此有效期内更新密码,如果超时会被冻结 |
第六列 | 密码警告期限,在过期前指定天数内会发送警告信息给用户 |
第七列 | 用户的非活跃天数(加的期限),此位默认为空,如果设定数值,那么在密码最长有效期过后仍然可以使用的天数 |
第八列 | 用户到期日,默认为空,表示帐号一定会被冻结的时间点,此时间计算是从1970-1-1开始计算的累计天数 |
第九列 | 用户自定义列,目前没有启用 |
有9项 弄清楚每一项的含义
(1)passwd -S 用户名 ###查看用户密码信息
(2)用户密码的相关操作:
passwd 用户名 | 更改用户的密码 |
---|---|
passwd -l 用户名 | 在用户密码前加入“!!” |
passwd -u 用户名 | 解开已经上锁的用户 |
usermod -L 用户名 | 在用户密码前加入“!” |
usermod -U 用户名 | 在密码不为空的时候使用 |
passwd -d 用户名 | 清空用户的密码 |
监控watch -n 1 “tail -n 3 /etc/shadow”
普通用户改密码时
1.必须知道当前用户原始密码
2.密码不能和帐号名称相似
3.密码不能是纯数字或纯字母
4.密码不能是有序的字母和数字的组合
passwd -l 用户名 ###在用户密码前加入“!!”
passwd -u 用户名 ###解开已经上锁的用户
usermod -L 用户名 ###在用户密码前加入“!”
usermod -U 用户名 ###在密码不为空的时候使用
passwd -d 用户名 ###清空用户的密码
密码在/etc/shadow这个文件当中 只有超级用户可以操作
!!表示被封锁 改账户不能登陆
passwd比usermod强度更强
usermod -L 用户名 | 冻结用户 |
---|---|
usermod -U 用户名 | 解锁用户 |
(1)用户密码最后一次被更改的时间:
passwd -e 用户名 ##会改变用户最后一次更改密码时间为0,用户在登陆时会被强制更改密码
chage -d 0 用户名 ##两个命令功能类似
passwd -n 1 用户名 ###用户在一天之内不能修改密码
chage -m 1 用户名 ###两个命令的效果一样
passwd -x 30 用户名 ###设定用户在30天之内必须修改密码
chage -M 40 用户名
passwd -w 2 用户名 ###密码过期前两天有警告输出
chage -W 2 用户名
(5)用户非活跃天数:
passwd -i 1 用户名 ###密码过期后仍可登陆系统的天数
chage -I 1 用户名
chage -E 2019-6-6 用户名 ###用户在这一天会被冻结 注意:此时间是从1970-1-1开始计算的累计天数|
==用户的密码一共包括9个部分 要会对每一部分进行修改 ==
(7)用户自定义列,目前没有启用
设置密码: passwd -s
第一次要强制改密码 -e 更改默认使用天数
一个系统上面有很多个用户,功能开的越多系统性能越不好
用户管理命令只有超级用户才可以
一般普通用户不能新建用户
怎样用 普通用户 新建 普通用户?
不能把一个用户的id为o
将超级用户权力下放(在一个文件里面)
(1)什么叫用户授权?
一般情况下普通用户是不能新建用户或者新建用户组,只有超级用户有这个权力
现在想让普通用户使用超级用户的权力来建立用户或者用户组
此时需要把超级用户的权力给普通用户,这就叫用户授权
超级用户把自己的权力分享给普通用户,也可以叫权力共享
(2)具体内容:
权力下放文件为/etc/sudoers
此文件可以直接用vim编辑,但是不提供语法检测
也可以使用visudo编辑此文件,visudo是提供语法检测的==
(3)怎样使普通用户采用超级用户的权力?
步骤一:先建立一个普通用户 useradd 用户名
步骤二:再看是否能建立新用户 su - 用户名 (查看是否为普通用户)useradd
步骤三:打开一个文件 visudo (/etc/sudoers)
步骤四:在改文件的任意一行可以写要操作的东西(一般为了规范 在100行作用写)
内容为:用户名字 主机名字(hostname)=(root) NOPASSWD: 要执行的命令/usr/sbin/useradd
总结:权力下放完毕,此时westos用户可以免密建立用户了
步骤五:测试一定要用sudo
无nopasswd时,在普通用户下执行时需要密码,密码可以在超级用户下更改
nopasswd为免密操作
第一次使用超级用户时要使用自己的密码 用root passwd改密码
注意空格问题:=(root)之前不能有空格
注意免密码和不免密码的区别在于有没有 NOPASSWD
超级用户下放权力是可以同时下放好几个,采用分号+空格 分割开