1.用户及用户组的意义
在Linux中,用户(User)和用户组(Group)是管理系统权限和资源访问的重要概念。
(1)用户
用户是指系统中的一个身份标识,每个用户都有自己的用户名和密码。每个用户可以拥有自己的文件、进程和权限,通过用户名和密码进行身份验证后可以登录系统并执行各种操作。通过建立不同权限的用户,一来可以合理的控制和运用系统的资源,二来可以帮助用户构建自己的私人空间,更好的组织和管理自己的文件。
用户是系统中最底层的一种安全机制,3A机制组成系统中最底层的安全架构。3A机制由 “身份 account ,授权 author,认证 auth”组成。
(2)用户组
用户组是指一组用户的集合,对用户进行归类和统一授权。每个用户可以属于多个用户组,而每个用户组可以拥有多个用户。用户组通常用于授权管理和文件访问控制,比如一个用户组可以有权限访问某个目录或文件,而其他用户组则没有。
Linux使用了一种称为“访问控制列表”(Access Control List,简称ACL)的权限控制机制。每个文件和目录都有一个ACL,包含了对该文件或目录的访问权限设置,包括用户和用户组等信息。当一个用户尝试访问某个文件或目录时,系统会根据该用户所属的用户组和ACL中的权限信息来判断是否允许访问。
2.用户查看的方法
# whoami : 查看当前用户
#id :查看当前用户id信息
#id 用户:查看指定用户的id信息
#id -u 用户 : 查看用户的用户id
#id -g 用户 : 查看用户的主组id
#id -G 用户 : 查看用户的所有组的id
#id -n : 显示名称,不可以单独使用。必须联合以上一起使用,例如:
#id -n -g 用户:显示用户所有组的名称
3.切换用户
(1)图形切换
(2)gnome命令切换
# gnome-session-quit --force :输入命令后直接退出系统,重新登陆。
(3)su 命令切换
# su username : 切换用户 ,不切换用户环境
# su - username:切换用户,切换了用户环境
两者区别:“ - ” 代表切换用户环境
超级用户-----> 普通用户 :不需要密码
普通用户-----> 超级用户:需要密码
普通用户------>普通用户:需要密码
注意:在做用户切换时当使用完毕用户身份及时退出,利用exit命令
#不要在一个shell中反复执行su命令
#在一个shell中反复执行su命令会导致环境错乱
4.用户涉及到的系统配置文件
/etc/passwd ##用户身份信息文件
#用户名称:用户密码:用户id:用户主组id:用户说明:用户家目录:用户默认shell
/etc/group ##组身份信息文件 #组名称:组密码:组id:组的附加成员
/etc/skel/.* ##用户环境配置文件模板
/etc/shadow ##用户认证信息文件
/home/username ##用户家目录
/var/spool/mail/username ##用户邮箱文件
5.监控及用户和组建立的基本方法
(1)监控
# watch 命令 : 隔两秒执行一次命令
# watch -n 1 命令 : 隔一秒执行一次命令
<ctrl> + <C > 即可退出监控界面
由于本次实验需要监控用户和组的建立及删除,因此我们设立以下监控界面。
# watch -n 1 "tail -n 3 /etc/passwd /etc/group ; ls -l /home" :查看etc/passwd etc/group 后三行的内容,并且展示家目录的属性。
“ ;” : 表示命令的间隔
(2)用户和组建立的基本方法
# useradd 用户 :建立用户
# userdel 用户 : 删除用户,只删除用户的信息,不删除配置文件,比如家目录。
#userdel -r 用户 : 删除用户及其系统配置文件
# groupadd 组 :建立组
# groupdel 组:组删除
6.指定信息建立用户及组
(1)建立组---指定id
# groupadd -g id 组 : 建立指定id 的组
(2)指定信息建立用户
#useradd -u id 用户 :建立指定id的用户 (默认主组id与用户id一致)
ps:本次实验建立用户后及时删除
注意:用户id不能随意取,用户建立默认规则储存在:/etc/login.defs
# 0 : 超级用户
# 1 - 200 :系统预留id
# 201 - 999 :系统用户
# 1000 - 60000 :用户级用户
# useradd -g id 用户名 : 建立指定主组id的用户 ps:前提是这个组要存在!
注意:指定主组id 不影响用户id
# useradd -G id 用户 : 建立指定附加组id的用户 (该附加组必须要存在)
# useradd -c 说明 用户名 : 建立指定用户说明的用户
# useradd -d 家目录 用户名 :建立指定家目录的用户
# useradd - M 用户名 :建立用户时不建立家目录
# useradd -s shell 用户名 :建立用户时指定shell
ps: 默认shell有 /bin/sh /bin/bash sbin/nologin
但sbin/nologin 是系统预留的,不对外开放!
7.用户信息的更改
(1)修改用户名称
# usermod -l 新名称 旧名称 : 修改用户名称
(2)修改用户id
# usermod -u 新id 用户名 :修改用户id
(3)修改用户主组id
# usermod -g 新主组id/名称 用户名 : 修改用户的主组id
ps:新主组必须存在!
(4)更改用户附加组的身份
# usermod -G 附加组id/名称 用户 : 修改用户的附加组身份
ps:附加组必须存在!
注意:新附加组身份会覆盖原附加组,因此可以利用该特性清空用户的附加组。
# usermod -G "" 用户名:清空用户的附加组
(5)添加用户附加组身份
# usermod -aG 附加组id/名称 用户 :添加附加组身份
注意:新附加组身份不会覆盖原附加组
(6)更改用户说明
# usermod -c 用户说明 用户名 :更改用户说明
(7)更改家目录指向
# usermod -d 新家目录 用户 :更改家目录指向
ps:只是更改了家目录指向,该指向不一定存在。真正的家目录名称并为改变
(8) 更改家目录指向同时更改家目录名称
# usermod -md 新家目录 用户名:修改家目录指向并更改家目录名称
(9)修改用户的默认shell
# usermod -s 新shell 用户名:修改用户的默认shell
8.用户认证信息管理
(1)/etc/shadow : 文件内容说明
#用户名称:用户密码的加密字符:用户密码最后一次被修改时间:密码最短有效期:密码最长有效期:密码过期前警告期:账号非活跃期:账号到期时间:用户自定义(未使用)
(2)查看用户密码状态
# passwd -S 用户名:查看用户密码状态
(3)root修改密码
# passwd 用户 :修改用户密码
ps:超级用户可以直接修改任何用户的密码,不用输入原密码。
# echo 123 | passwd --stdin westos : 修改westos用户的密码为123 ,非交互式修改密码,只有root可以执行
(4)普通用户修改密码
# passswd : 只用输入passwd即可修改自己的密码
注意:修改密码前要输入原密码且密码要8位以上,要求严格
(5)用户冻结和解冻
ps:监控界面:
#watch -n 1 "tail -n 1 /etc/shadow ; echo @@@@@; passwd -S lee"
#passwd -l 用户 : 用户密码被冻结,则该用户无法登陆。
冻结的原理,密码前加了两个感叹号!!
ps:root切换该用户成功,普通用户无法切换该用户。
# passwd -u 用户 :用户密码解锁
# usermod -L 用户:也可对账号进行冻结,在密码前加了一个感叹号!
# usermod -U 用户 :对账号进行解冻
(6)修改用户密码最后一次被修改的时间
# passwd -e 用户 : 修改默认时间为0,必须修改该账号的密码。
适用场景:拿到新银行卡时必须修改密码。
修改前:
修改后:
再次登陆该用户时,强制要求修改密码
再次登陆系统后,时间又恢复了
# chage -d 0 用户 : 修改用户默认时间为0
修改密码后,恢复!
(7)修改密码最短有效期:该期限内不能改密码
# passwd -n 1 用户 :该用户一天不能改密码
# chage -m 1 用户:该用户一天不能改密码
(8)修改密码最长有效期限:过了该日期必须修改密码
# passwd -x 30 用户:修改用户的最长期限为30天
# chage -M 99999 用户 :修改用户的最长期限为9999天
(9)修改密码过期前警告时间
# passwd -w 2 用户:修改警告时间为2天,即到期前两天提示密码即将过期。
# chage - W 7 用户:修改警告时间为7天。
(10)修改认证非活跃天数:过期后还能用多久
# passwd -i 1 lee :过期后还能登陆该账号一天,并且会强制改密码(因为过期了)。
# chage -I -1 lee :不设置非活跃天数。
(11)修改账号到期时间
# chage -E “2024-01-23" 修改账号过期时间为2024-01-23
9.用户权力下放
普通用户默认无法建立新用户
#在系统中普通用户时无法执行系统管理命令的
#如果需要普通用户执行系统管理动作那么需要root用户来进行授权
授权方法:
visudo ##此命令作用是编辑/etc/sudoers并提供语法检测
# visudo : 只输visudo 回车就可以
ps:一般写在100行
因此首先要获取主机名和执行命令的绝对路径
# hostname : 获取主机名
# which useradd : 获取命令的绝对路径
输入visudo开始授权,在100行写
lee 主机名=(root) 命令的绝对路径 :lee用户在该主机上以root身份执行useradd命令
切换至lee用户测试
# sudo : 授权方法
# sudo useradd test
第一次需要密码,后续不需要。
发现普通用户也可成功建立新用户, 普通用户删除用户怎么办?
继续在visudo里面添加执行命令即可,命令之间用逗号空格隔开
lee用户利用权力下放删除test,test1用户成功!
如果想第一次也不输入密码。
即免密的话,在/etc/sudoers文件添加NOPASSWD:就可以。
则第一次也不需要密码,实现了免密操作!