Penafian: Pertanyaan ini bukan untuk menyelesaikan masalah mengubah kata sandi root saat SELinux aktif karena sudah ada banyak panduan untuk menyelesaikannya. Ini lebih dari bagaimana SELinux melakukan itu secara internal.
Saya pengguna SELinux baru-baru ini tetapi belakangan ini saya lebih banyak berhubungan dengannya. Ada saat ketika seseorang bertanya kepada saya bagaimana saya bisa mengatur ulang kata sandi root jika lupa.
Jadi saya mem-boot CentOS saya, mengedit entri grub ke sesuatu seperti
linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash
Saya berlari passwd
dan kemudian berlari sync
dan memaksa reboot. Setelah reboot, masuk dengan kata sandi baru ditolak juga seperti yang lama.
Reboot lagi dan memberikan kernel parameter untuk menonaktifkan SELinux ( selinux=0
). Mencoba masuk dengan kata sandi baru dan berhasil. Setelah itu saya memaksa relabel otomatis fs (melalui file .autorelabel
) dan dengan SELinux aktif sekarang mungkin untuk masuk.
Pertanyaan saya adalah: mengapa itu terjadi? Mengapa relabeling mempengaruhi login ketika hanya ada perubahan kata sandi dan bukan pengguna atau objek?
Terima kasih atas perhatian Anda.
TL; DR: Reset kata sandi root biasa tidak berfungsi di SELinux. Mengapa?
Sunting: Ini diuji pada mesin virtual yang menjalankan CentOS7 dengan KVM sebagai hypervisor.
Jawaban:
Saya dapat menduplikasi masalah ini dalam sistem CentOS 7.5 yang baru diinstal.
Inilah yang terjadi:
Saat Anda boot dengan
init=/bin/bash
ada dua masalah yang mungkin Anda temui:Sistem file root dapat di-mount hanya baca. Dalam hal ini
passwd
akan mengeluh tentangAuthentication token manipulation error
.Ini cukup jelas: Jika sistem file tidak di-mount baca-tulis, tidak mungkin untuk menulis ke sana.
Kebijakan SELinux mungkin tidak dimuat. Dalam hal ini
passwd
akan berhasil mengubah kata sandi, tetapi Anda akan memiliki masalah yang dijelaskan dalam pertanyaan awal di atas: tidak ada yang bisa masuk.Hash kata sandi disimpan dalam
/etc/shadow
file. File ini biasanya memiliki tipe SELinuxshadow_t
. Namun, mengubah file sementara tidak ada kebijakan SELinux yang dimuat menyebabkan tipe SELinux dihapus dari file, meninggalkannya sebagaiunlabeled_t
. Dengan demikian, layanan yang mencoba membaca file untuk mengotentikasi login tidak lagi dapat membacanya.Untuk mengubah kata sandi root di RHEL / CentOS 7, Anda harus mengikuti proses ini:
init=/bin/bash
ke akhir baris perintah kernel di grub, seperti yang Anda lakukan sebelumnya./usr/sbin/load_policy -i
.mount -o remount,rw /
.passwd root
mount -o remount,ro /
.exec /sbin/init 6
.Sekarang Anda dapat masuk dengan kata sandi root yang diubah.
Sebuah penjelasan yang lebih panjang dari prosedur ini tersedia dari Red Hat (berlangganan diperlukan).
sumber
init=/bin/bash
.passwd
"tampaknya berhasil"?passwd
yaitu/etc/passwd
dan/etc/shadow
. Jika berjalanpasswd
tanpa kebijakan yang dimuat, itu tidak berjalan dalam konteks selinux yang tepat, dan file yang diubah berakhir dengan konteks selinux yang berbeda. Ketika booting dengan selinux diaktifkan, dan kebijakan aktif pemeriksaan kata sandi gagal karena konteks file yang tidak pantas, dan bukan karenawrong password
kesalahan. Memaksa selinux ke kontekstual fil yang/.autorelabel
dapat dinyalakan dengan menyentuh juga dapat memperbaiki masalah tersebut saat mengubah kata sandi tanpa kebijakan yang dimuat.