RDP Monster

如何在 Ubuntu 中切换用户:su、sudo 与权限提升

如何在 Ubuntu 中切换用户:su、sudo 与权限提升

引言

管理多个用户账号、在它们之间切换是 Linux 系统管理的基础。Ubuntu 作为全球最流行的 Linux 发行版,提供了多种切换当前用户的方法,每种方法都有各自的应用场景和安全影响。掌握这些机制能让多用户工作流程更高效、管理操作更安全,并实现合理的权限管理。

这份完整指南涵盖了 Ubuntu 上每一种切换用户的方法,从最基础的命令行用法到进阶的权限提升技巧。无论你是在管理多人共用的系统、执行管理任务,还是面对多租户环境,掌握用户切换都是熟练使用 Ubuntu 的关键。

 

理解 Ubuntu 的用户管理

用户账户类型

普通用户:权限有限的标准账户,文件访问受限,无法修改系统配置。

Root 用户:对所有系统资源具有不受限制访问权限的超级用户,能够执行任何操作,包括危险操作。

系统用户:用于系统服务的特殊账户(www-data 用于 Web 服务器,mysql 用于数据库)。

Sudo 用户:通过 sudo 配置委派了超级用户权限的普通账户。

权限提升

Why Escalate?: Most administrative tasks require elevated privileges. Rather than logging in as root (dangerous), Ubuntu uses privilege escalation to grant specific elevated permissions temporarily.

原则:以最少必要权限执行操作;最大限度地减少提升访问的时间;审计所有特权操作。

 

su(切换用户)命令

基本语法

su [OPTIONS] [USERNAME]
Switching to Another User
su john
Prompts for the target user’s password, then switches to that account. The environment remains the user’s original environment (not recommended).

切换用户并使用新环境

su - john


The hyphen (-) loads the complete environment of the target user, including:

  • 指向用户家目录的 HOME 变量

  • 包含用户命令路径的 PATH 变量

  • Shell 配置文件(.bashrc、.profile)

  • 工作目录已切换到用户家目录

Best Practice: Always use su - to ensure proper environment configuration.


切换到 root 用户

su -


以 root 完整环境切换到 root 用户。提示输入 root 密码。

su 命令选项

-c (Command): Execute single command as another user without full session

su - john -c "ls -la /home/john"

-l (Login): Identical to using hyphen; creates login shell

su --login john

 

-s (Shell): 为会话指定 shell

su - john -s /bin/zsh

 

-m (Preserve environment): Keep current environment while switching

su -m john

sudo(Superuser Do)命令

基本语法
sudo [OPTIONS] COMMAND


以提升权限执行命令

sudo apt-get update # Update package lists (requires root)
sudo systemctl restart ssh # Restart SSH service
sudo reboot # Reboot system


运行交互式 root shell

sudo -i

在不以 root 登录的情况下启动交互式 root shell。

以其他用户身份运行命令

sudo -u username command

以指定用户的权限(不仅仅是 root)执行命令。


sudo 命令选项

-l (List): Display allowed commands

sudo -l

-k (Invalidate): Clear sudo credentials (requires password on next use)

sudo -k

 

-p (Prompt): Custom password prompt

sudo -p "Enter admin password: " apt-get update
-v (Validate): Extend sudo timeout
sudo -v

 

-H (Home): Set HOME to target user’s home

sudo -H -u username command

su – 与 su:关键区别

功能 su su –
环境 保留父 shell 环境 加载目标用户的环境
HOME 变量 保留原用户的家目录 切换到目标用户的家目录
PATH 变量 可能包含原用户的路径 包含目标用户的标准路径
Shell 配置 不加载 .bashrc 或 .profile 加载 ~/.bashrc、~/.profile
工作目录 保留当前目录 切换到用户的家目录
推荐 很少;可能引起混淆 始终用于切换用户
风险等级 较高(混合环境) 较低(干净的环境)

 

示例差异

# 使用 su (BAD)
$ su john
Password:
$ echo $HOME
/root # Still shows original home!
$ pwd
/path/to/original # Still in original directory
# 使用 su - (GOOD)
$ su - john
Password:
$ echo $HOME
/home/john # Correct home directory
$ pwd
/home/john # Correct directory

切换到 root 用户

使用 su

su - Password: (enter root password)
root@hostname:~#

使用 sudo

sudo -i
[sudo] password for john: (enter john's password)
root@hostname:~#

su – 与 sudo -i 的区别

方面 su – sudo -i
需要密码 Root 密码 当前用户的密码
日志 未记录 由 sudo 记录
审计追踪 最小 完整的审计追踪
安全性 较低(需要共享 root 密码) 较高(个人责任制)
典型企业设置 不鼓励 Recommended

Security Note: Modern Ubuntu systems typically don’t require root password; instead, sudoers are granted authority through sudo configuration.

 

以其他用户身份执行命令

执行单个命令

sudo -u apache /usr/bin/apache2ctl restart
su - testuser -c "python /home/testuser/script.py"

运行多个命令

sudo bash -c "echo 'Line 1' > /tmp/file; cat /tmp/file"

在保留当前目录的情况下运行命令

sudo -u john pwd # Prints john's home (working directory changed)
sudo -u john -C pwd # Prints current directory (with -C flag)

修改用户密码

更改自己的密码

passwd

提示输入当前密码,然后输入新密码(两次以确认)。

更改其他用户的密码(需要 root 权限)

sudo passwd john

无需当前密码;提示输入新密码(root 权限)。

设置过期策略

sudo chage -l john # View password aging info
sudo chage -M 90 john # Force password change every 90 days
sudo chage -d 0 john # Force password change on next login

用户权限与用户组

查看用户组

groups john # Show groups current user belongs to
groups # Show own groups
id john # Detailed UID, GID, groups

将用户添加到组

sudo usermod -aG groupname username

 

Example: Add user to sudo group

sudo usermod -aG sudo john

从组中删除用户

sudo deluser username groupname

创建新用户

sudo useradd -m -s /bin/bash newuser
sudo passwd newuser

Options:

  • -m: Create home directory

  • -s: Specify shell

  • -G: 分配到组

 

实用示例

Example 1: Administrative Task with 权限提升

#!/bin/bash
# Install software update as regular user with privilege escalation
sudo apt-get update
sudo apt-get upgrade -y
echo "System update complete"

示例 2:运行 Web 服务器任务

# Stop web server as specific service user
sudo -u www-data /opt/webapp/stop.sh
# Check web server permissions as www-data
sudo -u www-data ls -la /var/www/html

示例 3:运行数据库维护

# Backup database as specific user
sudo -u mysql mysqldump -u root -p database_name > backup.sql
# Run database optimization
sudo -u mysql mysql -u root -p -e "OPTIMIZE TABLE table_name;"

示例 4:批量用户管理

#!/bin/bash
# Create multiple users
for user in user1 user2 user3; do
sudo useradd -m -s /bin/bash "$user"
echo "Please set password for $user:"
sudo passwd "$user"
done
# Add all to sudo group
for user in user1 user2 user3; do
sudo usermod -aG sudo "$user"
done

安全注意事项

密码安全

Root 密码:妥善保管;切勿与不可信的人分享

Sudo 配置:委派特定权限,而不是完整的 root 访问权限

密码老化:强制定期更改密码

# Configure password aging
sudo chage -M 90 -m 1 -W 7 username
# Forces change every 90 days, minimum 1 day between changes, 7-day warning

审计与日志记录

All sudo commands are logged:

sudo grep COMMAND /var/log/auth.log

 

View detailed sudo history:

sudo journalctl _COMM=sudo

Restricting 权限提升

Configure sudoers file safely:

sudo visudo # Always use visudo for editing sudoers

 

sudoers 配置示例 (limiting what john can run):

john ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
john ALL=(ALL) /usr/bin/apt-get

会话超时

# Set sudo timeout
sudo -v # Extend timeout
sudo -k # Invalidate sudo credentials

为什么远程基础设施里要用切换用户

RDP 和 SSH 基础设施通常需要:

  • 具有不同权限级别的多个管理用户

  • 用于自动化进程的服务账户

  • 用于合规性的审计追踪(sudo 日志)

  • 管理任务的权限提升

通过 RDP.Monster 管理基础设施

Managing Ubuntu systems remotely requires robust, secure access:

用于命令执行的 SSH 访问

  • 远程执行用户切换命令

  • 通过脚本进行自动化管理

  • 完全控制用户管理

多用户账户支持

  • 创建管理用户

  • 适当地委派权限

  • 维护审计追踪

安全的远程管理

  • 所有用户切换操作的 SSH 加密

  • 用于程序化访问的基于密钥的身份验证

  • 全面的日志记录和监控

通过 RDP.Monster 部署具有安全用户管理功能的 Ubuntu VPS 基础设施

 

结语

用户切换和权限提升是 Ubuntu 管理的基本技能。理解 su、sudo 和密码管理之间的差异,能够通过适当的权限委派和审计追踪,在保持安全的同时有效地进行多用户系统管理。

现代 Ubuntu 最佳实践强烈推荐使用 sudo 而不是 su 进行权限提升,实现责任制和全面日志记录,同时最大限度地减少 root 密码共享。适当配置 sudoers 并委派特定权限可在可用性和访问之间提供出色的安全平衡 control.

Managing complex Ubuntu infrastructure requiring sophisticated user management and secure administrative access? RDP.Monster provides SSH-based Ubuntu VPS solutions enabling seamless user management and privilege escalation across your infrastructure. Deploy professionally-managed Ubuntu systems today.

强大的 Ubuntu VPS 主机

通过我们的 Linux VPS 享受完整控制和极致性能。非常适合托管应用、管理服务器和优化工作流程。

Dedicated Servers

高性能独立服务器

需要最高级别的控制和性能?我们的独立服务器为高负载任务带来无与伦比的性能。

常见问题

应该用 su 还是 sudo?

在现代系统中更推荐使用 sudo。

它能落实问责、要求每人使用自己的密码,并提供完整的审计记录。

我的 su 命令为什么用不了?

可能是因为你不知道目标用户的密码。

Try sudo -u username instead if you have sudo privileges.

可以不用密码就切换用户吗?

可以,借助 sudo:在 sudoers 中配置 NOPASSWD 即可。

对于 su 来说,始终需要目标用户的密码。

su - 和 su --login 有什么区别?

二者完全等价,都会启动加载完整环境的登录 shell。

sudo 权限会保留多久?

默认是 15 分钟,可在 sudoers 配置中自定义。

我能以其他用户身份执行多条命令吗?

可以:sudo bash -c "command1 && command2 && command3"

怎么查看自己拥有的 sudo 权限?

运行 sudo -l 即可查看被授权的命令。

切换用户后我的 PATH 为什么变了?

使用 su - 可以加载目标用户的完整环境,包括正确的 PATH。

Register to our reseller program

Your informations

If you have any question, contact us by clicking here !
Name(Required)
Enter your email address, you must have an account on manager.rdp.monster !

Your company

Enter your website address if you have one
Quickly explain how you're going to sell services to your customers. For example, talk to people on forums.

我们使用 cookie !

我们使用 cookie 来改善您的浏览体验、提供个性化的广告或内容,并分析我们的流量。点击「接受」即表示您同意我们使用 cookie。