在 Linux 系统管理中,变更用户是一项基础且高频的操作,无论是日常开发还是系统运维,都离不开对不同用户身份的切换,本文将详细介绍 Linux 系统中变更用户的多种方法、相关配置及注意事项,帮助用户全面掌握这一技能。

理解 Linux 用户与用户组
Linux 是多用户多任务操作系统,每个用户都有独立的身份标识(UID)和所属用户组(GID),用户组用于简化权限管理,将多个用户归为一类,统一分配权限,变更用户本质上是切换当前进程的运行身份,涉及权限、环境变量等资源的重新加载,常见的用户类型包括:超级用户(root,UID 为 0)、普通用户(系统用户或登录用户)及虚拟用户(如 daemon、ftp,用于服务运行)。
su 命令:经典用户切换工具
su(switch user)是最基础的用户切换命令,默认用于切换至超级用户或其他普通用户,其核心语法为 su [选项] [目标用户],常用选项包括:
- 或
-l:以登录模式切换,加载目标用户的环境变量(如.bash_profile、.profile),推荐使用该选项以确保环境一致性。 c或--command:在不登录的情况下,以目标用户身份执行指定命令,su -l -c "ls /root" root会以 root 用户身份执行ls /root并退出。s或--shell:指定目标用户的默认 Shell,如su -s /bin/sh user切换至 user 并使用 sh Shell。
示例:
- 切换至 root 用户:
su -(需输入 root 密码) - 切换至普通用户
test:su -l test(需输入 test 密码) - 以 guest 用户身份创建文件:
su -c "touch /tmp/test.txt" guest
注意事项:
- 使用
su切换至 root 需要知道 root 密码,且普通用户默认无此权限。 - 若未指定目标用户,默认切换至 root,但环境变量可能不完整,建议始终使用
-l选项。
sudo 命令:权限提升的安全选择
sudo(superuser do)允许普通用户以其他用户(通常是 root)身份执行命令,而无需知道 root 密码,其核心优势在于权限精细化管理,管理员可通过 /etc/sudoers 文件配置哪些用户可以执行哪些命令,避免直接共享 root 密码。

基础语法:sudo [选项] [命令],常用选项包括:
-u或--user:指定目标用户,默认为 root,sudo -u www ls /var/www以 www 用户身份查看目录。-l或--list:列出当前用户可执行的 sudo 命令,用于权限自查。-i或--login:以目标用户的登录 Shell 运行,类似于su -,sudo -i切换至 root 登录环境。
配置 sudo 权限:
编辑 /etc/sudoers 文件(建议使用 visudo 命令,避免语法错误),常见配置如下:
- 允许用户
test执行所有命令:test ALL=(ALL:ALL) ALL - 限制用户
dev仅能执行/usr/bin/apt和/usr/bin/systemctl:dev ALL=(ALL:ALL) /usr/bin/apt, /usr/bin/systemctl - 允许
devops组成员以任意用户身份执行命令:%devops ALL=(ALL:ALL) ALL
注意事项:
- 使用
sudo需当前用户在sudoers文件中被授权,否则会报错user is not in the sudoers file。 - 执行 sudo 命令时默认需输入当前用户密码(有效期为 5 分钟,可配置),而非 root 密码。
su 与 sudo 的选择场景
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 需要长期以 root 身份操作 | su - |
完整加载 root 环境,适合系统维护、软件安装等长时间任务。 |
| 临时执行单个高权限命令 | sudo |
无需切换用户身份,保留当前用户环境,且权限可追溯,安全性更高。 |
| 多人管理同一台服务器 | sudo |
通过精细化的 sudoers 配置,避免共享 root 密码,明确责任划分。 |
| 切换至普通用户调试问题 | su -l user |
加载目标用户的完整环境,排查用户相关配置问题(如环境变量、权限错误)。 |
安全与最佳实践
- 禁用 root 远程登录:在
/etc/ssh/sshd_config中设置PermitRootLogin no,强制通过普通用户 sudo 提权,降低暴力破解风险。 - 限制 sudo 命令范围:遵循最小权限原则,避免为普通用户开放
ALL=(ALL:ALL) ALL,仅授予必要的命令权限。 - 审计 sudo 操作:通过
sudo -l查看权限,或结合auditd系统审计日志记录 sudo 命令执行记录,满足合规要求。 - 使用
nologinShell:对于仅需要执行命令无需登录的系统用户(如 nginx、mysql),设置 Shell 为/sbin/nologin,防止直接登录。 - 定期清理 sudo 权限:员工离职或岗位变动后,及时从 sudoers 文件中移除对应用户或用户组,避免权限残留。
常见问题与解决方案
-
问题:使用
su -切换用户后,提示This account is currently not available。
原因:目标用户的 Shell 被设置为/sbin/nologin或/bin/false。
解决:临时修改 Shell 为/bin/bash(usermod -s /bin/bash username),或确认是否需要登录权限。 -
问题:
sudo命令执行失败,提示command not found。
原因:目标用户的环境变量(如PATH)未正确加载,或命令路径不在默认搜索路径中。
解决:使用sudo -i进入登录模式,或通过sudo -u user env查看目标用户的环境变量。
-
问题:普通用户无法使用
sudo,提示not in sudoers file。
原因:用户未被添加到 sudoers 文件或所属用户组无权限。
解决:以 root 身份运行visudo,添加对应用户配置,或检查用户是否在sudo组中(默认组可使用sudo)。
Linux 变更用户是系统管理的核心技能,su 和 sudo 作为两大工具,分别适用于长期身份切换和临时权限提升,理解两者的差异、合理配置权限、遵循安全原则,不仅能提高工作效率,更能保障系统安全,在实际操作中,建议优先使用 sudo,通过精细化管理实现权限的最小化分配,同时结合审计和监控,构建安全可控的用户管理体系。



















