sudo X和以root身份运行X之间有什么区别?

我的问题是关于我想要理解的一个具体观察。我刚刚尝试在R中安装rJava包,但失败了,尽管我按照手册上建议的方式链接1进行了安装。
sudo R CMD javareconf

然后我遇到了这个评论

使用sudo和以root身份运行并不完全相同。- Jon7

绝望的时候,我尝试了一下:
sudo su
R CMD javareconf

而令我惊讶的是,我突然可以安装那个软件包。
抱歉介绍有点冗长,但我想给你提供一个背景,以防止像这里这样的回答。这个问题并不特指所描述的观察结果,而是针对Ubuntu上的那些“东西”一般而言。
我的问题是:这怎么可能呢?sudo X和以root身份运行X之间有什么区别?
2个回答

这个问题有点太宽泛了,解释起来可能会以你在问题中提供的链接结尾,但我会尽量详细一些,也许能给你一些答案。
"sudo"(代表"substitute user do")允许系统管理员委派权限,使某些用户(或用户组)能够以"root"或其他用户的身份运行一些(或全部)命令,并提供命令及其参数的审计记录。
"Sudo"是作为"root"运行命令的替代方法。与启动一个允许所有后续命令具有"root"访问权限的"root" shell不同,"sudo"只授予单个命令的临时特权提升。通过仅在需要时启用"root"权限,"sudo"的使用减少了因输入错误或调用命令中的错误而破坏系统的可能性。"Sudo"还可以用于以其他用户身份运行命令;此外,"sudo"会记录所有命令和失败的访问尝试,以进行安全审计。

关于Root Sudo的更详细信息可以在Official Ubuntu Documentation上找到。


谢谢!这与我描述的情况有什么关系?在X之后,sudo不能执行所有操作吗? - Raffael
如我在回答中所提到的,“root允许所有后续命令获得root权限,而sudo则是临时授权提升”。你试图执行的命令需要比sudo(管理员)更高的权限,它需要root(所有者)。我这样解释是因为你可能正在对系统标准进行更改。 - JoKeR

这个教程是从原始主页中提取的:

IMG:   Sudo简介

Sudo(su "do")允许系统管理员授予某些用户(或用户组)以root身份运行一些(或全部)命令的权限,并记录所有命令和参数。Sudo是基于每个命令的操作,它不是shell的替代品。其特点包括:

  • 能够基于每个主机限制用户可以运行的命令。
  • Sudo会详细记录每个命令的日志,提供清晰的审计追踪,以确定是谁做了什么。当与系统日志守护程序syslogd一起使用时,sudo可以将所有命令记录到中央主机(以及本地主机)。在CU,所有管理员都使用sudo代替root shell,以利用此日志记录功能。
  • Sudo使用时间戳文件来实现“票据”系统。当用户调用sudo并输入密码时,他们将获得一个5分钟的票据(此超时时间可以在编译时配置)。每个后续的sudo命令都会更新票据,延长5分钟。这样可以避免在其他人可以物理接触到您的键盘的情况下保留root shell的问题。用户还可以轻松地删除他们的票据文件,这对于放置在.logout文件中非常有用。
  • Sudo的配置文件sudoers文件的设置方式使得同一个sudoers文件可以在多台机器上使用。这样可以实现集中管理,同时保持根据每个主机定义用户权限的灵活性。请参阅下面的示例sudoers文件,了解真实世界的示例。

Root

UNIX root账户是全权负责的。

在计算机领域中,超级用户是用于系统管理的特殊用户账户。根据操作系统(OS)的不同,该账户的实际名称可能是root、administrator、admin或supervisor。在某些情况下,账户的实际名称并不是决定性因素;例如,在类Unix系统中,具有用户标识符(UID)为零的用户就是超级用户,而与该账户的名称无关。在实施基于角色的安全模型的系统中,任何具有超级用户角色(或其同义词)的用户都可以执行超级用户账户的所有操作。最小权限原则建议大多数用户和应用程序在普通账户下运行以完成工作,因为超级用户账户能够进行无限制、潜在有害的系统范围更改。(a) (a)来源:https://en.wikipedia.org/wiki/Superuser