LinuxRuLinux без лишней теории
Учётные записи

Команда passwd в Linux: смена пароля и защита учётной записи

Редакция LinuxRu8 мин чтенияСоветы

Команда passwd в Linux меняет пароль: без аргументов свой, с sudo и именем пользователя чужой, а sudo passwd root задаёт пароль администратора. Кроме этого passwd блокирует учётные записи, показывает их статус и задаёт срок жизни пароля. Ниже все сценарии с примерами для Debian, Ubuntu и Fedora.

Команда passwd в Linux: смена пароля и защита учётной записи
Содержание
  1. Как устроено
  2. Свой пароль
  3. Чужой пароль и root
  4. Блокировка и статус
  5. Срок действия
  6. Сложность пароля
  7. Для скриптов
  8. Забыли пароль
  9. Ошибки
  10. Частые вопросы

Что делает passwd и где лежат пароли

Команда passwd меняет пароль учётной записи и управляет его сроком действия и блокировкой. Сами пароли в открытом виде нигде не хранятся: в файле /etc/shadow лежит только хеш. В Debian 13, Ubuntu 26.04 LTS и Fedora 44 по умолчанию используется алгоритм yescrypt, хеши таких паролей начинаются с $y$.

Прочитать и изменить /etc/shadow может только root, поэтому у программы /usr/bin/passwd выставлен бит SUID: обычный пользователь запускает её, а работает она с правами root, но позволяет менять только свой пароль. Проверку пароля, требования к сложности и запись хеша выполняет PAM, так что поведение команды немного различается между дистрибутивами.

В большинстве систем passwd входит в набор shadow-utils (в Debian и Ubuntu это пакет passwd). В Fedora долго жила отдельная реализация на libuser, а с Fedora 40 принят переход на версию из shadow-utils. Если какой-то ключ из статьи не срабатывает, проверьте, откуда у вас программа:

# Fedora, openSUSE
rpm -qf /usr/bin/passwd
# Debian, Ubuntu
dpkg -S /usr/bin/passwd

Как сменить свой пароль

Откройте терминал: в GNOME и KDE обычно работает Ctrl+Alt+T, либо найдите Терминал или Konsole в меню приложений.

Меню приложений Linux с найденным значком терминала
Терминал можно найти поиском в меню

Затем выполните команду без аргументов:

passwd

Система попросит текущий пароль, потом дважды новый. При вводе на экране ничего не отображается, даже звёздочки: это нормально, просто печатайте и жмите Enter. В конце появится сообщение об успешном обновлении.

Пароль пользователя одновременно является паролем для sudo. Именно его спрашивает система, когда вы ставите программы или правите системные файлы. В старой версии этой статьи это называлось "паролем sudo", но отдельного пароля у sudo нет: меняете свой пароль, меняется и то, что вводится в sudo.

Если вы заходите на сервер по SSH с паролем, после смены пароля текущая сессия не прервётся, а новый пароль понадобится при следующем входе. Ещё надёжнее перейти на ключи, это описано в статье о SSH-клиенте и ключах.

Пароль другого пользователя и пароль root

Администратор может задать пароль любому пользователю, не зная старого. Для этого нужен sudo:

sudo passwd anna

Для root есть два равноценных пути. Первый - войти в оболочку root и выполнить passwd там:

sudo -i
passwd
exit
Терминал после команды sudo -i с приглашением root
После sudo -i приглашение заканчивается символом решётки
Ввод нового пароля root командой passwd в терминале
Новый пароль вводится дважды

Второй - сделать то же одной командой. Обратите внимание: sudo здесь спросит ваш собственный пароль, а затем passwd попросит новый пароль для root.

sudo passwd root
Смена пароля root одной командой sudo passwd root
Альтернативный способ без входа в оболочку root

Нужен ли вообще пароль root

В Ubuntu, Linux Mint и Kubuntu учётная запись root по умолчанию заблокирована, всё администрирование идёт через sudo. Задавать root пароль там не обязательно, и многие админы этого не делают: меньше паролей, которые можно подобрать. Пароль root полезен, если вы хотите попасть в аварийную консоль systemd, которая его требует, или работаете без sudo, как в минимальной установке Debian. Если пароль root задали, а потом передумали, его можно снова заблокировать командой sudo passwd -l root. Как выдавать права через группы и visudo, рассказано в материале про пользователей и sudo.

Статус учётной записи, блокировка и сброс

Посмотреть, что происходит с паролем пользователя:

sudo passwd -S anna
# статус всех учётных записей
sudo passwd -Sa

Вывод состоит из семи полей: имя, статус пароля (P задан, L заблокирован, NP пароля нет), дата последней смены, минимальный и максимальный срок, период предупреждения и период неактивности в днях. Старая реализация Fedora писала статусы как PS, LK и NP, смысл тот же.

Временно закрыть вход по паролю, например для уволенного сотрудника или скомпрометированной учётки:

sudo passwd -l anna
# вернуть как было
sudo passwd -u anna

Блокировка ставит восклицательный знак перед хешем, и пароль перестаёт подходить. Учётная запись при этом не отключена полностью: вход по SSH-ключу продолжит работать. Чтобы закрыть доступ совсем, дополнительно истеките срок учётной записи: sudo usermod --expiredate 1 anna.

Ключ -e заставляет сменить пароль при следующем входе. Это стандартная процедура, когда вы выдаёте человеку временный пароль:

sudo passwd anna
sudo passwd -e anna

Ключ -d удаляет пароль, и в зависимости от настроек PAM пользователь сможет входить вообще без пароля. На машине, доступной по сети, так делать нельзя.

Срок действия пароля: passwd и chage

Политика сроков задаётся теми же ключами passwd. Полный набор показан в таблице, значения указываются в днях.

КлючЧто делаетПример
-S, --statusПоказать статус пароляpasswd -S anna
-l, --lockЗаблокировать парольpasswd -l anna
-u, --unlockСнять блокировкуpasswd -u anna
-e, --expireПотребовать смену при входеpasswd -e anna
-d, --deleteУдалить парольpasswd -d test
-n, --mindaysМинимум дней между сменамиpasswd -n 1 anna
-x, --maxdaysМаксимальный срок жизни пароляpasswd -x 180 anna
-w, --warndaysЗа сколько дней предупреждатьpasswd -w 14 anna
-i, --inactiveДней после истечения до отключенияpasswd -i 30 anna
-s, --stdinЧитать пароль со стандартного вводадля скриптов

Удобнее смотреть и менять сроки через chage, он показывает даты человеческим языком:

sudo chage -l anna
# пароль живёт 180 дней, предупреждение за 14
sudo chage -M 180 -W 14 anna
# принудительная смена при следующем входе
sudo chage -d 0 anna

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

Требования к сложности и почему короткий пароль - плохая идея

В 2021 году эта статья советовала поставить root короткий удобный пароль на домашней машине. Сегодня так делать не стоит. Ноутбук может оказаться в чужих руках, SSH могут случайно открыть наружу, а пароль пользователя защищает и sudo, и связку ключей браузера. Удобный вариант без ущерба безопасности - фраза из четырёх-пяти случайных слов: её легко набирать и трудно подобрать.

Проверку сложности выполняет модуль PAM pwquality. В Fedora он включён по умолчанию, в Debian и Ubuntu ставится отдельно:

# Debian, Ubuntu
sudo apt install libpam-pwquality
# настройки
sudo nano /etc/security/pwquality.conf

Пример строк в конфиге:

minlen = 12
dictcheck = 1
usercheck = 1

Если passwd отвечает BAD PASSWORD и объясняет причину (слишком короткий, словарное слово, похож на имя пользователя), обычный пользователь сменить пароль не сможет. Root получает только предупреждение и может настоять на своём, но лучше прислушаться.

Перед тем как менять pwquality и общие настройки PAM на удалённом сервере, держите открытой вторую сессию с root. Ошибка в конфиге может закрыть вход всем, и без запасной сессии придётся идти к консоли хостинга.

Смена паролей в скриптах: chpasswd и --stdin

Когда нужно задать пароли сразу нескольким учётным записям, используйте chpasswd. Он читает строки вида имя:пароль:

sudo chpasswd
# дальше вводите строки и завершите ввод Ctrl+D
anna:Временный-Пароль-2026
boris:Другой-Временный-2026

Можно подать файл: sudo chpasswd < users.txt. Файл после этого удалите через shred -u users.txt. Не пишите пароли прямо в командной строке вроде echo 'anna:pass' | chpasswd: строка попадёт в историю оболочки, а на многопользовательской машине её видно в списке процессов. Про историю команд и её очистку есть статья о горячих клавишах и истории терминала.

Ключ passwd --stdin делает похожее для одного пользователя, но в разных реализациях passwd он может отсутствовать. Для переносимых скриптов chpasswd надёжнее.

Если пароль забыт: сброс через GRUB

Когда пароль пользователя забыт, а другого администратора нет, пароль сбрасывают из режима восстановления. Нужен физический доступ к компьютеру.

Ubuntu и Debian

  1. При загрузке откройте меню GRUB: удерживайте Shift на BIOS или нажимайте Esc на UEFI.
  2. Выберите Дополнительные параметры, затем пункт с recovery mode.
  3. В меню восстановления выберите root, чтобы получить оболочку.
  4. Выполните команды ниже и перезагрузитесь.
mount -o remount,rw /
passwd anna
sync
reboot

Fedora

В меню GRUB нажмите e, в конец строки, начинающейся с linux, допишите rd.break и загрузитесь через Ctrl+X. Затем:

mount -o remount,rw /sysroot
chroot /sysroot
passwd anna
touch /.autorelabel
exit
reboot

Файл /.autorelabel нужен из-за SELinux: без него после смены пароля вход может не работать. Первая загрузка после этого идёт дольше обычного. Если диск зашифрован LUKS, без пароля шифрования ни один из способов не сработает, и это правильно. Как не потерять доступ к зашифрованному диску, рассказано в статье о шифровании LUKS и резервном ключе.

Частые ошибки passwd

  • Authentication token manipulation error. Чаще всего корень смонтирован только для чтения (в режиме восстановления забыли remount) или кончилось место на диске. Реже повреждены права на /etc/shadow.
  • You must wait longer to change your password. Сработал минимальный срок -n. Администратор может сбросить его: sudo passwd -n 0 anna.
  • Password unchanged. Новый пароль совпал со старым или вы ошиблись при повторном вводе.
  • anna is not in the sudoers file. У пользователя нет прав sudo, и чужой пароль он сменить не может. Добавьте его в группу sudo (Debian, Ubuntu) или wheel (Fedora, Arch).

Подробное описание ключей есть в man-странице passwd, а на своей машине в man passwd и man chage. Если интересна безопасность системы шире, загляните в материал о том, нужен ли антивирус в Linux.

Частые вопросы

Как сменить пароль root в Linux?

Выполните sudo passwd root и дважды введите новый пароль. Sudo сначала спросит пароль вашего пользователя.

Почему при вводе пароля в терминале ничего не отображается?

Так задумано: терминал не показывает даже звёздочки, чтобы никто не узнал длину пароля. Просто печатайте и нажмите Enter.

Чем пароль sudo отличается от пароля пользователя?

Ничем. Sudo спрашивает пароль текущего пользователя, отдельного пароля у sudo нет.

Как заблокировать пользователя в Linux?

Команда sudo passwd -l имя закрывает вход по паролю. Чтобы закрыть и вход по SSH-ключу, добавьте sudo usermod --expiredate 1 имя.

Как заставить пользователя сменить пароль при входе?

Выполните sudo passwd -e имя или sudo chage -d 0 имя. При следующем входе система потребует новый пароль.

Что делать, если забыл пароль пользователя?

Загрузитесь в режим восстановления через GRUB, перемонтируйте корень на запись и выполните passwd имя. В Fedora используется параметр rd.break и chroot /sysroot.

Документация и источники

Читайте также

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