在 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
。
有几种技术可以规避这些障碍。以下列表可能并不详尽:
- 提前运行
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
或者在额外的 shell 中运行该命令:
sudo bash -c 'dd if=/dev/sdc conv=noerror bs=32M | pv | gzip -c > /root/image.raw.gz'
或者运行这个额外的 shell 并在其中工作:
sudo bash
或者sudo -i
(尽管两个命令并不完全相同)。
所以你实际上并不需要-i
。它可能不存在,但你仍然可以以 root 身份执行操作。
另一个优点可能是sudo -i
运行一个 shell,该 shell 获取 root 的文件(如.profile
),而sudo bash
或sudo 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 中设置),可以允许某些用户仅以提升的权限运行某些东西和/或允许某些用户无需额外密码即可访问。