不能更改root密码的root用户访问权限?


66

我们在服务器上有一个小问题。我们希望某些用户应该能够执行操作sudo并成为root用户,但是要限制用户不能更改root密码。也就是说,无论其他用户将做什么,我们仍然可以登录到该服务器并成为root用户。

那可能吗?


32
您只能用于sudo授予特定于root特权的应用程序的权限。这样,将不允许用户更改root密码
SHW

24
为什么需要sudo这些用户。如果您不信任他们,则首先不要给他们sudo访问权限。还要注意,理想情况下,root根本不应该拥有密码,但是您应该使用其他身份验证方法。(即使您愿意/etc/passwd
假冒

3
这些用户到底需要做什么?
Olivier Dulac

4
他们将如何处理其根特权?可能有比您所想的更好的解决方案。
sparticvs 2013年

23
这就是“上帝能把一块巨石做成他自己无法举起的巨石吗?”之一。输入问题。如果您具有root用户访问权限,则可以执行任何操作,因此最好谨慎地授予root用户访问权限。sudosetuid可以解决大多数问题。
2013年

Answers:


57

我们希望某些用户应该能够例如sudo成为root用户,

嗯,这就是sudo旨在解决的问题,因此该部分很容易。

但受限于用户不能更改root密码。

正如SHW在评论中指出的那样,您可以将sudo配置为仅允许某些用户以root身份执行某些操作。就是说,您可以允许user1做sudo services apache2 restart,允许user2做sudo reboot其他事情,而不能让hired-as-system-administrator user3sudo -i。有关于如何设置sudo的howto,或者您可以在此处搜索(或询问)。那是一个可解决的问题。

但是,已被授予进入sudo -isudo进入外壳的能力(sudo bash例如)的用户可以做任何事情。这是因为在sudo启动外壳时,sudo本身已不在图片之列。它提供了不同用户(通常是root用户)的安全性上下文,但对于执行的应用程序的功能没有发言权。如果该应用程序反过来启动,passwd root那么sudo对此无能为力。注意,这也可以通过其他应用程序完成。例如,许多更高级的编辑器提供了通过shell执行命令的工具,该shell将使用该编辑器进程的有效uid(即root)执行。

也就是说,无论其他用户将做什么,我们仍然可以登录到该服务器并成为root用户。

抱歉; 如果您确实的意思是“确保无论具有root访问权的人做什么,我们都将能够登录并使用系统”,那么(出于所有意图和目的)将无法完成。快速的“ sudo rm / etc / passwd”或“ sudo chmod -x / bin / bash”(或任何shell根目录使用),无论如何,您几乎都处于困境。“几乎用胶管”的意思是“您需要从备份中恢复,并希望他们所做的任何事情都比滑过手指更糟”。您可以采取一些措施来减少意外事故导致系统无法使用的风险,但是您不能阻止恶意行为造成非常严重的问题,甚至需要从头开始构建系统,或者至少需要从已知的基础上重建系统。良好的备份。

通过为用户提供不受限制的根访问权限,您可以信任该用户(包括他们可能选择执行的任何软件,甚至是像ls这样普通的东西)都没有恶意,也不会因意外而混乱。这就是root访问的本质。

通过例如sudo进行有限的 root访问会更好一些,但是您仍然必须注意不要打开任何攻击媒介。有了root用户访问权限,特权升级攻击就有许多可能的攻击媒介。

如果您不能以root用户所拥有的访问级别来信任他们,则需要非常严格的sudo配置,或者根本不通过任何方式(sudo或其他方式)完全授予有问题的用户root用户访问权限。


3
对不起,我的回答被炒作了(我不太明白!)。您的回答提出了很好的观点,我希望它能被接受。+1,先生。
Joseph R.

@JosephR。有时,简洁的答案是首选。
大卫·考登

@DavidCowden是的,这里似乎是这样...
Joseph R.

1
@JosephR。不用担心我。Stack Exchange社区并非总是可以预测的,已经有很多支持的问题的确会吸引更多人。不过,感谢您的支持。:)
CVn

92

这实际上是不可能的。首先,如果您授予他们成为root的权力,那么您将无法采取任何措施阻止他们做任何事情。在您的用例中,sudo应该用于授予用户一些root权限,同时限制其他用户而不使其成为root

在您的方案中,您将需要限制对supasswd命令的访问,并打开对几乎所有其他内容的访问。问题是,您无法采取任何措施来阻止用户直接编辑/etc/shadow(或/etc/sudoers就此而言)用户并丢弃替换根密码来劫持根。这只是最直接的“攻击”场景。具有一个不受限制的权限的Sudoer(一个或两个命令除外)可以解决劫持完整root用户访问权限的限制。

正如SHW在评论中所建议的,唯一的解决方案是sudo用来授予您的用户访问一组受限命令的权限。


更新资料

如果您使用Kerberos票证进行身份验证,则可能有一种方法可以实现此目的。阅读本文档,说明文件的用法.k5login

我引用相关部分:

假设用户alice在其主目录中有一个.k5login文件,其中包含以下行:
bob@FOOBAR.ORG
这将允许bob使用bob的Kerberos票证使用Kerberos网络应用程序(例如ssh(1))访问alice的帐户。
...
请注意,由于bob为其自己的主体保留Kerberos票证,因此bob@FOOBAR.ORG,他不会拥有需要alice票证的任何特权,例如对站点主机的root访问权或更改alice密码的能力。

不过,我可能会误会。我仍然在阅读文档,还没有亲自尝试Kerberos。


您是如何对评论做出如此酷的引用的?我查看了您的答案的来源,并看到了它周围的()。很酷的秘密帽子!

@Joe发表评论的时间实际上是评论本身的链接。
Joseph R.

@Joe <tr id="thisistheid"...在注释中找到id()(例如,在Chrome中右键单击和Inspect element),然后将其附加到带有前面的的线程链接中#。在你的情况(ID = comment-162798),它看起来像这样:unix.stackexchange.com/questions/105346/...
POLYM

1
感谢您的回答,我不知道该接受还是接受@MichaelKjörling的邀请,我选择了他,是因为它有更多描述-像我这样的
菜鸟

@ 244an不用担心。我本人会推荐同样的东西。:)
约瑟夫R.15年

17

我假设您想确保您具有“紧急管理员”访问权限,即使您的实际管理员搞砸了(但除此之外,您也完全信任主管理员)。

一种流行的方法(尽管非常骇人听闻)是让另一个用户使用uid=0,通常名为toor(向后root)。它具有不同的密码,并且可以用作备份访问。要添加,您可能需要编辑/etc/passwd/etc/shadow(复制root行)。

这几乎是所有故障保护,但是如果您只需要防止“主管理员”更改密码而不另行通知,那么它将起作用。通过删除toor帐户来禁用它很简单;因此唯一的好处就是拥有一个单独的密码。

另外,您可能希望研究替代的身份验证机制,即ssh密钥libnss-extrausers,LDAP等。

请注意,管理员仍然可能会搞砸。例如,通过阻止防火墙。

如果您想拥有一个非常安全的系统,请考虑使用SELinux,其中unix用户(例如root)也要扮演一个角色,这可能会更加精细。您可能希望授予管理员root权限,但只授予受限角色(例如,仅管理apache)。但是,这需要您付出大量努力才能正确配置策略。


6
这实际上并不能阻止用户toor更改root密码。它仅提供第二个密码以成为root用户。
Alexis

2
-1,然后 您建议使用后门密码,以便管理员在失去根访问权限后可以恢复该访问权限???正如您所说的那样,这只是错误的做法,而且讨厌的用户还可以轻松禁用它。设置后门的方法更为可靠。
Alexis

2
@alexis这就是问题的作者恕我直言的要求。为什么为此给-1?toor几十年来,恢复帐户一直是Unix上的一种普遍做法(尽管对此表示反对)。
Anony-Mousse 2013年

9
如果唯一的目标是防止意外的密码更改,这是一个很好的答案。如果目标是防止任何恶意行为,那没有什么帮助。由于OP没有说明目标是什么,所以我们不知道。
Bobson

2
这就是为什么我在第一句话中说过:“拧紧……除此之外,您完全信任……”。这实际上只是一个“支持访问”解决方案;不是安全功能。使用附加的root ssh密钥可以达到相同目的,而不会让人感到厌恶。
Anony-Mousse 2013年

11

root的本质是对系统具有不受限制的命令。您可以使用SELinux进行调整(以前是一个演示站点,任何人都可以以root用户身份登录,但是它的功能在访问系统中受到削弱),但这并不是重点。关键是这是您问题的错误解决方案。

现在,您没有说出问题所在,但是,如果您不信任这些用户不让他们使用root密码,那么他们根本就没有root身份。如果他们需要管理Web服务器,各种硬件设备,翘曲驱动器等,请为此设置解决方案。创建一个超级组,为其提供所需的所有访问权限,并将其添加到其中。如果他们需要执行仅root用户的系统调用,请编写一些setuid程序。

当然,具有这种访问权限(和一点知识)的用户可能会轻易地入侵系统,但至少您是在使用OS安全模型,而不是反对它。

PS。有很多方法可以在没有密码的情况下为您自己安排root访问。其中之一是,如果您/etc/sudoers(无限制)进入,则只需输入自己的密码即可成为root用户,例如使用sudo bash。但是您根本不需要去那里。


但是问题是您无法阻止攻击者通过利用漏洞扎根,SELinux提供了深度防御。
Timothy Leung,

11

至少从理论上讲,使用SELinux可以做到这一点。这使您可以设置关于用户或流程允许或不允许执行的操作的更精确的规则。即使使用SELinux,也很难使用户无法更改root密码,但仍然能够执行他们可能需要做的任何事情。

确实,这取决于不允许更改根密码的用户实际需要执行的操作。弄清楚到底是什么,然后专门使用sudo授予这些权限,可能会更容易,更安全。


8
虽然从理论上讲,使用SELinux做到这一点是可能的(并且我不相信),但声称它没有显示出实际规则并不会帮助任何人。
吉尔斯2013年

@Gilles 实际上很好,这就是SELinux的设计目的。SELinux是标准POSIX权限所需的权限层。在正确配置的SELinux计算机上,由于您的真实权限由安全上下文和对象标签确定,因此root用户访问毫无意义。
tylerl

2
如果您知道该怎么做,请回答神话或现实:SELinux可以限制root用户吗?
吉尔斯2013年

从理论上讲,它仍然可以在SELinux上实现。但是,这样的设置将需要更加复杂,以确保将所有SELinux相关的配置文件与“正常”文件系统(root用户具有完全访问权限)可靠地分开。最后,对这样的分离(有或没有SELinux的)中的“最简单”的方法将是去与类似的Kerberos,如提到的约瑟夫R.
ILMostro_7

7

也许您应该考虑让用户对虚拟机或LXC容器具有root访问权限。这样一来,他们就可以对系统具有完全的root访问权限,而又不会阻止他们登录到主机或执行管理操作。


这比恕我直言的许多选项更安全。
年长者怪胎

5

我不知道这实际上是可行的,但这是一个肮脏的技巧:

  1. 编写一个包装器脚本/程序,该脚本/程序会将/etc/passwd文件复制到其他位置,然后再调用实际sudo
  2. 允许普通用户使用 sudo
  3. 一旦完成任务,或者当他退出sudo后,请还原/etc/passwd文件

我知道,要实现这一目标,您需要考虑很多正负因素。毕竟,这是一个肮脏的hack


3
恶意用户很可能会阅读此脚本并删除备份副本。
Joseph R.

这也是vipw朋友已经做的事情。
CVn

考虑一下它的程序,并且只有root用户访问权限
SHW 2013年

1
root可以在之后编辑“其他位置” sudo
Anony-Mousse 2013年

5
您为什么要授予对潜在恶意用户的root访问权限???从根本上讲,安装不依赖于通过sudo和/或包装器的后门很简单……
Alexis 2013年

5

sudo仅用于授予root权限的声明,此后毫无保护,这是公然错误的。

您用于visudo修改sudoers文件。这是示例行:

redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command
  • redsandro是我们允许的用户名。将a %放在最前面以使其适用于组。
  • ALL是此规则的名称。Sudoers不仅可以授予全局权限,还可以做更多的事情。那就是它变得复杂的地方。
  • = 无需解释
  • ALL:ALL读为(who_to_run_it_as:what_group_to_run_it_as)。这样,您可以允许运行命令,但只能在特定用户或组的上下文中。
  • NOPASSWD:告诉它关闭密码提示。
  • /path/to/command 让您指定特定的命令path_to_commmand,另一个命令

要记住的是,虽然sudo家庭用户通常将其升级为root特权,但它可以并且可以用来以更精细的方式控制对特定命令的访问。

参考文献


该答案说明了如何设置sudo以进行受限的root访问,但是如果答案是这样以及应该去哪里,那会更好。
CVn

@MichaelKjörling完成
RobotHumans 2013年

3
“关于sudo只是为了授予root的声明,此后没有任何保护是公然的错误。” 假设我授予sudo vi用户访问权限是因为我希望他们能够编辑系统配置文件。然后,该用户:!/bin/bashsudo vi会话中进行操作。在这些情况下,sudo限制用户可以通过sudo执行的命令的能力如何保护我的系统?(没有人说过sudo不能比全有sudo -i方法更严格地配置。)
CVn 2013年

6
理解方法的局限性与了解如何执行任务一样重要。
CVn

1
@MichaelKjörling,我认为这只是一个例子。但是要明确一点,让用户编辑系统配置文件的正确方法是让他们运行sudoedit。您可以专门确定它们应该能够处理的文件sudoedit。这是在man sudoers
马修·弗莱申

3

(我不知道ubuntu,但它应该类似于Fedora / Red-Hat)
我能想象的唯一限制更改root密码访问的权限不是完全授予root用户访问权限,例如使用sudo或使用SElinux限制访问到密码文件...但是我不相信访问权限很高,因为root通常具有不受限制的访问权限,并且可以更新SElinux,或者重新标记密码文件,或者运行一些预先准备好的程序来更改密码。

如果您对他们的信任程度不足以不更改密码,则可能不应该授予他们root访问权限。否则,我猜您正在尝试避免发生事故。

如果您只是想保护对root的访问,请设置一个可以恢复root密码的程序,因此即使更改了该密码,也可以用最小的访问权限来恢复它。(sudo本身就很好)


3

您的要求是:

daccess-ods.un.org daccess-ods.un.org我们在服务器上有一个小问题,就是要保证无论其他用户将做什么,我们仍然可以登录到该服务器并成为root用户。

从您的问题看来,您似乎并不是在面对破坏系统的随机恶意用户,而是拥有半信半疑的用户,这些用户可能会时不时地造成恶作剧(也许是学生?)。我的建议针对的是这种情况,而不是恶意用户的全面攻击。

  1. 在虚拟环境中运行服务器。您将能够挂载服务器的文件系统,并用已知良好的版本替换更改的文件。根据您可能造成的损坏,可以为所有关键目录(/ bin,/ sbin,/ etc,/ usr,/ var等)拍摄快照,并扩展快照以覆盖损坏的文件,而保留其余系统完好无损。

  2. 以只读方式运行系统,例如从DVD-R中运行。如果您可以使系统的大部分部分保持静态,直到下次重启,这是一个不错的选择。您还可以在虚拟环境中使用只读后备存储,或通过网络加载基本系统,与重新编写DVD-R相比,重新启动之间的更改要容易得多。

  3. 内核模块。内核的Linux安全模块(LSM)为创建安全模块提供了基础。LSM被SELinux使用,但也被许多鲜为人知和简单的系统使用,例如Smack,TOMOYO和AppArmor。 本文对这些选项进行了很好的概述。可能是开箱即用的一种配置,可以防止对/ etc / passwd,/ etc / shadow或您想要的任何其他文件的写访问,即使是root用户也可以。

  4. 与#1的想法相同,但是服务器不在虚拟环境中。您可以将服务器链加载到诸如实时CD之类的只读OS中,该OS将自动挂载服务器的文件系统,并在每次引导时使用已知良好的副本覆盖基本系统。然后,只读OS将引导进入主OS。

  5. 同样,假设这些人是对高层负责的半信任用户(教师/老板),最好的答案可能是Linux Audit。这样,您将知道所采取的每项与安全性相关的操作以及采取了哪些措施(您将知道是谁采取了此措施,因为即使所有用户都共享根帐户,他们也将首先从其用户帐户中获取信息。实际上,您甚至可以实时解析审核日志并替换损坏的文件。/ etc / shadow是否被覆盖?没问题,只是让监视服务器立即将其替换为已知良好的版本。

您可能需要根据需要调查其他技术:


2

为了补充其他答案,我将假设这种情况是,您很少会失去对root的控制,并且在这种情况下,允许服务器重新启动。(毕竟,如果您认为计算机已受到威胁,则无论如何都希望使其脱机。)

这样做的最大好处是无需配置。您的问题将变为:“ 我忘记了root密码,我该如何找回? ”答案是重新启动,并在计算机启动时选择单用户模式。这样就为您提供了root shell,而无需知道密码。此时,您可以设置一个新密码。(以及去修复任何损坏...)


2
不能。正如Michael恰当地指出的那样,恶意用户可以通过简单地弄乱二进制文件来阻止root用户访问,而不必劫持密码。甚至init=...可以防止从相关二进制文件中删除执行权限。我认为在这种情况下,更好的解决方案是通过LiveCD挂载根文件系统,并(尝试)修复损坏。再说一次,如果您认为系统已受到威胁,则最好还是从备份中还原。
Joseph R.

同意@JosephR; 发现并修复损坏非常复杂,我也需要重新安装。但是我猜想OP的担心更多是某个人不小心将他们拒之门外…… 故意在工作或学校环境中进行黑客攻击会自杀。;-)
达伦·库克

1
不必要。真正恶意的用户加上粗心/笨拙的系统管理员可能会升级无法检测到的特权。我确实同意OP的初衷可能是为了避免无辜的错误,而不是防范恶意的意图,但是这个问题被贴上了“安全性”标签,我猜是这样:)
Joseph R.

2

如果将服务器克隆到VM(例如VirtualBox)中,则可以不受限制地授予人员根访问权限,并且仍然保证始终可以直接访问来宾操作系统的分区,从而最终控制/etc/passwd和之类的,因为您将在主机系统上具有root用户。

当然,授予无限制的root访问可能仍然不是正确的解决方案:如果数据安全根本不成问题或由您负责,则不能放弃root访问。


2

该要求在技术上是不可能的。正如已经雄辩地指出的那样,授予用户无限或什至更有限的sudo权限意味着您信任该用户。具有恶意的意图,足够的技术能力和毅力的人可能会遇到任何障碍。

但是,假设你能信任你的用户不作恶善意的,你可以更改密码限制的问题的政策。您可以为passwd程序创建一个包装,以提醒他们“请不要更改root密码”。假定问题的根源是由于误解而正在更改root密码的用户(例如,可能以为他们在完成后更改了自己的密码sudo bash)。

在特殊(罕见)情况下,如果不可能完全信任并且无法中断sudo对足够但相当安全的块的访问,则可以考虑建立组织机构对密码更改(或任何其他指定形式的系统篡改)的制裁,并安排监视关键资源,以免轻易被发现绕过已设置的策略-并且对于使用规则和监视要公开透明。

监视和发现方面是一个棘手的技术问题,如果您选择走这条路,就会从另一个问题中受益。在我看来,我们需要

  1. 检测用户何时将身份更改为root,并跟踪任何已创建的进程;
  2. 从那时开始记录进程创建,以查看谁是负责每个进程的原始用户,并使用远程主机,在该主机上半受信任的用户无权发送日志;
  3. 使用某种系统跟踪来记录正在发生的事情,并在以后能够发现是谁在违反策略。

我们至少需要记录除安全文件集之外的其他文件的打开情况,以进行写入,创建过程exec()以及进行任何更改网络的尝试。

可以通过修改的libc或(更好)的系统调用跟踪来实现。

当然,不可能使这种跟踪和日志记录正确地100%工作,实现起来并不容易,并且还需要额外的资源来进行操作。这不会阻止密码更改或其他不受欢迎的系统篡改,但是(更有可能)可以找到有罪用户,或者至少会造成一种幻想,即正在监视,并减少了对某些邪恶用户的吸引力(但是一些热衷于问题的黑客看到了技术措施的根本徒劳,可能会感到鼓舞去接受挑战并试图绕开系统来获得乐趣。


1

最初提出的问题是没有用的。看起来主要目标是“仍然具有登录名”,所以谈论一些紧急输入,即使在授予其他人root访问权限的情况下,它也可以确保正常运行。向Anony-Mousse欢呼,后者首先明确指出了它。

问题是:如果所有者对包装箱具有物理访问权,则它可以轻松地恢复对系统的逻辑访问(只要它仍然存在:)。如果不是这样的话-保留root密码将无法从sshd down或错误的网络设置中恢复,因此仍然无法访问该系统。

关于如何防止具有管理特权的人损坏系统的主题似乎太宽泛,无法适应SE问题格式。

说到远程紧急进入解决方案,最好的方法是IPMI(我认为)(如果可用)。系统所有者可以随时附加虚拟驱动器,从虚拟驱动器启动并进行系统恢复。

如果IPMI不可用,则可以采用任何合适的虚拟化技术来解决,如上面已经提出的。


0

您可以在/etc/sudoers文件中限制对sudo的访问

为了充分解释/ etc / sudoers的语法,我们将使用一个示例规则并分解每一列:

jorge  ALL=(root) /usr/bin/find, /bin/rm

第一列定义此sudo规则适用的用户或组。在这种情况下,是用户jorge。如果此列中的单词前面带有%符号,则它将此值指定为组而不是用户,因为系统可以具有相同名称的用户和组。

第二个值(ALL)定义此sudo规则适用于哪些主机。在跨多个系统部署sudo环境时,此列最有用。对于台式机Ubuntu系统,或您不打算将sudo角色部署到多个系统的系统,可以随意将此值设置为ALL,这是与所有主机匹配的通配符。

第三个值在括号中设置,并定义第一列中的用户可以执行命令的用户。此值设置为root,这意味着jorge将以root用户身份执行最后一列中指定的命令。也可以将此值设置为ALL通配符,这将允许jorge以系统上的任何用户身份运行命令。

最后一个值(/ usr / bin / find,/ bin / rm)是逗号分隔的命令列表,第一列中的用户可以作为第三列中的用户运行。在这种情况下,我们允许jorge以root身份运行find和rm。也可以将此值设置为ALL通配符,这将允许jorge以root身份运行系统上的所有命令。

考虑到这一点,您可以以逗号分隔的方式允许X命令,只要您不添加它,passwd就可以了


-1

没有1/2 root :)一旦您授予root特权,他们就可以做他们想要的任何事情。或者,您可以使用sudo运行受限制的bash shell或在没有root特权的情况下运行rbash。

如果要使用故障保护机制以root用户身份登录到服务器,则可以使用创建另一个用户,也可以uid=0创建一个简单的cron来定期重置root密码。


摆脱受限的打击很容易,请参阅此Sans博客
Franklin Piat 2015年

-1

尝试添加轮组而不是使用sudo。sudo允许用户像执行root用户一样执行,这意味着它与运行没有什么不同:

su-

成为根。根uid = 0; 车轮uid = 10。人们使用名称,但操作系统使用uid。某些命令不能由轮组成员运行。(如果您使用wheel,请不要犯错将root添加为wheel组成员)。如果您不知道什么是轮子,请查看Red Hat文档。

另一种选择是使用ssh密钥而不是密码。假设您可以确定使用sudo的人员不会将其公钥添加到〜/ .ssh / authorizedkeys文件中,这可以避免root密码更改的任何麻烦,因为root密码被有效地忽略了。

如果您想扩展对这些用户的信任(不添加他们自己的公钥),请尝试使用扩展文件属性和不可变位。创建〜/ .ssh / authorizedkeys文件之后,并根据需要配置/ etc / ssh / sshd_config和/ etc / ssh / ssh_config之后,将Immutable位置1。当然,也有办法解决这个问题-没有什么是完美的。

在任何系统中,内部人员都是最高的风险。主持节目的人是最重要的。一个相关的思想与合同有关。律师会告诉您:“切勿与需要合同的人进行业务往来”。常识告诉我们,“没有合同就做生意”。当您找到一个您足够信任的人可以与其做生意时,请根据彼此的需求来写合同。

所有提交的答案(包括我的答案)都无法解决物理访问问题。谁拥有控制权。如果不是您,那么如果有人找到阻止您登录的方法,或者即使您之后找到了登录的方法,也有可能让您找到实际访问计算机的人试图阻止这种情况的发生。当然,如果您有物理访问权限,则可能不需要任何这些东西,尽管如果您有兴趣不感到不便,无论如何都应该考虑实施一对夫妇。

-约翰·克鲁特


sudo巨大的不同su -。这已经被反复指出,例如SHWJoseph R.我本人hbdgaf,还有可能再多一些,注​​释字段太短而无法包括……
CVn13

完全正确,但无关紧要。您正在讨论成为root用户的替代方法以及授予root用户访问权限的风险,但是与“无法更改root用户密码的root用户访问权限”无关。
吉尔斯2013年

真正。这个问题是合乎逻辑的矛盾。除非安装中断,否则它不存在。用户登录名/帐户有什么用,该用户无法更改其密码,但具有root用户访问权限?因此,所提供的建议适用于提问者可能的意思;而不是他们写问题的方式。任何访问控制方法都有固有的风险。
约翰·克鲁

-3

一种方法是确保其/etc不可写。没有人,只要有sudoer周围。

这可以通过将其安装在网络上并在另一侧确保无法写入设备来完成。

这可以通过使用防止对其进行写访问的本地设备来完成。(查找write blocker硬件)

重要的是,该限制必须在该机器的根本概念之外应用。一个有创造力的黑客将在您可以控制的环境中绕过您在em上所设置的所有障碍。因此,如果root可以更改其密码,那么sudoer

为了确保用户也无法破坏您的登录功能,您必须具有只读挂载/bin/sbin

而且,您将必须具有一个可定期恢复网络连接的脚本。

(作为一个旁注:如果您仅允许sudoer一组非常有限的命令,并且确保每个命令都不会破坏/替换它们等,那么可以在/etc写时防止它出现。)


虽然可能以只读方式挂载/ etc(例如,在initrd的启动脚本中的数据透视根中,您必须格外小心),但存在设置相当脆弱的风险。同样,具有root用户访问权限的用户可以做很多事情,这些事情削弱了其他用户获得root用户特权的能力,而这些特权不涉及在/ etc中进行修改。
CVn

@MichaelKjörling设置并不脆弱,我经常使用它(作为只读本地安装)。
Angelo Fuchs 2013年

@MichaelKjörling我添加了一些其他元素,如果您想确保您仍然可以登录,则希望将其设为只读。因此,如果您走那条路,必须执行的操作列表并不短,但是这是“唯一的保证,无论其他用户将做什么,我们仍然可以登录到该服务器并成为root用户”。
Angelo Fuchs

我承认我从来没有见过需要尝试它的需要,但是我可以肯定看到的一件事是冒险的是init将如何处理/ etc / inittab在脚下被替换的方式。或者,如果初始和重新安装后的/ etc / fstab不同,系统将如何处理。还有/ etc / mtab。其他用户可能想要更改自己的密码,这涉及写入/ etc / shadow以及可能写入/ etc / passwd的密码。而将/ etc只读地安装仍然只是部分解决方案。我并不是说这不能成为解决方案的一部分,但这当然不是我要解决OP的第一步。
CVn

1
是。这样做是危险的,如果做错了,则会遇到严重的问题。据我所知,这是解决应允许成为root用户的OPs要求的唯一可行方法。
Angelo Fuchs 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.