- Home »

Смена и сброс паролей: 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
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.