Jor*_*eno 12 password redhat selinux centos
免责声明:这个问题不是为了解决在 SELinux 处于活动状态时更改 root 密码的问题,因为已经有很多指南可以解决这个问题。这更多是关于 SELinux 在内部是如何做到的。
我最近是 SELinux 的用户,但最近我与它有更多的接触。有一段时间有人问我如何在忘记密码的情况下重置 root 密码。
所以我启动了我的 CentOS,将 grub 条目编辑为类似
linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash
Run Code Online (Sandbox Code Playgroud)
我跑了passwd
然后跑了sync
并强制重启。重新启动后,使用新密码和旧密码登录都被拒绝了。
再次重新启动并向内核传递参数以禁用 SELinux ( selinux=0
)。尝试使用新密码登录,成功。之后我强制 fs 自动重新标记(通过文件.autorelabel
),并且在 SELinux 处于活动状态时,现在可以登录了。
我的问题是:为什么会发生?当仅更改密码而不更改用户或对象时,为什么重新标记会影响登录?
感谢您的关注。
TL;DR:通常的 root 密码重置在 SELinux 中不起作用。为什么?
编辑:这是在运行 CentOS7 的虚拟机上测试的,KVM 作为管理程序。
Mic*_*ton 18
我能够在新安装的 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 密码,您需要遵循以下过程:
init=/bin/bash
在 grub 中添加到内核命令行的末尾,就像您之前所做的那样。/usr/sbin/load_policy -i
.mount -o remount,rw /
。passwd root
mount -o remount,ro /
.exec /sbin/init 6
。现在您可以使用更改后的 root 密码登录。
一个此过程的更详细的解释可以从红帽(需要订阅)。