我已经设置了 my sudoers
,每次使用时它都会询问 root 密码而不是用户密码sudo
。主要是因为我认为如果你想执行 root 命令,你应该知道 root 密码是有道理的。
但是,这是否会被视为安全风险?
如果不是,为什么这不是大多数发行版的默认配置?
编辑:我正在运行个人 Linux 机器,我是唯一的用户。在这种情况下,这个理由是否更有意义?我确实认为这可能不适用于多用户系统。
背景:我的经验sudo
是在系统上sudo
只是su
. 只需输入用户密码即可运行任何 root 命令,我认为这违背了 root 的初衷。因此,我有理由让它要求您提供 root 密码。说了我不知道 的力量sudoers
,一些用户提到你可以指定哪些命令可以运行sudo
(同时省略了一些仅限于 root 用户的命令)。我认为这是一个很好的中间立场
有些人会认为这是一种安全风险,因为它破坏了使用
sudo
而不是的两个主要目的su
,它们是:sudo
允许用户以 root 身份运行一些(但不是全部)命令变得容易,并且您不必提供 root 密码。拥有 root 密码可能比仅仅被允许以 root 身份运行某些命令要危险得多。
一旦有人拥有 root 密码,他们可以以 root 身份登录或使用
su
. 仅从一个人撤消 root 访问权限也更加困难 - 您必须更改 root 密码并让每个人都知道新密码是什么。使用sudo
的默认配置,您只需更改 sudoers 文件和/或从 sudo 组中删除用户。这就是为什么它不是
sudo
.我强烈建议您恢复到默认行为,因为几乎可以肯定,这比您认为必须知道 root 密码“有意义”要经过深思熟虑。“常识”通常既不是“常识”也不是“明智的”。
sudo
编写,至少部分是为了避免当每个需要一些能力来执行某些 root 级系统管理员任务的人都必须知道 root 密码时引起的问题。在实践中,这被证明是非常成问题的,尤其是在大学或公司等人们角色变化很大的大型环境中。多年来,我曾在多个环境中工作,在这些环境中,人们几年前已经在同一个组织中担任其他角色(甚至完全离开了组织),但仍然在机器上拥有 root 访问权限,他们甚至不应该拥有有效的登录名上。还有一个问题是,当您做正确的事情并在不再需要这些事情时删除root访问和/或禁用帐户时,人们经常会感到不安。
考虑一个假设的(但非常合理的)场景:拥有 root 密码的用户错误地更改了 root 的密码,并且没有记录下来。
您现在有一种情况,没有人拥有 root 密码,因此没有人可以提升为 root。这有效地打破
sudo
了每个人的 root 密码,需要采取补救措施(停机时间)来重置密码。sudoers 机制与给出 root 密码相比有很多优点:
允许以管理员身份运行一组受限命令
问责制,因为
sudo
可以记录运行的命令,以便知道谁运行了什么轻松转移管理员权限,只需在管理员组中添加和删除用户
为所有用户提供 root 密码完全无法使用 sudoers,因为用户不需要使用
sudo
: 他们只需以 root 身份登录。添加OP后编辑:
实际上,如果您是系统上的唯一用户,则上述内容不适用,您可以以 root 身份登录,而不是在
sudo
需要以管理员身份操作的任何时候运行。请注意,您的操作会产生更大的影响,并且更容易损坏系统。引用一位古代 UNIX Zen 大师的话:“只有通过根本,才能获得真正的痛苦——从而获得启蒙。”
我试图查看 Ubuntu 文档对此的看法。
Ubuntu 服务器指南在用户管理下提到
和
并继续说明如何
root
通过设置密码来启用该帐户。help.ubuntu.com 上的社区帮助 Wiki,页面 RootSudo(已归档),提到易用性、新用户以及一开始不以 root 身份登录:
这两个文件充其量都掩盖了
sudo
询问不同密码的选项,但维基页面列出了当前系统的优点和缺点,它至少给出了他们可能想到的指示。列出的前两个优点是安装程序要问的问题更少,并且用户只需要记住一个密码。两者都是易用性的论据。列出的第三个是反对以 root 身份登录和额外的 sudo 步骤的论点,即它可能会让用户停下来更多地思考他们在做什么:
他们还提到了@bxm 在他们的回答中所说的内容,即拥有一个 root 密码(带或不带 sudo)会使取消对用户的授权变得更加困难,以及 sudo 记录它运行的内容并且理论上可以配置为比允许一切。
我说“理论上”,因为例如设置规则以停止
sudo
启动 shell 肯定会针对确定的滥用者失败,因为它们可以例如安装一个明确命名的 shell(对抗任何黑名单),或者只安装一个 setuid shell 二进制文件(绕过需要sudo
开始)。两者都可以用 justcp
和来完成chmod
。鉴于正确设置白名单
sudo
并不是那么简单,而且似乎几乎没有关于如何做到这一点的说明,我猜想关于易用性的部分,忘记一个更不常用的 root 密码的机会,并且每个密码只有一个人使用是主要原因。(请注意,除了普通用户帐户密码外,从技术上讲,每个用户都可以使用不同的 root/sudo 密码。至少一种方法是创建多个 UID 0 帐户,在 中设置
targetpw
选项sudoers
,然后使用用户sudo
到他们自己的 root 帐户而不是root
. 例如,普通用户john
可以有一个相应的 root 用户john_root
,当他们需要时,他们会运行sudo -u john_root whatever command it was
。当然你可以用su
代替来做同样的事情。这样做的sudo
缺点是有原因的我一直不明白,有些人似乎强烈反对拥有多个具有相同 UID 的命名帐户。)您的问题表明您是该系统上的唯一用户(我已经设置了我的sudoers ......每次我使用 sudo 时),而给定的答案主要是从多用户的角度来看它。
默认配置的原因是最初的想法
sudo
:为某些用户提供受限的超级用户访问权限。在今天的 Linux 发行版中,这个想法可能更像您的想法:通过一个小的“请注意”提示轻松访问系统的受限区域。
在这种情况下使用 root 密码有一个主要优点(如果设置了 root 密码):
如果正确配置了 sudo 权限,知道密码只会损害您的帐户,而不是整个系统(可能包括您的备份。您需要第二把钥匙才能进入机房。
不
那些应该具有root权限或提升权限的用户被放置在
wheel
组中。然后只有那些用户可以su 到 root或者更确切地说使用sudo
. 使用su
需要输入 root 密码,这是不好的做法,也是您要避免的。专门使用sudosudo -i
是获得 root 提示的一种非常好的方法,它不需要输入 root 密码,用户输入他们的密码,并且只有当他们在 wheel 组中时才有效。/etc/sudoers
里面有sudo -i
要求给定用户输入他们的密码,而不是 root这是默认配置,至少在 RHEL/CentOS 7.x 中是这样;这是一个快乐的媒介。首先,用户必须在轮组中才能使用
su
或sudo
。我不确定如何正确防止轮组人员使用su
,但即使使用sudo -i
他们仍然可以更改 root 密码并导致问题。因此/etc/sudoers
,visudo
您需要重新配置和撤消## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
. 对于一个家庭 linux 系统来说,这一切都是多余的,但是一个具有法律含义的工作环境以及所有这一切都变得重要了。有人提到我多年来在多个环境中工作过,在这些环境中,人们几年前已经转移到同一组织中的其他角色(甚至完全离开了组织),但仍然拥有他们不应该甚至仍然拥有机器上的 root 访问权限有一个有效的登录。 这不是
su
他们知道root密码的错,这是现有管理员和管理人员没有进行适当的内务管理和更改root密码以及删除/过期员工登录的问题。明显的缺陷是任何轮组管理员都可以更改 root 密码并造成严重破坏。为了防止将该行编辑
/etc/sudoers
到%wheel ALL=(ALL) ALL, !/usr/bin/passwd root
. 还有%wheel ALL=(ALL) ALL, !/bin/su root
. 我想说的是,简单地使用轮组是最佳实践的第一步。然后进行编辑/etc/sudoers
以限制管理角色并使用除了轮子之外的更多管理组来为谁应该和不应该做什么实现合理的安全性。是的。分发根密码总是一个坏主意。
我会添加自己的 0.01 美元(通货膨胀已经造成了损失)...我使用 sudo,而不要求输入 root 密码。但是,我确实设置了 root 密码。换句话说,当使用 sudo 时,您使用自己的密码。但是,如果您在控制台上并以 root 身份登录,则它不会是无密码的,也不会让您登录。它设置了密码。很多新用户没有设置root实际密码,只使用sudo。这很好,直到您在启动时(例如)文件系统问题期间被放到命令提示符下,并且您需要输入 root 密码以进行维护。
只是一个想法。