su 与 sudo 的区别
这两个操作并不是单纯的切换成 root 用户,而是能够切换成任何一个其他用户。
- su(Switch User): 切换用户的意思,他可以切换成任何其他用户,切换时需要输入目标用户(target user)的密码,切换成功之后会开启一个新的 shell 实例(可以当作是新开了一个命令行窗口),因此你如果要退回到原来的用户,你需要
exit
而不是logout
(类似于关闭当前的命令行窗口)。 - sudo: 官方定义是
execute a command as another user
,也就是说并不是要真正登录成另一个用户,而是以另一个用户的身份去执行命令,执行该命令之后需要输入当前用户的密码。前面说到sudo
是请求授权,那么是不是要授权该用户是在/etc/sudoers
中设置,如果要设置该文件,只需要使用visudo
即可。比如:root ALL=(ALL) ALL
表示 root 拥有全部权限。
打个比方,假设有两个用户 A 和 B,用户 B 输入 su - A
意味着是让用户 A 自己做事情,因此需要输入用户 A 的密码;sudo -i -u A
意味着用户 A 已经同意用户 B 以 A 的名义做事情,因此这条指令需要输入用户 B 的密码只是为了确认是用户 B 输入了这条命令即可。
因此 sudo
和 su
最大的区别在于前者是借着某人的名义做事(do sth as sb),而后者是真的人在做事(become sb)。
最后给张有趣配图说明 sudo
的作用:
su 的使用
su
: 登录 root 用户su usr1
: 登录 usr1 用户
sudo 的使用
sudo -i
: 以 root 用户的名义登录sudo -i -u usr1
:以 usr1 用户的名义登录