你怎么能防止在Linux上的root密码更改?

我正在build立一个服务器,其他人将通过ssh访问sudo。 他们可以根据需要安装并进行更改,但是我仍然需要pipe理服务器,安装补丁和软件更新等。

我想知道如果我保持根密码,以便我可以随时做我需要的,我可以以某种方式禁用与sudo的人可以用sudo来改变它。

你必须这样想。 如果你给他们一个root密码或者一个路由,那么你基本上就会问:“除非我不希望他们拥有它,否则我怎么能给他们根。” 答案是“你不能,电脑不能这样工作”。

你可以有select地允许使用sudo命令,但是你必须小心,不允许程序访问shell,写sym链接,或者其他几十个问题之一。 这是一个安全的sudo脚本的页面: http : //www.kramse.dk/projects/unix/security-sudo-script_en.html

你总是希望他们不知道chattr命令;-)

我想这里的答案取决于您是否试图阻止他们恶意更改密码以阻止您,或只是不小心获取密码,因为他们忘记了您需要访问权限。 在前一种情况下,你会遇到很多麻烦。 我不知道在什么情况下你可以让用户访问这个盒子,但是仍然担心这个问题,但是你可以做的最好的事情就是通过sudo来限制他们对命令的访问,正如其他人提到的那样。 在后一种情况下,似乎解决scheme将是使用sudo权限创build自己的用户。 没有人会意外地更改您的帐户的密码,所以你不必担心有人犯了一个错误,甚至改变密码有一个很好的理由,忘记告诉你,因为你总是可以您的帐户,并将其更改回来。

有几个选项:

  • 您可以使用PAM (可插入的身份validation模块)来允许您以root身份login,而不pipe他们设置了密码。 有很多模块可用 ,所以我只是把这个挂起来。
  • 通过打开/ etc / passwd并添加一个与root(0)具有相同UID的新用户来创build“第二个root用户”。 然后将密码添加到该特定用户的/ etc / shadow文件中。 这将允许您以root身份login,即使他们更改了“root”的密码 – 您的login仍然有效。
  • 创build一个定期运行的shell脚本,检查root用户的/ etc / shadow中的哈希值是否与您希望的哈希匹配。 如果不是这样,那么散列值就会改回来。

正如其他人所指出的那样,给予root访问权限将允许他们在系统上完全做他们喜欢的事情,如果他们真的想把你locking, 他们能。 然而,上面的选项使它们变得越来越难以透明。

SELinux可以做你正在寻找的东西,虽然它就像是用一颗核动力的星球砸死的战斧,或者是任何一个Hitchhiker的引用。 如果你使用的是Linux而不是Solaris(和它的RBAC),那么最容易实现的选项很可能就是configurationsudo,只允许使用必要的命令。

Solaris已经通过将root作为“angular色”来解决这个问题,所以没有人拥有root密码,root用户无法login系统。 为了防止任何人locking你,有很多细粒度的安全选项; 所以你可以让他们用“pfexec”(相当于sudo)来完成大部分的根本事情,但是你可以防止他们撤销你的sudo权限。

[[我不是solaris的粉丝,但是除了ZFS和DTrace,solaris还有一些非常棒的东西。 太糟糕如果甲骨文熄灭火焰]]

而不是阻止他们更改密码,只是把它作为一个政策,他们不允许这样做。 然后你可以设置像auditd这样的东西来观察密码文件并通知你的变化。

你想要的是不合理的。 以任何forms给予人们的根本将允许他们破坏你的系统。 即使他们的访问是通过严格pipe制sudo,一个聪明或恶意或真正疯狂的白痴将能够造成混乱。

你要么相信他们,要么你不相信。

如果你支持他们的需求,公司支付你的支持,这是他们的机器,而不是你机器。 尽pipe他们做了一些愚蠢的事情,但你只能保持工作。 也许在他们烤了几次之后,你可以问问你的老板,如果你可以给客户更less的访问权限,否则公司将不得不继续支付你来解决这个烂摊子。 无论如何 – 这是他们的硬币。

如果这是你的电脑,而你正在帮助这些人,请礼貌地问他们好。

这就是说 – 你可以随时从CD(或其他只读媒体)启动。 他们仍然可以清除其他文件系统,或者使用自己的/ etc来挂载/ etc,但是只需要将系统恢复到某种基本的function级别即可。

你也可以使用openvz之类的东西 ,给每个用户自己的实例。 他们将无法消灭整个系统,他们将能够在他们的切片中安装自己的软件。 许多地方使用这个虚拟主机,他们给VZ切片的客户端“根”。

如果您不能使用带有RBAC的系统,如Solaris,HP-UX或AIX,则可以使用grsec修补程序在Linux上实施RBAC。

这就是中间层访问用户types需要的地方。 我想如果一个用户types会存在可定制的特权(标准访问加上一些根访问),这将是很好的。 同样为了防止这个用户改变例如密码文件(因为linux是基于文件的),我们可以限制密码文件访问权限,使其不可用于该用户。 然后inputBIOS的密码以防止用户使用第三方可启动闪存或CD更改/ etc / shadow文件。

以上只是一个理论的Linux开发人员,不知道是否有可能…

防止他们更改任何密码:

chattr +i /etc/shadow 

用户提出问题的原因并不重要。 答案“你不能”是不正确的! 答案实际上列在“男子气概者”页面的底部。 这就是所谓的“白名单”,实际上我正在为我工​​作的公司实施。 这就是你所做的 –

  1. 将要locking的用户添加到组中
  2. 编辑sudoer的文件 – visudo
  3. 将其添加到sudoer文件(testgroup是您添加用户的组)

%testgroup ALL = (ALL) ALL

%testgroup ALL = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

%testgroup ALL = !/usr/sbin/visudo

  1. 完成

这可以防止sudo用户更改root密码,但允许更改所有其他用户,并防止他们编辑sudoers文件。 还有其他一些你可能应该join的东西,比如阻止用户改变他们所在的组,但是你希望得到这个主意。