默认情况下,root 密码是禁用的,因此没有人可以直接登录 root 帐户。
但是,由于我是该组sudo su
的成员(据我所知,这是唯一必要条件),我仍然可以通过执行并输入自己的密码以另一种方式登录到 root 账户。sudo
/etc/group
这是否被认为是一种不好的做法,使用 来“后门”进入 root 帐户sudo su
?是否应该避免这种情况,而应改为使用sudo command
?
答案1
您的问题更多的是一种观点,而不是别的什么。
我认为最佳做法是每次都使用 sudo,因为 sudo 会记录您的命令,而 sudo su 则不会(一旦您是 root 用户)。
如果这太繁琐,我建议sudo -i
更好地隔离用户和根帐户(环境变量)
看https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
答案2
这是良好做法以避免以 root 身份执行不必要的操作。 sudo
通过允许您以 root 身份运行单个命令来实现这一点无需以 root 身份登录并且没有需要交互式 root shell,用于执行您原本无法运行 shell 执行的任务。但sudo su
不是“后门“,它只是一种不太优雅的方式来完成sudo
设计用来让你做的事情sudo -s
。相似地,sudo -i
是实现sudo su -
你所得到的更优雅的方式:一个模拟的初始登录 shell其环境类似于您在命令行上以 root 身份登录时所获得的环境。请参阅man sudo
。
因此,归根结底什么时候你选择运行交互式 root shell,并且如何您选择使用它。如果您使用它来避免不得不费心决定是否以 root 身份运行命令,那就不好了。如果您发现在其中运行的许多命令不需要 root 权限,那么您应该考虑在非特权 shell 中运行这些命令,或者重新考虑是否真的需要 root shell。但使用 root shell 并没有根本性的错误。
无论是否打开 root shell,都可能sudo
以危害您安全的方式使用。例如,请不要使用 运行 Firefox 或 LibreOffice sudo
。运行 root shell 的潜在问题主要是您可能最终会不必要地以 root 身份执行操作,并且在执行过程中可能会犯下比 root 更严重的错误。因此,仅仅决定“我只要不运行 root shell 就可以完全避免这个问题”是不够的。避免运行 root shell 是相当合理的,但这种一刀切的选择仍然不能消除您在使用 时需要注意的需要。做使用sudo
。
这Ubuntu 帮助 wiki 页面关于sudo
列表使用九大好处sudo
。大多数但不是全部这些好处完全适用于使用sudo
打开 shell,只要你对在该 shell 中执行的操作和对使用 的单个命令的操作一样小心谨慎sudo
。以下是例外——使用sudo
你没有充分享受当你使用它来打开 root shell 时:
- sudo 添加运行命令的日志条目(在 中
/var/log/auth.log
)。如果搞砸了,您可以返回并查看运行了哪些命令。
也可以看看bodhi.zazen 的回答. 你用来打开该 shell 的一个命令仍会被记录auth.log
,但你运行的命令从但事实并非如此。
- 身份验证会在短暂的时间后自动过期(可以设置为所需的最短时间或 0);因此,如果您在使用 sudo 以 root 身份运行命令后离开终端,则不会无限期地打开 root 终端。
虽然您应该始终注意您(或其他人)在具有活动sudo
时间戳时可能运行哪些命令,但使用交互式 root shell 会提升这种需要,因为在您退出 shell 之前在其中运行的任何命令都将以 root 身份运行,而不会提示您输入密码。
此外,其中一个好处是轻微地使用 root shell 时会减弱,但仍然基本完好:
- 它默认避免了“我可以做任何事情”的交互式登录。在发生重大更改之前,系统会提示您输入密码,这应该让您考虑所做之事的后果。
如果您假装自己是 root,并且在使用此 root shell 时没有其他用户帐户,那么您当然会完全失去此好处。但是,当您运行sudo -s
、sudo -i
或其他为您提供 shell 的命令时,您已经处于非 root 登录状态(除非您从恢复模式执行此操作或已启用 root 登录),因此这种诱惑更容易避免。
也就是说,如果你以 root 身份登录,你很可能会在预期不需要做只有 root 才能做的事情。使用 root shell 启动你自己,就没那么容易不必要地使用它,因为对于几个命令来说,它实际上更轻松使用sudo
-- 单独运行它们,因为您已经以自己的身份登录。
而且还有一个好处,sudo
人们有时认为当运行 root shell 时,这个好处就会消失但他们这样想是完全错误的:
- sudo 可以设置更细粒度的安全策略。
运行 root shell 根本不会降低这一好处,因为只有配置为可以执行任何操作的用户才能执行此操作,因此不允许您执行任何以前设计上无法执行的操作。(这是另一个原因,比仅仅存在-s
和-i
选项更深刻,这sudo su
与后门根本不相似。)
从技术上来说,它可以还可以由您配置sudoers
为“仅”允许运行 root shell 而不允许其他任何操作的用户完成!但那将是一个非常愚蠢的配置,因为如果用户可以以 root 身份运行 shell,他们就可以以 root 身份执行任何操作。(您必须采取特定行动才能为您打算实际限制的用户创建这种愚蠢而危险的情况。)有许多命令出乎意料地危险,允许任何不完全信任的用户以 root 身份运行 - 不仅仅是 shell 和文本编辑器。任何将在用户指定的位置生成输出文件的命令都可用于执行特权升级攻击如果它可以由您不打算已经能够以 root 身份执行他们选择的任何事情的用户运行。
如果您选择以 root 身份运行交互式 shell,请务必小心。考虑一下这是否真的对您有帮助,以及您是否最终会以 root 身份执行比您预期更多的操作。请记住,即使在只有一个人类用户的系统上,即使您可以做坏事,例如删除所有个人文件没有以sudo
root 身份执行操作不仅会让您以更多方式损害您的 Ubuntu 系统。如果您以 root 身份执行一些不需要以 root 身份执行的操作,那么您将更难推断可能出现(或已经发生)的危害。
尽管如此,还是有很多常见的备择方案使用 root shell 的危险性与此相同甚至更大。例如,你可能运行一个没有 的命令sudo
,但它会失败,因为你需要以 root 身份运行它,然后使用历史扩展用 来运行它sudo
。但是你确定你运行了正确的命令吗?使用复杂的历史扩展构造(例如希望sudo !f
运行最后一个foo
命令),很容易出错。但是,即使使用基本的!!
运行最后一个命令,也会出现错误。如果你运行了foo; bar
然后运行sudo !!
,它还是以foo
rootbar
身份运行?如果你要使用历史扩展sudo
,仅仅知道答案是不够的——你必须在每次执行时都牢记这一点。
对于大多数情况,我建议您在添加命令时避免重新输入的方法sudo
是简单地按Up Arrow直到您获得需要运行的命令sudo
,按Home获取命令的开头,仔细阅读命令以确保它确实是你想要做的,然后键入sudo
并输入空格。如果诱使您运行 root shell(或使用更危险的方法)的情况是这样做相当方便的情况,那么您不需要 root shell。如果您发现自己忘记输入sudo
(我们中的许多人有时都会这样,包括我自己),请记住您可能还会忘记其他事情,这些事情会让您庆幸自己忘记以 root 身份运行命令。