linux su和sudo命令的区别

如题所述

1、关于密码
两个命令的最大区别是:sudo命令需要输入当前用户的密码,su命令需要输入root用户的密码。很明显,就安全而言,sudo命令更好。例如,考虑到需要root访问权限的多用户使用的主机,使用su命令意味着需要与其他用户共享root用户密码,这显然会降低安全性。
此外,如果要撤销特定用户的超级用户/root用户的访问权限,唯一的办法就是更改root密码,然后再告知所有其他用户新的root密码。
而使用sudo命令就可以很好地处理以上的两种情况。鉴于sudo命令要求输入的是其他用户自己的密码,所以,不需要共享root密码。同时,想要阻止特定用户访问root权限,只需要调整sudoers文件的相应配置即可。
2、默认行为
两个命令之间的另外一个区别是其默认行为。sudo命令只允许使用提升的权限运行单个命令。而su命令会启动一个新的shell,同时允许使用root权限运行尽可能多的命令,直到明确退出登录。
因此,su命令的默认行为是有风险的,因为用户有可能会忘记他们正在以root用户身份进行工作,于是,无意中做出了一些不可恢复的更改。
3、日志记录
尽管sudo命令是以目标用户的身份执行命令,但是它们会使用sudoer所配置的用户名来记录是谁执行命令。而su命令是无法直接跟踪记录用户切换到root用户之后执行了什么操作。
4、灵活性
sudo命令比su命令灵活很多,可以限制sudo用户可以访问哪些命令,用户通过sudo命令只能访问他们工作需要的命令,而su命令让用户有权限做任何事情。
5、sudo su
大概是因为使用su命令或直接以root用户身份登录有风险,所以一些Linux发行版默认禁用root用户账户。然而还是可以成功执行su命令,而不用输入root用户的密码,运行以下命令:sudo
su
由于使用sudo运行命令,只需要输入当前用户的密码。所以,一旦完成操作,su命令将会以root用户身份运行,这意味着它不会再要求输入任何密码。
如果想在系统中启用root用户账户,必须手动设置root用户密码,可以使用以下命令:sudo passwd root。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-06-28

su

su的全称并不是super user,而是switch user,是不是就突然明白了?是切换用户的意思。su的一般使用方法是su或者su -,两种方法虽然只差了1个字符,但也是有比较大的差异的。

加入了-参数,就是login-shell的方式,也就是说切换到另一个用户之后,当前的shell会加载对应的环境变量和各种设置;

如果没有加入-参数,就是non-login-shell的方式,也就是说当前的shell还是加载切换之前的那个用户的环境变量以及各种设置。

如果不想因为切换到另一个用户导致自己在当前用户下的设置不可用,那么就可以用non-login-shell的方式;如果切换用户后,需要用到该用户的各种环境变量,那么使用login-shell方式即可。

sudo

全称为super user do,即以超级用户的方式执行命令,这里的超级用户指的就是root用户,我们在Linux中有时会遇到permission
denied的情况,如以ubuntu用户的身份查看/etc/shadow的内容,因为它是只有root用户才能查看的,这个时候就可以使用sudo。

两者的区别在于:

使用su - 提供root账号的密码,可以切换到root用户;

使用sudo su -,提供当前用户的密码,也可以切换到root用户。

如果我们的Linux系统有很多用户需要使用的话,前者要求所有用户都知道root用户的密码,显然是非常危险的;后者是不需要暴露root账户密码的,用户只需要输入自己的账户密码就可以。

第2个回答  2016-07-23
su是切换用户,切换时需要目标用户的密码。sudo是以root身份执行后续的命令,这个用户需要有sudo的权限,通过编辑/etc/sudoers这个文件管理权限,sudo时,需要输入当前用户(而非root用户)的密码进行验证,验证完一次后,五分钟内可以免认证。另外,单从以超级用户身份执行命令来看,su切换完用户可以一直处于root身份,执行多条命令时更为方便。sudo则是执行少数命令,并且需要马上切换回当前用户时更为方便。本回答被提问者采纳
相似回答