Ubuntu 中 root 用户和 sudo 命令有什么区别?什么时候应该使用 root?

Ubuntu 中 root 用户和 sudo 命令有什么区别?什么时候应该使用 root?

在 Ubuntu 命令提示符下,您可以执行sudo -i并输入root密码以 身份登录root。我的问题是,在 ubuntu (或 Linux) 中,什么时候必须以此身份登录root?这只是为了避免输入需要特权的sudo命令吗?root

答案1

在 Ubuntu (或 Linux) 中,何时必须以 root 身份登录?这只是为了避免输入sudo需要 root 权限的命令吗?

我对你的问题的解释是:

  • 是否存在必须使用“sudo -i因为sudo还不够”的情况?
  • 或者sudo -i只是为了避免sudo一遍又一遍地打字,但没有其他好处?

的主要优点sudo -i是它启动一个 shell。然后您可以以 root 身份使用管道、重定向等。请考虑:

sudo dd if=/dev/sdc conv=noerror bs=32M | pv | gzip -c > /root/image.raw.gz

在这种情况下,仅sudo影响dd。当系统提示您输入密码时,pv已经在运行,您的显示变得混乱。同时,您的 shell 告诉您,/root/image.raw.gz尽管使用了 ,但您无权访问sudo;这是因为重定向 ( >) 是由没有 运行的 shell 执行的sudo

有几种技术可以规避这些障碍。以下列表可能并不详尽:

  1. 提前运行sudo true并输入您的密码。sudo除非另有配置,否则几分钟后不会再提示您。
  2. 使用sudo tee方式如下:

    sudo dd if=/dev/sdc conv=noerror bs=32M | pv | gzip -c | sudo tee /root/image.raw.gz > /dev/null
    
  3. 或者在额外的 shell 中运行该命令:

    sudo bash -c 'dd if=/dev/sdc conv=noerror bs=32M | pv | gzip -c > /root/image.raw.gz'
    
  4. 或者运行这个额外的 shell 并在其中工作:sudo bash或者sudo -i(尽管两个命令并不完全相同)。

所以你实际上并不需要-i。它可能不存在,但你仍然可以以 root 身份执行操作。


另一个优点可能是sudo -i运行一个 shell,该 shell 获取 root 的文件(如.profile),而sudo bashsudo bash -l使用调用用户的文件。我可以想象有人可能为 root 定义了一个环境,专门用于执行管理任务。在这种情况下sudo -i很有用。


其他答案涵盖了以 root 权限运行的 shell 中的危险。我不会重复它们。

答案2

除非您有充分的理由root定期使用(我想不出一个),否则sudo这是更好的选择,可以拯救您自己并为您的操作系统安装提供基本的系统强化。

root是 Unix/Linux 系统的一个历史遗迹。许多系统都将root用户设置为默认用户(例如 RedHat 和 CentOS),但据我所知,Ubuntu 默认强制您使用非用户root来执行sudo/root需要的操作。sudo诞生于需要防止root成为这种已知且易受攻击的目标用户,并root以受控和集中的方式将权限委托给系统上的其他用户。如“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 文件,了解真实示例。

从实际角度来看,使用sudo会迫使最终用户思考自己在做什么。如果我简单地输入以下命令,rm -rf *root命令将起作用……但 99% 的时间里,任何人在 Unix/Linux 系统上所做的任何事情都不需要root权限。因此,一直拥有无限的权力,root充其量是愚蠢的,最坏的情况是危险的。

此外,由于root是已知登录名,许多系统管理员默认禁用该root帐户登录并将其锁定,并通过sudo另一个用户分配同等权限。不管您信不信,简单地禁用root是为系统提供基本安全以抵御 SSH 登录尝试攻击的最快、最简单和最好的方法之一。只需创建一个新用户(类似于cooldude),然后授予该用户sudo权限,您的系统就已经稳固了。

原因是,无数“脚本小子”和现成的系统渗透工具都root以开箱即用的(看似)无休止的 SSH 登录尝试为目标。这些现成的系统渗透工具充其量只是通用且无脑的工具。您root使用简单的密码保持活动状态,然后等待问题发生。但只需将管理员权限授予某人,cooldude所有这些脚本现在都无效了。是的,当然,如果有人知道您的root等同权限,cooldude他们就可以以此为目标……但 99.9999% 的时间里,攻击者不会雄心勃勃地深入研究。

切换时root风险自负。我从事专业的 Linux 系统管理工作,root过去 20 年来从未触及过初始安装阶段之后的内容。

答案3

除非有非常特殊的原因,否则不应以 root 用户身份登录。以 root 用户身份登录时,您最坏的情况是会破坏整个系统。某些 UNIX/Linux 系统默认拒绝 root 用户登录权限以防止发生这种情况。强制用户以标准用户身份登录并运行sudo提升的命令是一种安全措施。

我确信 SU 和其他 IT 相关 StackExchange 网站上的许多人(包括我)都犯过以 root 身份(或 Windows 上的管理员)登录的错误,然后忘记了。然后他们做了一些他们非常很多事不想做。

答案4

sudo -i 只是以 root 身份获取交互式会话的一种方式。(Ubuntu 还提供许多其他方式,包括 sudo /bin/bash,以及启用 root 密码并以 root 身份登录)。

这一切背后的想法是“最小权限”。对于大多数日常事务(网页浏览、照片编辑、办公文档等),您无需进入系统内部。以普通用户身份运行可防止您在系统上做一些愚蠢的事情,这是最佳做法。

有时您需要执行需要更多权限的操作 - 例如格式化磁盘或安装用户共享的软件 - 在这种情况下,您需要使用 root。如果是单个命令,使用 sudo 就足够了,但通常有许多相关任务要做,在这种情况下使用 sudo 很快就会让人恼火。

将管理使用与常规用户访问分开可以防止恶意程序造成严重破坏(例如清除整个系统),这是一个很好的预防措施,但当多个用户共享一个设备时,它才真正发挥作用。

sudo / root 访问权限类似于 Windows 机器上的“以管理员身份运行” - 并提供类似的好处和挫折。我确实注意到 sudo 不仅可用于获取 root 访问权限,还可用于获取其他非 root 用户的访问权限。还有控制和权限(通常在 /etc/sudoers 或 /etc/sudoers.d 中设置),可以允许某些用户仅以提升的权限运行某些东西和/或允许某些用户无需额外密码即可访问。

相关内容