在Linux系统中,su
命令(全称”Switch User”)是管理员和高级用户进行账户切换的核心工具,它允许在不注销当前会话的情况下临时或长期切换到其他用户身份,尤其在多用户环境或系统维护中至关重要,以下是详细操作指南:
su - 目标用户名
- 示例:切换到用户
john
su - john
- 关键参数:
- 或
-l
:加载目标用户的环境变量(如PATH
、HOME
),模拟完整登录。 - 省略 :仅切换身份,不加载环境(可能导致命令路径错误)。
- 或
切换到root用户
su - # 或 su - root
- 输入后需验证root密码(非当前用户密码)。
- 成功提示符变为 (普通用户为 )。
进阶操作
执行单条命令后返回
su - 用户名 -c "命令"
- 示例:以
mysql
身份重启服务su - mysql -c "systemctl restart mysql"
保留当前环境变量
su 用户名 # 不加横杠
- 适用场景:需临时借用目标用户权限但保留当前工作目录和变量。
切换用户并启动指定Shell
su -s /bin/zsh 用户名 # 使用zsh替代默认bash
安全实践与常见问题
⚠️ 安全准则
- 避免直接使用root:优先用
sudo
执行管理员命令,减少误操作风险。 - 密码策略:
su
需目标用户密码(root切换普通用户无需密码)。- 若忘记密码,需root权限用
passwd 用户名
重置。
- 权限控制:通过
/etc/pam.d/su
限制可使用su
的用户组(如仅允许wheel
组)。
❓ 常见错误
- 密码错误:连续失败可能触发账户锁定(依赖PAM配置)。
- 用户不存在:确认用户名拼写正确(
cat /etc/passwd
查看所有用户)。 - 权限不足:普通用户无法切换到root(除非知晓root密码)。
su
与sudo
的区别
场景 | su |
sudo |
---|---|---|
身份切换 | 启动新Shell会话 | 单次执行命令 |
密码验证 | 目标用户密码 | 当前用户密码 |
审计能力 | 无详细日志 | 记录所有执行的命令 |
推荐场景 | 需长期操作目标用户环境时 | 临时提权执行命令 |
- 基础命令:
su - 用户名
是完整切换的标准操作。 - 安全第一:日常操作优先用
sudo
,仅在必要时使用su
。 - 环境隔离:务必使用 参数加载正确环境变量。
- 权限管理:定期审查
/etc/group
和PAM配置,确保最小权限原则。
引用说明基于Linux核心文档(
man su
)、Red Hat系统管理指南及OpenSSH安全实践,具体系统行为可能因发行版(如Ubuntu/Debian/CentOS)略有差异,请以官方手册为准。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7095.html