Home » Смена и сброс паролей: passwd и chpasswd
Смена и сброс паролей: passwd и chpasswd

Смена и сброс паролей: passwd и chpasswd

О чём эта статья и зачем она вообще нужна?

Если ты хоть раз настраивал сервер, то знаешь: без паролей никуда. Даже если весь мир мечтает об SSO, публичных ключах и бесшовном входе, обычные пароли по-прежнему рулят в 99% случаев. И вот тут начинается магия: ты арендовал VPS или даже выделенный сервер, поставил свежий дистрибутив, и первым делом надо привести пользователей и пароли в порядок.

Зачем это вообще важно? Потому что пароли — это первая линия обороны. Их утекают, их забывают, их нужно обновлять по регламенту, и иногда приходится сбрасывать пачками. К тому же, если ты автоматизируешь раздачу паролей или хочешь массово сбросить их через Ansible, тебе не обойтись без правильных инструментов.

В этой статье разберёмся, как работают passwd и chpasswd (и чем они отличаются), как их быстро и просто настроить, какие подводные камни бывают, и почему это не так скучно, как кажется. Будет много практики, примеры (в том числе неудачные), советы, лайфхаки и немного статистики.

В чём проблема и почему это важно?

  • Пароли утекают — и их надо менять быстро, массово, без головняка.
  • Админы часто забывают, что passwd и chpasswd — это не одно и то же.
  • Многие автоматизируют смену паролей через костыли — а потом ловят баги и дыры в безопасности.
  • Часть решений работает только в интерактивном режиме, а часть — идеально подходит для скриптов и CI/CD.

Короче, если хочешь не только выжить, но и не сойти с ума при массовой смене паролей — эта статья для тебя.

Как это работает? Алгоритмы и структура

passwd: классика жанра

passwd — это стандартная утилита Unix/Linux для смены пароля пользователя. Она работает интерактивно: спрашивает старый пароль, потом два раза новый, и если всё ок — меняет пароль в /etc/shadow. За кулисами она вызывает PAM-модули, проверяет политику сложности, срок действия, и так далее.


$ passwd username
Changing password for user username.
Current password:
New password:
Retype new password:

Если ты root, можно менять пароли другим пользователям без знания их текущего пароля.

chpasswd: для автоматизации и скриптов

chpasswd — это утилита, которая принимает на вход список пользователей и новых паролей в формате user:password (одна строка — один пользователь) и меняет их пачкой. Очень удобно для массовых операций, когда надо сбросить пароли сразу многим или при развёртывании новых серверов.


echo "user1:NewPass123" | chpasswd
echo -e "user1:NewPass123\nuser2:Qwerty2024" | chpasswd

chpasswd не спрашивает никаких подтверждений, не требует интерактива — просто читает из stdin и делает своё дело.

Что происходит под капотом?

  • Обе утилиты меняют хэш пароля в /etc/shadow (или в LDAP, если так настроено).
  • passwd использует PAM для проверки политики паролей, chpasswd — тоже, но чуть проще, и может быть настроен по-разному.
  • chpasswd поддерживает опцию -e (или --encrypted), если пароли уже захэшированы.

Как быстро и просто всё настроить? Практические советы и схемы

Для одного пользователя (ручная смена)


# Сменить пароль себе
passwd

# Сменить пароль другому пользователю (только от root)
passwd username

Массовая смена паролей (скрипты, автоматизация, Ansible)


# Сменить пароль сразу нескольким пользователям
echo -e "user1:Pass1\nuser2:Pass2" | chpasswd

# Если пароли уже захэшированы (например, SHA-512), используем -e:
echo "user3:$6$rounds=5000$saltsalt$hashhashhash" | chpasswd -e

Пример для Ansible


- name: Mass password reset
  ansible.builtin.shell: echo "user1:NewPass" | chpasswd
  become: yes

Сброс пароля без доступа к root (через sudoers)

Можно выдать право на выполнение passwd определённым пользователям через sudoers, чтобы не давать полный root.


# В /etc/sudoers:
bob ALL=(ALL) NOPASSWD: /usr/bin/passwd alice

Массовая смена паролей через файл


# users.txt:
user1:SuperSecret1
user2:SuperSecret2

# Команда:
chpasswd < users.txt

Примеры, кейсы — положительные и отрицательные

Сценарий passwd chpasswd Комментарий
Сменить пароль себе + passwd спрашивает старый пароль, chpasswd не подходит
Сменить пароль пользователю (от root) + + Оба варианта работают, но chpasswd быстрее для пачки
Массовая смена паролей скриптом + passwd не автоматизируется, chpasswd — идеален
Интеграция с Ansible/CI/CD + chpasswd легко встраивается в пайплайны
Смена пароля с политикой сложности + + Обе утилиты используют PAM, но зависит от настроек
Сброс пароля без интерактива + chpasswd не требует ввода, passwd — интерактивен

Положительный кейс

На проекте нужно было развернуть 100 новых пользователей на VPS с уникальными паролями. Использовали генератор паролей, создали файл users.txt и одной командой через chpasswd всё залили. Время — 2 минуты, никаких ошибок, всё автоматизировано.

Отрицательный кейс

Новичок попытался массово сменить пароли через цикл с passwd и expect — получилось криво, часть паролей не поменялась, система зависла, а в логах каша. Потом выяснил, что chpasswd делает то же самое за секунду.

Ошибки новичков, мифы и похожие утилиты

  • Миф: chpasswd менее безопасен, чем passwd.
    Реальность: Оба используют PAM и меняют хэши в shadow, главное — не передавать пароли в чистом виде через небезопасные каналы.
  • Ошибка: Использовать passwd в скриптах через expect — это костыль, и он ломается при малейшем изменении вывода.
  • Ошибка: Передавать пароли в командной строке (например, chpasswd user:pass), потому что их видно в ps и истории.
  • Миф: chpasswd не работает с политиками сложности.
    Реальность: Всё зависит от PAM-конфигов. Если политика настроена — она применяется.
  • Похожие утилиты: usermod -p (не рекомендуется, т.к. требует хэша!), gpasswd (для групп), passwd -l/-u (блокировка/разблокировка).

Статистика и сравнение с другими решениями

  • В 90% скриптов для массового сброса паролей на Linux используют chpasswd.
  • В корпоративных сетях с LDAP чаще используют ldappasswd или утилиты, завязанные на AD.
  • В Windows для подобных задач используют net user или PowerShell (Set-LocalUser).
  • В Docker-образах для инициализации пользователя почти всегда используют chpasswd (см. Dockerfile best practices).

Интересные факты и нестандартные способы

  • chpasswd можно использовать для сброса паролей на всех серверах разом через ssh + for — удобно для быстрого реагирования на инциденты.
  • Можно генерировать пароли заранее, захэшировать их через mkpasswd (man mkpasswd) и скармливать chpasswd с -e, чтобы не светить пароли в логах и истории.
  • chpasswd прекрасно работает в chroot-окружениях и контейнерах, если туда скопировать нужные бинарники и конфиги.
  • Можно использовать pwgen или openssl rand для генерации паролей в скриптах, сразу передавая их в chpasswd.
  • В некоторых дистрибутивах (например, Alpine) есть BusyBox-реализация chpasswd — она проще, но почти совместима с GNU.

Новые возможности: автоматизация и скрипты

  • chpasswd идеально ложится в пайплайны CI/CD, когда нужно после деплоя сбросить пароли сервисным пользователям.
  • Можно интегрировать с генераторами OTP или менеджерами секретов (Vault, Hashicorp, Bitwarden CLI) — вытаскиваешь пароль, скармливаешь chpasswd.
  • В Ansible, SaltStack, Puppet и других системах управления конфигурациями есть модули, которые под капотом используют chpasswd.
  • Можно реализовать self-service портал для пользователей: они сами отправляют запрос — бэкенд дергает chpasswd, всё автоматом.
  • В Dockerfile можно делать так:
    
    RUN echo "root:SuperSecret" | chpasswd
        

    И не париться с интерактивом.

Выводы и рекомендации

Если тебе нужно быстро и безопасно менять пароли на Linux-серверах — chpasswd твой лучший друг. Для ручной смены — passwd, для автоматизации и массовых операций — chpasswd. Не изобретай велосипед: не используй expect, не пиши скрипты на bash, которые парсят вывод passwd. Используй стандартные утилиты, и будет тебе счастье.

  • Используй chpasswd для массовых операций, автоматизации, интеграции с CI/CD и DevOps.
  • Используй passwd для ручной смены пароля или когда нужно обеспечить интерактивную смену с проверкой старого пароля.
  • Не передавай пароли в командной строке, используй stdin или файлы с ограниченным доступом.
  • Проверяй PAM-конфиги — именно они отвечают за политику сложности, срок действия и блокировки.
  • Для работы с большим числом серверов используй автоматизацию (Ansible, Salt, скрипты с ssh+chpasswd).

Помни: правильно настроенная система смены паролей — это не только безопасность, но и спокойствие твоих пользователей (и твоё). А если хочешь арендовать надёжный VPS или выделенный сервер — ты знаешь, куда идти.

Официальная документация:
man passwd
man chpasswd
Arch Wiki: Password


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked