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

sbp*_*sbp 1 linux ubuntu

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

Gia*_*968 5

除非你有一个很好的理由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 年里从未接触过初始安装阶段。


Kam*_*ski 5

你什么时候必须以这个 root 身份登录 Ubuntu(或 Linux)?仅仅是为了避免输入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
Run Code Online (Sandbox Code Playgroud)

在这种情况下只sudo影响dd。当您被提示输入密码时,pv它已经在运行,您的显示变得混乱。同时你的shell告诉你你无权访问/root/image.raw.gz,尽管使用了sudo; 这是因为重定向 ( >) 是由没有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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 或者在额外的 shell 中运行命令:

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

所以你真的不需要-i. 它可能不存在,您仍然可以以 root 身份执行操作。


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


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