Skip to main content
本页覆盖部署中和”身份”相关的命令:建账号、改密码、加入用户组(如 Rocky Linux 的 wheel)、用 sudo 提权、配置环境变量。生产环境绝大多数操作都不该用 root,理解这一组命令是基础。

1. 用户账号管理

场景:sudo 切换后、ssh 不同账户登入后,先确认身份再操作,避免改错文件归属。
每个用户在 /etc/passwd 里一行,字段以 : 分隔:
不需要登录的服务账户

2. 用户组与管理员权限(以 Rocky Linux 为例)

Linux 通过 「用户组」 实现权限的批量管理 —— 把权限授予一个组,组内所有成员立即获得。本节用 Rocky Linux 演示用户、组、sudo 权限三者的关系,这套模型同样适用于 RHEL / CentOS / AlmaLinux。

2.1 用户、组、权限:三个关键文件

每个用户都属于至少一个主组,可以加入多个附加组

2.2 wheel 组:Rocky Linux 的「管理员组」

不同发行版的「管理员组」叫法不同: wheel 这个名字源自 BSD 传统,意思是「掌握方向盘的人」。在 Rocky Linux 上,把用户加进 wheel 组 ≈ 给它 sudo 权限(具体规则见 2.4 节的 /etc/sudoers)。

2.3 让 aimee 拥有 sudo 权限:完整流程

1

确认或创建 aimee 用户

2

把 aimee 加入 wheel 组

-a 务必加上! 单独使用 usermod -G wheel aimee 会把 aimee 从其他所有附加组中踢出,只剩 wheel —— 这是新手最常踩的坑。
3

验证组关系

4

aimee 重新登录后即可使用 sudo

附加组变更需要重新登录才生效。aimee 当前已登录的会话仍持有旧组身份,必须 exit 重连。

2.4 看清谁有管理员权限:/etc/sudoers

/etc/sudoers 是 sudo 权限的总规则文件。先 cat 看一下默认内容:
Rocky Linux 默认的关键几行(去掉注释):
这一行 %wheel ALL=(ALL) ALL 怎么读:
关键认识:正是这一行让”加入 wheel 组”等价于”获得 sudo 权限”。如果删掉它,wheel 组就失去特权了。 #includedir /etc/sudoers.d(虽然以 # 开头但不是注释,是 sudoers 特殊语法)会加载该目录下所有规则文件。生产环境推荐把自定义规则放进独立文件,不要直接动 /etc/sudoers
写入:
任何时候编辑 sudoers 都用 visudo,不要直接 vim visudo 会做语法校验 —— 文件一旦写错,所有人都用不了 sudo,可能把自己锁死visudo -c 可单独检查语法。

2.5 「管理员权限」具体能干什么

sudo 拿到的是 root 权限。在 Linux 里,root 几乎无所不能: 理解关键:root 的权限不是”无视所有规则”,而是”权限检查的例外” —— 内核遇到 UID=0 直接放行(少数例外:SELinux 强制策略、chattr +i 不可变属性等)。

2.6 用户组与文件权限的关系

回顾文件权限中的 rwxr-xr-x 三段:第一段是所有者、第二段是所属组、第三段是其他人这就是用户组存在的最大意义 —— 让一个文件的访问权限可以被一群人共享。 典型场景:让 aimee 和 bob 协作维护 /opt/myapp/
1

建一个团队组

2

改目录所属组 + 给组写权限

chmod g+s 给目录加 setgid 位:之后在里面新建的文件 / 子目录会自动属于 developers 组,不用每次手动 chgrp。
3

验证

对比:sudo 权限 vs 文件组权限 简而言之:sudo 决定”你能不能跑某条命令”,文件组决定”你能不能动某个文件”。两者互为补充。

2.7 用户组管理速查

3. sudo / su — 提权

为什么推荐 sudo 而不是直接登 root:
新系统通常默认禁用 root 直接 su -(root 密码未设),用 sudo -i 替代。
本章节聚焦 sudo / su 命令的使用。如何配置谁能 sudo、能 sudo 干什么(包括 /etc/sudoersvisudo、wheel 组),已在 2.4 看清谁有管理员权限2.7 用户组管理速查 中完整覆盖。
生产服务器尽量用 sudo,不要长期处于 root shell。误操作风险大,且 sudo/var/log/auth.log 留审计记录。

4. 环境变量

很多部署问题来自环境变量没设对(最经典:command not found 是 PATH 没配)。
export 的含义:让子进程也能看到这个变量。不 export 的话,启动的应用读不到。
export 写进登录 shell 的初始化文件:改完后让它立即生效:
$PATH 是用 : 分隔的目录列表,shell 在这些目录里找你输入的命令:
「command not found」 通常意味着该程序不在 $PATH 里。可以:
  1. 用绝对路径调用:/opt/myapp/bin/myapp
  2. 把目录加进 $PATHexport PATH=/opt/myapp/bin:$PATH
  3. 持久化:把上一行写到 ~/.bashrc,下次登录依然有效
新加路径放最前面(新路径:$PATH)= 优先用新版;放最后面($PATH:新路径)= 系统已有同名命令优先。
场景:systemd 服务里通过 Environment= 字段传应用的环境变量: