新手必看!Linux 中 sudo 和 su 的区别,看完就会用
在学习 Linux 的时候需要经常在普通用户与 root 之间反复切换,在拥有 root 权限时可以干很多普通用户干不了的活,那怎么在两者之间相互切换呢?问题来了,那在什么情况下使用 sudo 和 su 呢?使用起来两者又有什么不一样?如果想弄清楚 Linux 系统中 sudo 和 su 这俩核心命令的区别,以及它们应该在什么场景下使用,那就跟着小编一起往下看,希望小编的经验能给小伙伴们带来收获~在讲它俩有什么区别之前前,要先弄懂它俩的核心作用:- su:英文全称是switch user(切换用户),作用是切换到另一个用户身份,它默认切换到root(也就是超级用户),切换后会完全拥有该用户的所有权限。
- sudo:英文全称是superuser do(以超级用户执行),作用是临时以高权限(默认 root)执行单个或者多个命令,不会完全切换用户身份。
- 认证方式:需要输入目标用户的密码,默认是root的
- 权限范围:切换之后,可以获得目标用户的全部权限,直到退出
- 安全风险:知道 root 密码就能完全控制系统,这样太危险
- 审计追踪:你的所有操作都记在 root 名下,无法追溯是谁干的
- 环境变量:切换后默认继承原来用户的环境,只有加 su -才加载目标用户环境
- 认证方式:需要输入当前用户自己的密码,但有个前提条件,当前用户在sudoers配置中
- 权限范围:只能为指定的命令赋予高权限,默认单次有效,但是时长可配置
- 安全风险:可以精细的控制哪些用户能执行哪些命令,风险比较低
- 审计追踪:会记录哪个用户执行了哪些 sudo 命令,出问题可以追踪
- 环境变量:默认保留当前用户环境,加sudo -i可加载 root 环境
- 配置灵活性:它的灵活性相当高,可通过/etc/sudoers配置用户权限
- 用 su 切换到 root,必须知道 root 的密码 —— 这意味着任何人拿到 root 密码,都能完全掌控系统,风险极高(比如多人共用 root 密码,出问题无法追责)。
- 用 sudo 执行高权限命令,只需要输入自己的密码,且管理员可以通过 /etc/sudoers 限制你只能执行特定命令(比如只允许你用 sudo apt update,但不能删文件),权限可精准管控。
# === su的用法 ===su # 切换到root,但保留当前用户的环境变量(不推荐)su - # 切换到root并加载root的完整环境(推荐,等同于登录root)su - dachongzi # 切换到普通用户dachongzi(需要dachongzi的密码)exit # 退出su切换的用户,回到原用户# === sudo的用法 ===sudo ls /root # 临时以root权限查看/root目录(输入自己的密码)sudo -i # 切换到root的shell(输入自己的密码,替代su -,更安全)sudo -u dachongzi mkdir /home/dachongzi/test # 以dachongzi身份创建目录(需配置sudoers)sudo -l # 查看当前用户有哪些sudo权限
Linux 系统会把sudo的所有操作记录在/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(CentOS/RHEL)中,比如:这个截图上能清晰看到"perfect 用户在TTY=pts/0终端上执行过/usr/bin/cat auth.log",而su的操作只会记为 root 的行为,无法追溯是谁操作的。- 日常执行单个高权限命令,比如安装软件sudo apt install nginx、修改系统配置;
- 临时需要长时间以 root 身份操作(但更推荐sudo -i替代);
- 切换到普通用户测试权限(如su - dachongzi)。
这里需要注意下:Ubuntu 等系统默认禁用 root 密码(无法直接 su),必须用 sudo -i 或 sudo passwd root 设置 root 密码后才能用 su,这也是为了强制使用更安全的 sudo。1、su 是切换用户身份(需目标用户密码),sudo是临时执行高权限命令(需自己密码,权限可管控);2、sudo 远优于 su,能精准控权、审计溯源,是生产环境的首选;3、日常优先用 sudo + 单个命令,如需临时 root shell 用 sudo -i,尽量避免直接 su。