Где и как хранятся пароли пользователей в Linux

Где хранятся пароли в linux

Содержание статьи

Где хранятся пароли в linux

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

Современные дистрибутивы используют алгоритмы хеширования, такие как SHA-512 или yescrypt, которые делают подбор пароля практически невозможным при условии корректной настройки. Каждый пароль преобразуется в хеш с использованием уникальной соли, добавленной к исходной строке перед вычислением. Это защищает от атак по заранее вычисленным таблицам хешей (rainbow tables).

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

Расположение файлов с паролями в системе

Основные данные о пользователях и их паролях в Linux хранятся в двух файлах: /etc/passwd и /etc/shadow. Первый содержит общую информацию о пользователях – имя, UID, GID, домашний каталог и оболочку. Ранее он также хранил пароли, но теперь для безопасности используется отдельный файл.

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

Для проверки соответствия данных в обоих файлах можно использовать команду pwck, которая выявляет несоответствия или отсутствующие записи. Доступ к /etc/shadow должен быть ограничен правами 600, чтобы предотвратить чтение файла обычными пользователями. Изменение прав или копирование этого файла недопустимо, так как это создаёт угрозу безопасности.

На системах, где используется централизованная аутентификация (LDAP, NIS, PAM), часть информации может храниться вне локальных файлов. Однако файлы /etc/passwd и /etc/shadow остаются базовыми элементами локальной аутентификационной структуры и применяются при работе системных служб и скриптов.

Структура и назначение файла /etc/passwd

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

Каждая строка в /etc/passwd соответствует одной учетной записи и состоит из семи полей, разделенных двоеточиями. Ниже представлена структура записи:

Поле Описание Пример
1. Имя пользователя Логин, используемый для входа в систему user1
2. Пароль Символ «x» указывает, что зашифрованный пароль хранится в файле /etc/shadow x
3. UID Уникальный числовой идентификатор пользователя 1001
4. GID Основной идентификатор группы, к которой принадлежит пользователь 1001
5. Описание (GECOS) Дополнительная информация – например, полное имя Иван Иванов
6. Домашний каталог Путь к директории, используемой как рабочая среда пользователя /home/user1
7. Оболочка входа Командная оболочка, запускаемая при входе /bin/bash

Проверить содержимое файла можно командой cat /etc/passwd или просмотреть отдельные поля с помощью awk -F: '{print $1,$6,$7}' /etc/passwd. Изменения в файле следует выполнять только через системные утилиты useradd, usermod и userdel, чтобы избежать повреждения структуры и нарушения доступа пользователей.

Хранение хэшей паролей в файле /etc/shadow

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

Каждая строка в /etc/shadow соответствует одной учетной записи и содержит несколько полей, разделённых двоеточиями:

  • Имя пользователя – совпадает с именем в /etc/passwd.
  • Хэш пароля – результат применения криптографического алгоритма (например, SHA-512, bcrypt, yescrypt). Если в поле стоит символ * или !, вход с паролем для этой учетной записи запрещён.
  • Дата последнего изменения пароля – хранится в виде количества дней, прошедших с 1 января 1970 года.
  • Минимальный и максимальный возраст пароля – ограничивают частоту его смены.
  • Поля истечения срока действия – задают срок блокировки и удаления учётной записи после бездействия.

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

Рекомендуется использовать алгоритмы с солью, например SHA-512 или yescrypt. Соль предотвращает использование заранее подготовленных таблиц для подбора (rainbow tables) и повышает стойкость хэшей. Настройки алгоритма определяются в файле /etc/login.defs и в параметрах PAM-модулей.

Контроль доступа к /etc/shadow осуществляется через права 0400 или 0600. Любая ошибка в их настройке открывает возможность чтения хэшей и последующего подбора паролей. Проверить права можно командой ls -l /etc/shadow.

Разделение прав доступа к файлам паролей

Разделение прав доступа к файлам паролей

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

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

Файл /etc/shadow содержит хэши паролей и должен быть доступен только суперпользователю. Его права доступа обычно следующие:

  • rw------- (600) – владелец root имеет полные права;
  • группа shadow может иметь ограниченные права для системных сервисов, требующих проверки подлинности;
  • остальные пользователи не имеют доступа ни к чтению, ни к записи.

Проверить права можно командой:

ls -l /etc/passwd /etc/shadow

Для повышения безопасности рекомендуется:

  1. Убедиться, что файл /etc/shadow принадлежит пользователю root и группе shadow.
  2. Проверять целостность прав с помощью утилит ls и stat.
  3. Не предоставлять доступ группе shadow обычным пользователям.
  4. Использовать контроль целостности (например, AIDE или Tripwire) для мониторинга изменений.

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

Типы алгоритмов хеширования, применяемые в Linux

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

MD5 ($1$) – устаревший вариант, который отличается низкой криптостойкостью и подвержен коллизиям. Использовать его не рекомендуется, поскольку современные процессоры легко подбирают такие хэши даже при наличии соли.

SHA-256 ($5$) и SHA-512 ($6$) – более безопасные алгоритмы, применяемые по умолчанию во многих системах. Они используют соль и большое количество итераций, что увеличивает время подбора. Предпочтителен вариант SHA-512 благодаря более длинному хэшу и повышенной устойчивости к атакам.

yescrypt ($y$) и bcrypt ($2y$) – современные адаптивные алгоритмы, обеспечивающие регулируемую сложность вычислений. Они устойчивы к атакам с использованием GPU и ASIC. yescrypt применяется по умолчанию в новых версиях Linux (например, в glibc и shadow-utils), заменяя устаревший SHA-512.

Argon2 – новейший алгоритм, включённый в некоторые реализации PAM и crypt(3). Поддерживает настройку по трём параметрам: объём памяти, количество потоков и итерации, что делает его эффективным против параллельных атак. Его использование рекомендуется в системах с повышенными требованиями к безопасности.

Проверить текущий алгоритм можно с помощью команды authconfig —test | grep hashing или изучив строку хэша в /etc/shadow. Для смены метода хеширования рекомендуется обновить настройки PAM и пересоздать пароли с помощью команды passwd, чтобы они были перехешированы с использованием более стойкого алгоритма.

Проверка и изменение хэшей паролей вручную

Хэши паролей в Linux хранятся в файле /etc/shadow. Для проверки актуальности хэша можно использовать команду sudo grep ‘имя_пользователя’ /etc/shadow. Строка содержит несколько полей, разделённых двоеточием, второе из которых представляет собой хэш пароля вместе с информацией о используемом алгоритме. Например, префикс $6$ указывает на SHA-512, $5$ – на SHA-256, $1$ – на MD5.

Для ручного изменения хэша пароля необходимо сгенерировать новый хэш с помощью утилиты openssl passwd или mkpasswd. Формат команды для SHA-512: mkpasswd -m sha-512 НовыйПароль. Полученный хэш подставляется на место старого во втором поле строки пользователя в /etc/shadow. После сохранения изменений они вступают в силу немедленно.

Важно соблюдать точное соответствие структуры строки: поля должны оставаться разделёнными двоеточием, а остальные параметры, такие как дата последней смены пароля и ограничения на смену, не должны быть изменены вручную без понимания их значения. Рекомендуется создавать резервную копию /etc/shadow перед любыми изменениями: sudo cp /etc/shadow /etc/shadow.bak.

Для проверки работоспособности нового пароля можно использовать команду su — имя_пользователя или попытку входа через SSH. Любые ошибки в формате строки хэша приведут к невозможности аутентификации пользователя.

Безопасное хранение паролей при аутентификации PAM

PAM (Pluggable Authentication Modules) управляет процессом аутентификации в Linux, предоставляя гибкий интерфейс для проверки учетных данных. Пароли пользователей не хранятся в открытом виде в PAM: модуль обращается к хэшам в файле /etc/shadow, используя алгоритмы, указанные в конфигурации системы.

Для безопасного хранения рекомендуется использовать современные алгоритмы хеширования, такие как SHA-512, с солью длиной не менее 16 байт. Соль предотвращает успешное применение радужных таблиц при взломе паролей.

Конфигурация PAM хранится в /etc/pam.d/. Для управления безопасностью паролей применяют модули pam_unix.so и pam_cracklib.so, задавая правила минимальной длины, сложности и срока действия пароля. Например, включение параметра sha512 в pam_unix.so обеспечивает использование сильного хэша.

Для защиты от атак по подбору паролей рекомендуется ограничивать количество неудачных попыток входа через модуль pam_tally2.so или pam_faillock.so. Эти модули блокируют учетные записи при превышении порога неудачных аутентификаций.

Резервное копирование файлов /etc/shadow и /etc/pam.d/ следует выполнять с ограничением доступа: только пользователи с правами root должны иметь возможность чтения этих файлов. Это предотвращает компрометацию хэшей паролей.

Регулярное обновление паролей и мониторинг использования устаревших алгоритмов хеширования помогают поддерживать высокий уровень безопасности при аутентификации через PAM.

Практические меры защиты файлов с паролями

Файлы /etc/passwd и /etc/shadow должны иметь строгие права доступа. Для /etc/shadow установите права 000 или 600, владелец root, группа shadow: chmod 600 /etc/shadow; chown root:shadow /etc/shadow.

Ограничьте доступ к системным резервным копиям и архивам, содержащим файлы с паролями. Храните их в зашифрованном виде с использованием утилит типа GPG или OpenSSL.

Внедрите аудит изменений файлов с паролями через auditd или систему inotify, чтобы фиксировать любые модификации и попытки чтения.

Используйте SELinux или AppArmor для ограничения доступа процессов к файлам паролей. Настройте политики так, чтобы только процессы аутентификации могли их читать.

Регулярно проверяйте целостность файлов с помощью контрольных сумм: sha256sum /etc/shadow. Сравнивайте значения с заранее сохраненными контрольными суммами.

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

Используйте PAM-модули с поддержкой безопасного хранения хэшей, чтобы минимизировать необходимость прямого доступа к файлу /etc/shadow для сторонних приложений.

В случае передачи файлов между системами применяйте безопасные каналы, например, SCP или SFTP с ключевой аутентификацией, исключая передачу в открытом виде.

Вопрос-ответ:

Где в Linux хранятся пароли пользователей?

В Linux пароли пользователей не хранятся в открытом виде. Для аутентификации используются хэши паролей, которые помещаются в файл /etc/shadow. Этот файл доступен только пользователю root и системным процессам, которые проверяют пароли при входе. В /etc/passwd также содержатся учетные записи пользователей, но там хранится лишь ссылка на хэш пароля или символ-заполнитель.

Что такое хэш пароля и зачем он нужен?

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

Можно ли вручную изменить пароль в файле /etc/shadow?

Технически возможно, но это требует осторожности. В /etc/shadow каждый пароль представлен в виде строки, содержащей алгоритм хеширования, соль и хэш. Изменять эти значения вручную рискованно: ошибки могут заблокировать пользователя. Безопаснее использовать команду passwd, которая автоматически создаст правильный хэш и сохранит его в файле.

Какие алгоритмы хеширования применяются для паролей в Linux?

В современных системах Linux чаще всего используют алгоритмы SHA-512, SHA-256 и Blowfish. Они поддерживают соль — случайную строку, которая добавляется к паролю перед хешированием, что защищает от атак с заранее вычисленными хэшами (rainbow tables). Старые системы могут использовать MD5, но этот алгоритм считается недостаточно надежным.

Как система проверяет пароль при аутентификации?

Когда пользователь вводит пароль, PAM (Pluggable Authentication Modules) применяет тот же алгоритм хеширования и соль, которые хранятся в /etc/shadow, и сравнивает полученный хэш с сохраненным. Если значения совпадают, доступ разрешается. Такой подход исключает необходимость хранения пароля в открытом виде и снижает риск его утечки.

Где конкретно в Linux хранятся пароли пользователей и почему они не находятся прямо в /etc/passwd?

Пароли пользователей в Linux хранятся в зашифрованном виде в файле /etc/shadow, а не в /etc/passwd. Файл /etc/passwd содержит информацию о пользователях, такую как имя пользователя, UID, GID, домашний каталог и оболочку, но поле для пароля в нём заменено на символ x, чтобы предотвратить открытый доступ к хэшам паролей. Файл /etc/shadow доступен только пользователю root и процессам с соответствующими привилегиями, что снижает риск компрометации. В нём хранится хэш пароля, алгоритм его генерации и дополнительные параметры, например дата последней смены пароля и срок действия. Такой подход обеспечивает изоляцию чувствительной информации от пользователей без привилегий и позволяет системе безопасно проводить аутентификацию.

Ссылка на основную публикацию