Скинути пароль кореневого пароля SELinux


12

Відмова від відповідальності: Це питання не вирішує проблему зміни кореневого пароля, коли SELinux активний, тому що існує вже багато посібників для вирішення цього питання. Це більше, як SELinux робить це внутрішньо.

Я останній користувач SELinux, але останнім часом я з ним більше контактую. Був момент, коли хтось запитав мене, як я можу скинути пароль root у випадку його забуття.

Тому я завантажив свій CentOS, відредагував груб запис на щось подібне

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

Я біг, passwdа потім біг syncі примусово перезавантажувався. Після перезавантаження вхід із новим паролем був відхилений, як і зі старим, звичайно.

Перезавантажився знову і передав ядро ​​параметр, щоб відключити SELinux ( selinux=0). Спробував увійти з новим паролем, і воно спрацювало. Після цього я змусив автоматичну відновлення fs (через файл .autorelabel), і при активному використанні SELinux тепер можна було увійти.

Моє запитання: чому це відбувається? Чому ретрансляція впливає на вхід у систему, коли була лише зміна пароля, а не користувачів або об’єктів?

Дякую за увагу.

TL; DR: Звичайний скидання пароля root не працює в SELinux. Чому?

Редагувати: це було протестовано на віртуальній машині під управлінням CentOS7 з KVM як гіпервізор.


1
Ви впевнені, що це не працює? Спробуйте ще раз. Напевно, це буде добре працювати. Я підозрюю, що у вас просто були неправильні контексти файлів у деяких файлах, через що всі входи в систему не виходили. Таким чином, авторелей був тим, що справді вирішило проблему.
Майкл Хемптон

@MichaelHampton Я просто відтворив усі свої кроки, роблячи це знову, і не зміг увійти знову з активованим SELinux Після відключення я міг увійти без проблем. Виправте мене, якщо я помиляюся, але зміна пароля не повинна змінювати контексти файлів, чи не так?
Хорхе Хелено

1
Ні, це не повинно. Ви, здається, відкрили щось дивне і несподіване.
Майкл Хемптон

Відповіді:


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, тому вам потрібно дотримуватися цього процесу:

  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.

Більше роз'яснення цієї процедури доступне в Red Hat (необхідна підписка).


Проблема була в політиці, яку не завантажували. Чому вони не завантажуються? SELinux повинен працювати на рівні ядра, тому система init не потребує.
Хорхе Хелено

4
@JorgeHeleno SELinux за замовчуванням дійсно увімкнено або вимкнено, коли ядро ​​запускається, але користувальницька країна несе відповідальність за рішення, які політики завантажуватимуться. Ядро не може цього вирішити, оскільки деякі установки можуть вимагати різної політики (наприклад, цільова, сувора, mls). Це відбувається на початку завантажувального процесу, але ви обходите це під час запуску init=/bin/bash.
Майкл Хемптон

1
якщо політика не завантажується, чому passwd"видається успішним"?
Андрій Савіних

і якщо це не вдалося, чому ввійти зі старим паролем все-таки не вдалося?
Гонки легкості по орбіті

2
@Jorge Helen: Ваше пояснення майже повне. Суть у файлах, змінених passwdсаме /etc/passwdта і /etc/shadow. Якщо працює passwdбез завантаженої політики, вона не працює у відповідному контексті selinux, а змінені файли закінчуються іншим контекстом selinux. Під час завантаження із включеним selinux та активними правилами перевірка пароля не вдається через невідповідний контекст файлу, а не через wrong passwordпомилку. Примушування selinux до відносних файлових контекстів шляхом дотику /.autorelabelтакож може виправити цю проблему при зміні паролів без завантаженої політики.
харгут
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.