Использование файла /etc/shadow

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

Если Linux использует обычный формат хранения паролей, то установив утилиту pwconv можно произвести конвертацию в формат shadow. Для конвертации назад (в традиционный нормальный формат) служит утилита pwunconv.

Пример строки в /etc/shadow может выглядеть вроде этого:

 

Что означают поля в /etc/shadow:

  1. username длиной до 8 символов, совпадает с username из файла /etc/passwd.
  2. Детали хеширования пароля и сам пароль. Если поле пароля содержит символы ! или * — это означает, что аккаунт заблокирован. Два восклицательных знака подряд !! говорят о том, что пароль никогда не был установлен. Пустая запись (то есть, ::) показывает, что для входа пароль не нужен. Поле с паролем состоит из сегментов $id$salt$hashed. В данном примере $6 = SHA-512 (алгоритм хеширования). Другие алгоритмы GNU/Linux:
    • $1$ is MD5
    • $2a$ is Blowfish
    • $2y$ is Blowfish
    • $5$ is SHA-256
    • $6$ is SHA-512

$Xwg3PsUW$ = Соль служит для смешения в функции хеширования. Соль делает бессмысленной переборку паролей по его хешу.

Длинная строка символов — хешированный пароль. Длина строки зависит от метода хеширования, для SHA-512 — это 86 символов. Для $1 = MD5 — 22 символа, для $5 = SHA-256 — 43 символа.

3. lastchanged — Время последнего изменения пароля. Измеряется в количестве дней с 1 января 1970.

4. Minimum — время жизни пароля или число дней до смены пароля (0 означает, что он может быть сменен всегда).

5. Maximum — число дней, после которых пароль должен быть сменен (99999 показывает, что пользователь может не менять пароль).

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

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

8. Expire Число дней (начиная с 1 января 1970) после которых пароль не может быть использован.

9. Зарезервировано для вероятного будущего использования.