在 Ubuntu 命令提示符下,您可以sudo -i
输入root
密码以root
. 我的问题是,你什么时候必须root
在 ubuntu(或 Linux)中以这个身份登录?仅仅是为了避免输入sudo
需要root
特权的命令吗?
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 年里从未接触过初始安装阶段。
你什么时候必须以这个 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
.
有几种技术可以绕过这些障碍。以下列表可能并非详尽无遗:
sudo true
预先运行并输入您的密码。您sudo
不会在几分钟内再次提示您,除非另有配置。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)或者在额外的 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)或者运行这个额外的 shell 并在其中工作:sudo bash
或者sudo -i
(尽管这两个命令并不完全等效)。
所以你真的不需要-i
. 它可能不存在,您仍然可以以 root 身份执行操作。
另一个优点可能是在sudo -i
运行或使用调用用户的文件的.profile
同时运行一个可获取根文件(如)的 shell 。我可以想象一个人可能有一个为 root 定义的环境,专门用于执行管理任务。在这种情况下很有用。sudo bash
sudo bash -l
sudo -i
其他答案涵盖了在以 root 权限运行的 shell 中工作的危险。我不会重复它们。