【Linux】用户管理及优化
一 用户及用户组存在的意义
1.1 用户存在的意义
系统中的资源是有限的,如何合理分配资源,这需要3A机制来完成
3A机制
Linux中的3A机制包括身份认证(Authentication)、授权(Authorization)和审计(Accounting), 这些机制共同构成了系统中最底层的安全架构
身份认证(Authentication)
身份认证是验证用户身份的过程,确保只有合法用户才能访问系统。常见的认证方式包括用户名/密码、 数字证书、生物识别等。
授权(Authorization)
授权是在用户通过认证后,根据其身份和角色分配相应的权限,决定用户可以访问哪些资源或执行哪些 操作3
审计(Accounting)
审计记录并监控用户访问和操作系统的活动,以便在发生安全事件时进行追溯和分析。审计日志是安全 审计的重要依据
1.2 用户组存在的意义
用户组是一个逻辑容器,并不能单独使用,其错在意义在于对用户进行归类和统一授权
在系统中有两种组的类型
- 初始组:用户建立后自动生成的组,是用户的主组
- 附加组:用户需要某些权限所加到的组,为了取得改组拥有的权力
1.3 用户及用户组在系统中存在的方式
在系统中用户和组都是用数字来表示,我们对这个数字成为ID
用户的ID范围:0-65535
0: root用户的ID
1-999: 系统用户ID
999-65545: 操作用户ID
/etc/passwd,/etc/group文件
系统中的用户都是以ID的形式存在,但是作为操作者对于数字是不敏感的,所以我们为用户设定了文字 别名并把这个别名填写到了/etc/passwd文件中,所以/etc/passwd就是用户信息文件,/etc/group就是 组信息文件
如果用户ID在/etc/passwd文件中有记录,那么系统就认为这个用户是存在的,相反系统认为这个用户不 存在
二 用户涉及到的系统配置文件
2.1 /etc/passwd
用户存放用户信息,用:分割每一列,每行有7列
| 第一列 | 用户名称 |
|---|---|
| 第二列 | 用户密码,目前弃用所以用X占位 |
| 第三列 | 用户ID |
| 第四列 | 用户主组ID |
| 第五列 | 用户说明 |
| 第六列 | 用户家目录 |
| 第七列 | 用户默认使用的shell |
2.2 /etc/group
用户组信息文件,用:分割,每行4列
| 第一列 | 用户名称 |
|---|---|
| 第二列 | 用户密码的加密字符,如果存在通常用SHA512加密,如果密码开头有!表示用户被锁定 |
| 第三列 | 密码最后一次被修改的时间,从1970年开始计算 |
| 第四列 | 密码最短有效期 |
2.3 /etc/shadow
用户存认证信息
| 第一列 | 用户名称 |
|---|---|
| 第二列 | 用户密码的加密字符,如果存在通常用SHA512加密,如果密码开头有!表示用户被锁定 |
| 第三列 | 密码最后一次被修改的时间,从1970年开始计算 |
| 第四列 | 密码最短有效期 |
| 第五列 | 密码最长有效期 |
| 第六列 | 密码过期前警告期 |
| 第七列 | 密码非活跃期 |
| 第八列 | 密码到期日 |
| 第九列 | 预留位,未使用 |
2.4 /etc/skel/.*
#用户的环境配置文件
.bash_profile #环境变量配置文件
.bashrc #shell配置文件
.bash_history #历史记录
.bash_logout #用户退出shell执行命令
2.5 /home/username
用户的家目录集合
2.6 /var/spool/mail/username
用户邮件存放文件
三 用户管理
3.1 用户信息查看
#查看当前用户
whomai
#查看指定用户ID
id #查看用户id信息-u #查看用户的用户id-g #查看用户主组id-G #查看用户所有的组的id-n #显示名称
3.2 切换用户
#切换用户
su 用户名称#切换用户及用户环境变量
su - 用户
- #切换用户环境#root ----> commonuser 不需要后者密码
#commonuser ----> root 需要密码
#commonuser ----> commonuser 需要密码
[!WARNING]
注意:
在做用户切换时当使用完毕用户身份及时退出
不要在一个shell中反复执行su命令
在一个shell中反复执行su命令会导致环境错乱
3.3 用户和用户组建立及删除
3.3.1 用户建立
useradd username #用户建立-u id username #uid 2**16=0-65535#0 表示超级用户#1-200 系统预留id#201-999 系统用户#1000-60000 用户级用户#/etc/login.defs 记录用户建立的默认规则-g id username #主组id-M username ##建立用户时不建立家目录-G id username #附加组id-d dir username #指定用户家目录-M username #建立用户时不建立家目录-c word username #指定用户说明-s shell username #指定用shell
3.3.2 用户删除
userdel -r username #用户删除 -r 删除用户的系统配置文件#如果在删除用户时没加-r参数,那么可以用rm手动删除残留资源
3.3.3 组建立及删除
groupadd groupname #组建立-g id groupname #指定组名称groupdel groupname #组删除
3.3.4 用户和组的信息管理
#更改组信息
groupmod -g 组名称#更改用户信息
usermod-l #更改用户名称-u #更改用户id-g #更改主组id-G #更改用户附加组身份-aG #添加用户附加组身份-c #更改用户说明-d #更改家目录指向-md #更改家目录指向同时更改家目录名称-s #更改默认shell-L #冻结账号-U #解锁
3.3.5 用户认证信息管理
#1.用户认证状态信息
passwd -S fjw #查看密码状态
#2.用户加密字符
#更改密码)`
passwd fjw #只有root可以执行 “echo 123 | passwd --stdin fjw”
passwd #普通用户改密码
Changing password for user fjw.
Current password: #输入原始密码
New password: #输入新密码(8位以上无序数字+无序字母组合)
Retype new password: #重复输入
passwd: all authentication tokens updated successfully.
#冻结认证)
passwd -l fjw #冻结账号认证
passwd -u fjw #解锁账号认证
#密码删除)
passwd -d fjw
#密码使用天数
*从1970-1-1算其到今天的时间
passwd -e fjw #修改默认使用时间为0
chage -d 0 fjw #账号必须改密码才能登陆系统
#密码最短有效期
passwd -n 1 fjw #fjw在1天内不能改密码
chage -m 1 fjw
#密码最长有效期
passwd -x 40 fjw #40天内fjw用户必须更新密码否则会被冻结
chage -M 30 fjw
#密码过期警告
passwd -w 2 fjw #账号过期前警告时间
chage -W 1 fjw
#认证非活跃天数
passwd -i 2 fjw #账号认证最大时间超过后还能用多久
chage -I 1 fjw
#账号认证到期时间
chage -E "2025-05-11" #到2025-5-11这天账号会被冻结
3.3.6 权力下放
在系统中普通用户时无法执行系统管理命令的如果需要普通用户执行系统管理动作那么需要root用户来 进行授权
#普通用户授权方式 “sudo”
#作用:
#可以使普通用户使用指定的用户身份呢运行命令授权方法:
visudo #此命令作用是编辑/etc/sudoers并提供语法检测
在文件的100行左右 #代码规范性
username hostname=(newusername) [NOPASSWD:] /command, /command1#lee用户在Timinglee主机=(用超级用户身份) 执行useradd命令
fjw fjwyyy=(root) /usr/sbin/useradd#fjw用户 在fjwyyy主机中以超户免密执行useradd和userdel
fjw fjwyyy= (root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/userdel
测试效果:
su - fjw
sudo useradd test1 #在fjw第一次使用sudo命令时需要输入fjw密码
exit #退出fjw
su - fjwyyy
sudo userdel -r test1 #fjwyyy可以免密执行userdel 命令
