我是SELinux的最近用户,但最近我更加接触它.曾经有一段时间有人问我如何在忘记密码的情况下重置root密码.
所以我启动了我的CentOS,编辑了grub条目
….
linux16< kernel_location> root = / dev / mapper / centos-root rw init = / bin / bash
…
我运行了passwd,然后运行同步并强制重启.
重新启动后,使用新密码登录被拒绝,当然还有旧密码.
再次重新启动并传递内核参数以禁用SELinux(selinux = 0).尝试使用新密码登录并且它有效.
之后我强制使用fs auto relabel(通过文件.autorelabel)并且SELinux处于活动状态,现在可以登录了.
我的问题是:为什么会发生?当仅仅更改密码而不是用户或对象时,为什么重新标记会影响登录?
感谢您的关注.
TL; DR:通常的root密码重置在SELinux中不起作用.为什么?
编辑:这是在运行CentOS7的虚拟机上测试的,其中KVM作为管理程序.
以下是发生的事情:
使用init = / bin / bash启动时,可能会遇到两个问题:
>根文件系统可以只读安装.在这种情况下,passwd会抱怨身份验证令牌操作错误.
这很明显:如果文件系统没有以读写方式挂载,则无法写入它.
>可能未加载SELinux策略.在这种情况下,passwd将成功更改密码,但您将遇到上述原始问题中描述的问题:没有人能够登录.
密码哈希存储在/ etc / shadow文件中.该文件通常具有SELinux类型shadow_t.但是,在未加载SELinux策略的情况下更改文件会导致从文件中删除SELinux类型,将其保留为unlabeled_t.因此,尝试读取文件以验证登录的服务不再能够读取它.
要更改RHEL / CentOS 7上的root密码,您需要遵循以下过程:
>将init = / bin / bash添加到grub中内核命令行的末尾,就像之前一样.
>在bash提示符下,使用/usr/sbin / load_policy -i加载SELinux策略.
>使用mount -o remount,rw /挂载根文件系统读写.
>现在更改密码,它将成功. passwd root
>重新安装文件系统以提交更改,并在下次启动时使用mount -o remount,ro /创建一个干净的文件系统.
>退出shell或使用exec / sbin / init 6重新启动系统.
现在,您可以使用更改的root密码登录.
Red Hat提供longer explanation of this procedure(需要订阅).