什么是 USER
用户账户为不同人员和运行的程序之间提供安全边界
用户使用 username 进行标识,操作系统为其分配唯一标识号(UID),
用户可能含有密码
系统中的每个程序都以一个特定用户运行,每个文件都有一个特定用户作为所有者
用户账户有三种主要类型:超级用户、系统用户和普通用户
- superuser 就是 root 用户,UID=0,具有系统的最高权限
- system user 用于系统管理,例如运行服务,不需要用于系统登录
- regular user 供用户进行日常系统管理,通常具有权限限制
id
命令查看当前登录的用户或某用户信息,可将其他用户名传递给id以查看其他用户基本信息
ls -l 命令查看文件所属用户,ls -ld 命令查看目录所属用户![](https://i-blog.csdnimg.cn/blog_migrate/5b6765d2ca6a15db93a12fd78405d40a.png)
使用
ps
查看进程的信息,
-a
选项显示当前 terminal 的进程,
-u
选项显示进程关联的用户信息
虽然命令中显示用户名,但是系统中使用 UID 追踪用户,
/etc/passwd
文件中存储有关用户的信息
①该用户的用户名
②用户密码曾以加密格式存储在这里,现在已经移至/etc/shadow文件,始终为x
③该用户账户的UID
④该用户账户的主要组的GID
⑤该用户的真实姓名
⑥该用户的主目录,shell启动时的初始目录,含有用户数据和初始设置
⑦该用户默认的shell程序,会在登录时运行。对于普通用户,通常是提供用户命令行提示符的程序
什么是 GROUP
组是用户的集合,组中用户共享文件和其他系统资源的访问权限
组有 group name 和 GID,使用
/etc/group
文件存储本地组的信息
①该组的组名称
② 过时的组密码字段,始终为x
③该组的GID
④属于作为补充组的该组成员的用户列表
主要组和补充组
每个用户只属于一个 primary group,对应 GID 在 /etc/passwd 中
创建新用户时同时创建同名的 primary group,用户作为此组的唯一用户
用户还可以属于 supplementary groups,对应 GID 在 /etc/group 中
同一组中的不同用户拥有组中对文件的相同权限
id
命令可以显示用户的组信息
![](https://i-blog.csdnimg.cn/blog_migrate/be25ab427d55600c96b7bb8bacc26ac6.png)
获取超级用户访问权限
切换用户
su
命令用于进行用户切换,普通用户之间切换需要输入密码, root 切换到普通用户不需要输入密码
su 启动非登录 shell(使用原始用户的环境设置),
su -
启动登录 shell (导入该用户的环境设置,推荐)
通过 sudo 运行命令
普通用户使用
sudo
可以获取 root 用户的访问权限
sudo 需要用户输入普通用户自己的密码以进行身份验证
通过 sudo 运行的命令,会在 /var/log/secure 中记录日志
![](https://i-blog.csdnimg.cn/blog_migrate/95f1fa8461eac40d50e2e39dc218c108.png)
sudo 的主配置文件是 /etc/sudoers,只能采用特殊的 visudo 命令进行编辑
#以下来自/etc/sudoers文件的一行可为组wheel的成员启用sudo访问权限![](https://i-blog.csdnimg.cn/blog_migrate/4409dfe837a894ad339a1c6f3835deca.png)
%wheel 表示用户组 wheel,ALL=(ALL) 定义可以在任意包含此文件的主机上,wheel 可以运行任意命令,最后一个 ALL 表示 wheel 可以任意用户 身份运行此命令
/etc/sudoers包含
/etc/sudoers.d
目录中所有文件内容,可将相应的文件放入该目录中,为用户添加sudo权限
# 为用户user01启用完整的sudo访问权限,创建含有以下内容的 /etc/sudoers.d/user01
如果想不输入密码就可以运行 sudo 命令,设置NOPASSWD(在 ansible 中非常有用):
![](https://i-blog.csdnimg.cn/blog_migrate/7d711869033c45f11415eed1318302ad.png)
管理本地用户帐戶
创建用户
useradd username
创建新用户及其组,并创建用户家目录和用户信息 (暂无密码,无法登录)
useradd --help
显示选项和参数,与
usermod
命令的选项参数一致
/etc/login.defs
中定义新用户的 UID 范围和密码生命周期
修改用户
usermod --help 命令显示可用于修改账户的基本选项![](https://i-blog.csdnimg.cn/blog_migrate/4fa0c234facad6b1677cfe536e07d9f4.png)
删除用户
userdel username
删除用户,但是保留家目录
userdel -r username
删除用户和家目录
rhel7 开始,普通用户的 UID 从
1000
开始
root用户可使用
find / -nouser -o -nogroup
可以搜索不属于任何用户和组的文件
设置密码
passwd username
设置密码,root 可以为任何用户设置密码,普通用户只可以修改自己的密码
UID 范围
UID 0 永远分配给 root
UID 1-200 分配给 system users(红帽的系统服务)
UID 201-999 分配给 system users,供文件系统中没有自己的文件的系统 进程使用。通常在安装需要它们的软件时,从可用池中动态分配。程序以这些“无特权”系统用户身份运行,它们仅访问运行所需的资源
管理本地用户和组
创建 group
groupadd
创建用户组
groupadd -g
可以指定 GID,建议使用 1000 以上的 GID
![](https://i-blog.csdnimg.cn/blog_migrate/ab17d2550d56b4e38952b61c9b274271.png)
修改 group
groupmod
命令,
-n
设置 groupname,
-g
设置 GID
# 将组名称从group02 改到 group0022
# 将组group0022的 GID 改为 20000
删除 group
groupdel
删除组,如果是某用户的 primary group,则无法删除
修改 group 成员
usermod -g 修改用户的 primary group
usermod -aG
将用户添加到某一补充组,-a 是 append 模式。如果
只有 -G
,则会从当前未包含在 -G 选项列表中的任何补充组中删除用户
管理用户密码
shadow 密码和密码策略
密码现保存到只有 root 可读取的
/etc/shadow
文件中,文件格式如下:
①此密码所属账户的用户名
②此用户的加密密码
③上次更改密码的日期。其设置值为自1970年1月1日起的天数, ,并按UTC时区计算
④自用户上次更改密码以来到可以再次更改密码的最短天数
⑤在密码过期之前不进行密码更改可以经过的最长天数。空字段表示它不会根据上次更改以来的时间失效
⑥警告期。当用户在截止日期前登录到达该天数时,会收到有关密码过期的警告
⑦非活动期。一旦密码过期,在这些天数内仍可以登录,过日期后,账户将被锁定
⑧密码过期日。其设置值为自1970年1月1日起的天数, ,并按UTC时区计算。空字段表示不会在特定日期过期
⑨最后一个字段通常为空,预留给未来使用
加密秘钥的格式
秘钥由三部分构成,
$哈希算法$salt$加密后的秘钥
,中间以 $ 分隔。
- 6表示 sha512,RHEL7后默认值;1表示 md5;5表示 sha256
- 加密 password 用的 salt,来自于 random 文件
- 用 salt 加密 password 后,进行哈希的值
salt 用以防止不同用户使用相同密码
密码的验证
用户登录时,使用 salt 加密用户 password,然后进行哈希,之后进行比较
配置密码生命周期
chage
命令用以修改密码生命周期
-m 最小生命周期;-M 最大生命周期;-W 警告周期;-I 失效周期
举例:
# chage -d 0 user03 要求 user03 用户下次登录必须修改密码
# chage -l user03 显示 user03 密码生命详情
# chage -E 2025-08-05 user03 定义密码过期时间
在 /etc/login.defs 中 PASS_MAX_DAYS、PASS_MIN_DAYS 和 PASS_WARN_AGE 定义新用户的密码最大生命周期、最小生命周期和警 告周期
限制登录
使用
usermod -L
可以锁定用户,
usermod -U
解锁用户
nologin shell
当有效的用户的账号不需要登录系统,可以将其登录 shell 设置为 nologin shell, 一旦用户尝试登陆, nologin shell 会关闭该连接
![](https://i-blog.csdnimg.cn/blog_migrate/b8c5712cec2f8e18cfcd78f6bafcfdbe.png)