sudo和su的核心定义
sudo是linux系统中允许普通用户以其他用户(默认是root用户)的身份执行特定命令的工具,它的权限控制基于/etc/sudoers配置文件,只有被配置允许的用户才能使用sudo执行对应命令。

su是switch user的缩写,作用是切换当前登录用户到指定的其他用户,切换后获得目标用户的完整权限,默认切换到root用户,需要输入目标用户的密码才能切换成功。
两者的核心差异对比
权限获取方式不同
使用sudo执行命令时,默认需要输入当前普通用户的密码,验证通过后可以临时以root权限执行单条命令,执行完成后权限自动回归普通用户,不需要切换到root身份。
使用su切换用户时,需要输入目标用户的密码,比如切换到root就需要输入root的密码,切换成功后当前会话就拥有目标用户的全部权限,后续所有操作都以目标用户身份执行,直到退出切换状态。
权限控制粒度不同
sudo的权限控制非常灵活,管理员可以在/etc/sudoers中配置允许用户执行的特定命令、允许执行命令的主机、允许以哪些用户身份执行命令,甚至限制命令的执行参数,实现精细化的权限管理。
su没有精细化的权限控制,只要知道目标用户密码,切换成功后就可以执行该用户有权限的所有操作,权限控制粒度很粗,无法限制切换后的具体操作范围。
安全特性不同
sudo使用普通用户自己的密码验证,不需要暴露root密码,降低了root密码泄露的风险,同时sudo会记录所有执行的命令到日志中,方便后续审计操作记录。
su需要直接使用目标用户的密码,如果要切换到root就需要共享root密码,多个用户使用root密码切换会带来密码泄露风险,且默认不会详细记录切换后的操作内容。
使用场景对比
- 如果只是临时需要执行一条root权限的命令,比如安装软件、修改系统配置文件,优先使用sudo,避免直接切换到root身份操作,降低误操作风险。
- 如果需要连续执行多条root权限的操作,或者需要以root身份运行交互式shell,使用su切换到root会更方便,减少重复输入密码的操作。
- 如果是多用户协作的服务器环境,管理员应该优先配置sudo权限,避免给普通用户分配root密码,提升系统的整体安全性。
常见使用示例
sudo使用示例
普通用户执行需要root权限的apt安装命令:
# 以root权限安装nginx sudo apt install nginx # 查看当前用户被允许的sudo命令范围 sudo -l
su使用示例
切换到root用户:
# 切换到root用户,需要输入root密码 su # 切换到root用户并加载root的环境变量 su - # 切换回普通用户 exit
常见问题说明
为什么普通用户执行sudo提示权限不足?这是因为当前用户没有被添加到/etc/sudoers配置中,需要root用户编辑该文件,添加允许当前用户执行sudo的规则,配置格式为用户名 ALL=(ALL:ALL) ALL,表示允许该用户在所有主机上以所有用户身份执行所有命令。
su切换用户后如何退回原用户?直接执行exit命令或者按Ctrl+D组合键即可退出当前切换的用户身份,回到原来的用户会话。