愚蠢的地球人

深入理解sudo与su之间的区别

在Linux下对很多文件进行修改都需要有root(管理员)权限,但是很多人都不清楚sudo和su命令的区别,网上查了很多资料,归纳了一下,大致如下:


两个命令的最大区别是 sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。
另外一个区别是其默认行为,sudo 命令只允许使用提升的权限运行单个命令,而 su 命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。

su 命令
su 命令的主要作用是让你可以在已登录的会话中切换到另外一个用户,这个工具可以让你在不登出当前用户的情况下登录为另外一个用户。
su 命令经常被用于切换到超级用户或 root 用户,也可以用于切换到任意非 root 用户。 su 的默认用户是 root,所以只需在终端直接输入 su 即可切换到 root 用户,su 命令要求输入的密码是 root 用户的密码,在输入正确的密码之后,su 命令会在终端的当前会话中打开一个子会话。
还有一种方法可以切换到 root 用户:运行 su - root
那么,su 命令与 su - 命令之间有什么区别呢?前者在切换到 root 用户之后仍然保持之前用户的环境,而后者则是创建一个新的环境(由 root 用户 ~/.bashrc 文件所设置的环境),相当于使用 root 用户正常登录。

sudo 命令
sudo 命令是用来获取临时的 root 权限,不过有时间限制,Ubuntu默认为一次时长15分钟。提示输入密码是当前用户的密码,而不是超级账户的密码。要求执行该命令的用户必须在 sudoers 中才可以。
sudo 的配置文件是 sudoers 文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在 /etc/sudoers,属性必须为0440。

sudo -i 和 sudo su 命令没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。
sudo -i 与 sudo - root、sudo -i root、sudo -、sudo root效果相同。
-i 是指更改 shell 环境参量为目标用户的,如果不指定用户则默认为 root。
sudo -i 运行后 PWD=/root
sudo su 运行后 PWD=/home/用户名(当前用户主目录)

sudo vs. su
两个命令的最大区别是:sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。
很明显,就安全而言,sudo 命令更好。例如,考虑到需要 root 访问权限的多用户使用的计算机。在这种情况下,使用 su 意味着需要与其他用户共享 root 用户密码,这显然不是一种好习惯。
而使用 sudo 命令就不一样了,你可以很好的处理以上的两种情况。鉴于 sudo 命令要求输入的是其他用户自己的密码,所以,不需要共享 root 密码。同时,想要阻止特定用户访问 root 权限,只需要调整 sudoers 文件中的相应配置即可。
其次,两个命令之间的另外一个区别是其默认行为。sudo 命令只允许使用提升的权限运行单个命令,而 su命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。 因此,su 命令的默认行为是有风险的,因为用户很有可能会忘记他们正在以 root 用户身份进行工作,于是,无意中做出了一些不可恢复的更改(例如:对错误的目录运行 rm -rf 命令!)。

尽管 sudo 命令是以目标用户(默认情况下是 root 用户)的身份执行命令,但是它们会使用 sudoer 所配置的用户名来记录是谁执行命令。而 su 命令是无法直接跟踪记录用户切换到 root 用户之后执行了什么操作。

sudo 命令比 su 命令灵活很多,因为你甚至可以限制 sudo 用户可以访问哪些命令。换句话说,用户通过 sudo 命令只能访问他们工作需要的命令。而 su 命令让用户有权限做任何事情。 大概是因为使用 su 命令或直接以 root 用户身份登录有风险,所以,一些 Linux 发行版(如 Ubuntu)默认禁用 root 用户帐户。鼓励用户在需要 root 权限时使用 sudo 命令。如果你想在系统中启用 root 用户帐户(强烈反对,因为你可以使用 sudo 命令或 sudo su 命令),你必须手动设置 root 用户密码,可以使用以下命令:
sudo passwd root

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

相关推荐

友情链接

网站分类

最新留言

最近发表