SELinux重设root密码


12

免责声明:这个问题不是要解决SELinux处于活动状态时更改root密码的问题,因为已经有很多指南可以解决该问题。这更多地是SELinux在内部执行此操作的方式。

我最近是SELinux的用户,但最近我与它有了更多的联系。有一段时间,有人问我如何在忘记密码的情况下重设root密码。

所以我启动了CentOS,将grub条目编辑为类似

linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash

我跑了passwd,然后跑了,然后sync强制重启。重新引导后,使用新密码和旧密码登录均被拒绝。

再次重新启动并向内核传递参数以禁用SELinux(selinux=0)。尝试使用新密码登录并成功。之后,我强制进行fs自动重新标记(通过file .autorelabel),并且在激活SELinux的情况下现在可以登录。

我的问题是:为什么会发生?当仅更改密码而不更改用户或对象时,为什么重新标记会影响登录?

感谢您的关注。

TL; DR:通常的root密码重置在SELinux中不起作用。为什么?

编辑:这已在运行CentOS7且以KVM作为虚拟机管理程序的虚拟机上进行了测试。


1
您确定它不起作用吗?再试一次。它可能会正常工作。我怀疑您只是在某些文件上具有错误的文件上下文,从而导致所有登录失败。因此,自动重贴标签才是真正解决问题的方法。
迈克尔·汉普顿

@MichaelHampton我只是回溯了所有再次执行此操作的步骤,因此无法在SELinux处于活动状态时再次登录。禁用它后,我可以没有问题地登录。如果我输入错了,请纠正我,但是更改密码不应该更改文件上下文吗?
豪尔赫·赫勒诺

1
不,不应该。您似乎发现了一些奇怪而出乎意料的事情。
迈克尔·汉普顿

Answers:


17

我能够在新安装的CentOS 7.5系统中复制此问题。

这是正在发生的事情:

当您启动时,init=/bin/bash可能会遇到两个问题:

  • 根文件系统可以只读方式安装。在这种情况下passwd会抱怨Authentication token manipulation error

    这很明显:如果文件系统未以读写方式安装,则无法对其进行写入。

  • SELinux策略可能未加载。在这种情况下,passwd可以成功更改密码,但是您将遇到上面原始问题中描述的问题:没有人可以登录。

    密码哈希存储在/etc/shadow文件中。该文件通常具有SELinux类型shadow_t。但是,如果在未加载SELinux策略的情况下更改文件,则会从文件中删除SELinux类型,而将其保留为unlabeled_t。因此,尝试读取文件以验证登录名的服务不再能够读取它。

因此,要在RHEL / CentOS 7上更改root密码,您需要遵循以下过程:

  1. init=/bin/bash和以前一样,在grub中添加到内核​​命令行的末尾。
  2. 在bash提示符下,使用加载SELinux策略/usr/sbin/load_policy -i
  3. 使用挂载可读写的根文件系统mount -o remount,rw /
  4. 现在更改密码,它将成功。 passwd root
  5. 以只读方式重新挂载文件系统以提交更改,并在下次启动时使用清除文件系统mount -o remount,ro /
  6. 退出外壳程序或使用重启系统exec /sbin/init 6

现在,您可以使用更改后的root密码登录。

一个此过程的更详细的解释可以从红帽(需要订阅)。


问题出在未加载的策略上。他们为什么不被装载?SELinux应该在内核级别运行,因此不需要init系统。
豪尔赫·赫勒诺

4
在内核启动时,@ JorgeHeleno SELinux的确默认情况下处于打开或关闭状态,但是userland负责确定要加载的策略。内核无法决定这一点,因为某些安装可能需要不同的策略(例如,针对性的,严格的,mls)。这是在启动过程的早期发生的,但是在运行时可以绕开它init=/bin/bash
迈克尔·汉普顿

1
如果未加载策略,为什么passwd“出现成功”?
Andrew Savinykh '18

如果未成功,为什么使用旧密码登录仍然失败?
Lightness Races in Orbit 18'18

2
@豪尔赫·海伦:您的解释已经接近完成。问题的关键是改变了文件passwd,即/etc/passwd/etc/shadow。如果在passwd没有加载策略的情况下运行,它将无法在正确的selinux上下文中运行,并且更改后的文件最终会在不同的selinux上下文中运行。在启用selinux的情况下启动并启用策略时,密码检查失败是由于文件上下文不适当,而不是因为wrong password错误。通过触摸/.autorelabel将selinux强制为可信赖的文件上下文,还可以解决更改没有加载策略的密码时的问题。
hargut
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.