chpasswd и passwd не обновляют /etc/shadow для пользователя root

Вопрос или проблема

У меня проблема, и я не знаю, что я что-то испортил или так и должно быть, и я никогда не замечал..

Использование passwd и chpasswd для изменения пароля пользователя работает как ожидается, файл /etc/passwd игнорируется, а файл /etc/shadow обновляется.

Использование passwd и chpasswd для изменения пароля пользователя root делает противоположное; файл /etc/passwd обновляется, а файл /etc/shadow игнорируется.

Я проверил разрешения на файле /etc/shadow, он имеет 0644, так же как и /etc/passwd.

Это система CentOS 5.9, обновленная за последние несколько месяцев, yum update shadow-utils не показывает обновлений, а rpm -q shadow-utils показывает shadow-utils-4.0.17-21.el5.

Что за чертовщина происходит?

Я знаю, что это старый вопрос, но я только что столкнулся с этой проблемой и думаю, что разобрался, что происходило в моем случае.

Моя реализация chpasswd (busybox 1.35) написана так, что если пользователь не найден в файле /etc/shadow, то пароль записывается в файл /etc/passwd. При проверке файла /etc/shadow оказалось, что строка пользователя root отсутствовала, я добавил её обратно, и все стало хорошо.

Я все еще не знаю, как пользователь root был удален из файла shadow на моей системе (это встроенная система, так что он должен был быть там).

Вы можете попробовать методы из этого другого ответа от Rahul Patil, это сработало для меня.

Тот, который я использовал, был
echo “root:” | chpasswd

это обновляет зашифрованный пароль во втором поле файла /etc/shadow

другие поля в shadow – это те, которые затрагиваются командой chage

Вот мануал по shadow, но смотрите, что основная команда, связанная с этим файлом, это chage, так что сначала попробуйте использовать chage для других полей в shadow, которые не являются пользователем и зашифрованным паролем

Ответ или решение

Ситуация, которую вы описали, рассматривает неожиданные изменения паролей пользователя root в системах, использующих такие утилиты, как passwd и chpasswd. Основная проблема заключается в том, что при изменении пароля пользователя root данные в файле /etc/shadow не обновляются, в то время как данные в файле /etc/passwd изменяются. Давайте глубже проанализируем ситуацию, выявим возможные причины и предложим решения.

Проблема: Необновление /etc/shadow для пользователя root

  1. Процесс изменения пароля: Обычные команды для изменения пароля, такие как passwd и chpasswd, должны обновлять зашифрованный пароль в файле /etc/shadow. Стандартный процесс предполагает, что при изменении пароля проверяется наличие записи пользователя в /etc/shadow. Если записи нет, то информация может быть неверно перенаправлена в файл /etc/passwd.

  2. Отсутствие записи: Как вы заметили, у пользователя root отсутствовала строка в файле /etc/shadow. Это может объяснить почему при попытке обновления пароля использовались неправильные пути и данные, в результате чего произошло изменение файла /etc/passwd, а не /etc/shadow. Если запись root в файле /etc/shadow отсутствует, инструменты будут считать, что этот пользователь не зарегистрирован, и начнут записывать данные в /etc/passwd.

  3. Проверка разрешений: Вы также упомянули, что у файла /etc/shadow такие же права доступа, как и у файла /etc/passwd, что не является причиной проблемы. Однако для пользователей с ограниченными правами может потребоваться убедиться, что права доступа верно настроены, позволяя только пользователям с достаточными привилегиями изменять содержание файла /etc/shadow. Обычно права доступа должны быть 0400 для /etc/shadow.

  4. Использование BusyBox: Как вы упомянули, в вашей системе используется версия BusyBox. Эта реализация chpasswd может иметь свои особенности. Возможно, вы используете устаревшую версию, оптимизированную для встраиваемых систем. Версии BusyBox имеют свои отличия, которые могут влиять на выполнение команд.

Решение проблемы:

  1. Восстановление записи root в /etc/shadow: Чтобы исправить ситуацию, вам нужно вручную добавить строку с информацией о пользователе root в файл /etc/shadow. Строка должна выглядеть примерно так:

    root:!:18000:0:99999:7:::

    Здесь !:, указывает, что пароль заблокирован, что следует изменить на зашифрованный пароль.

  2. Пересоздание зашифрованного пароля: Вы можете использовать команду:

    echo "root:новый_пароль" | chpasswd

    Это должно правильно обновить запись в файле /etc/shadow, если запись уже существует.

  3. Проверка целостности: После исправления проверьте целостность файлов /etc/passwd и /etc/shadow на наличие других проблем или аномалий. Убедитесь, что все учетные записи пользователей и связанные с ними пароли корректны.

  4. Обновление и мониторинг: Если это встроенная система, важно регулярно проверять обновления для BusyBox или других инструментов, которые вы используете. Устойчивые системные проверки могут помочь обнаружить подобные проблемы в будущем.

Заключение

Ситуация с несовпадением обновлений паролей в файлах /etc/passwd и /etc/shadow может быть следствием отсутствия записи о пользователе root в файле /etc/shadow. Решение этой проблемы включает в себя восстановление этой записи и правильное управление файлами. Регулярные проверки, аудит прав доступа и обновления обеспечат стабильность и безопасность вашей системы.

Оцените материал
Добавить комментарий

Капча загружается...