Задумывались ли вы, насколько эффективно Linux управляет многопользовательской средой? В этой статье мы объясним, как Linux хранит пароли и логины пользователей и управляет ими.
Изучение файла /etc/passwd
Когда пользователь вводит имя пользователя и пароль, Linux сверяет введенный пароль с записями в неск
Contents
Изучение файла /etc/passwd
>/etc/passwd – один из наиболее важных файлов, в котором хранятся данные пользователя.
Последняя запись в этом файле соответствует «углеродным» пользователям. Существует несколько полей информации, разделенных двоеточиями (:).
carbon
: имя пользователя, которому соответствует эта запись.x
: указывает, что для пользователя существует пароль. Однако пароль хранится в файле «/etc/shadow». Если вместоx
отображается символ!
, это означает, что пароль не существует.1000
: идентификатор этого пользователя.1000
: идентификатор группы, к которой принадлежит этот пользователь.carbon, , ,
: указывает несколько полей информации, включая полное имя и номера телефонов. Здесь номера телефонов не указаны./home/carbon
: расположение домашнего каталога, назначенного этому пользователю./bin/bash
: оболочка по умолчанию, назначенная этому пользователю.
Давайте создадим еще одного пользователя, для которого сохранены некоторые номера телефонов. Пользователь «pluto» добавляется в систему с помощью команды adduser
.
Снова просматривая файл «etc/passwd», мы можем просмотреть полную информацию о пользователе «pluto». Поле, содержащее список полных имен и номеров, разделенных запятыми, называется «полем GECOS».
При создании пользователя значения домашнего каталога и оболочки по умолчанию, которые необходимо назначить, указываются в файле «/etc/adduser.conf».
Идентификаторы созданных пользователей начинаются с 1000 и заканчиваются 59999.
Пользователь «carbon» смог просмотреть записи файла «/etc/passwd», просто используя команду cat
. Давайте посмотрим на его разрешения.
Только пользователь root может писать в файл. Другие пользователи могут только читать файл. Поскольку этот файл доступен для чтения каждому, хранить здесь пароли нецелесообразно. Вместо этого он хранится в другом файле под названием «/etc/shadow».
Изучение файла /etc/shadow
Теперь попробуем просмотреть сохраненные пароли для пользователей «carbon» и «pluto» в файле «/etc/shadow».
Посмотрев на права доступа к файлу «/etc/shadow», мы видим, что только пользователь «root» может читать и писать в этот файл. Также файл могут читать только члены группы «тень». На самом деле группа «тени» пуста, но синтаксически необходима для этого файла.
Войдя в систему как «root», мы можем просмотреть последние десять строк «/etc/shadow». Для каждой записи в «/etc/passwd» есть соответствующая запись в этом файле. Формат будет такой:
pluto:$6$JvWfZ9u....:18283:0:99999:7:::
В этом файле каждая запись также имеет несколько полей, разделенных двоеточиями (:). Расшифруем запись для пользователя «Плутон».
pluto
: имя пользователя, которому соответствует эта запись.$6$JvWfZ9u.$yGFIqOJ....
: хешированный пароль пользователя, хранящийся вместе с информацией об используемом алгоритме хеширования. Кроме того, значение соли используется вместе с открытым текстовым паролем для создания хэша пароля.
{ plaintext password, salt} -> hashed passwordИзучение файла /etc/shadowржимое этого поля. Символ
$
используется в качестве разделителя для разделения трех полей.
$6 $JvWfZ9u. $yGFIqOJ....
$6
: используемый алгоритм хеширования. Вот список потенциальных алгоритмов хеширования.- $1 : MD5
- $2a: рыба-игло
- 2 года: Эксбловфиш
- 5 долларов США: SHA-256
- $6: SHA-512
$JvWfZ9u.
: количество соли.$yGFIqOJ....
: хешированный пароль.
Полученное хеш-значение сохраняется как зашифрованный пароль пользователя. Значение соли уникально для каждого пользователя. Даже если у двух пользователей одинаковый пароль в виде открытого текста, использование уникальной соли приведет к созданию уникального хеш-значения.
После остальных полей в этой записи
18283
: указывает количество дней с 1 января 1970 г., когда пароль был изменен в последний раз.0
: это поле используется для указания количества дней, по истечении которых пароль можно изменить. Значение 0 означает, что пароль можно изменить в любое время.99999
: в этом поле указывается количество дней, после которых пароль должен быть изменен . Значение 99999 указывает, что пользователь может сохранять пароль столько, сколько пожелает.7
: если срок действия пароля установлен на срок действия, в этом поле указывается количество дней, в течение которых следует предупреждать пользователя об истечении срока действия пароля.: : :
Еще три поля являются частью этой записи, хотя здесь они пусты. В первом указано количество дней ожидания после истечения срока действия пароля, по истечении которого учетная запись будет отключена. Во втором указано количество дней с 1 января 1970 года, в течение которых учетная запись была отключена. Третье поле зарезервировано для использования в будущем. Пустые поля означают, что срок действия существующего пароля для этого пользователя не истек и срок его действия не скоро истечет.
Последние семь полей, относящиеся к действительности пароля, в совокупности содержат информацию о «Политике устаревания паролей».
Значения по умолчанию, соответствующие «Политике устаревания паролей», указаны в файле «/etc/login.defs». Эти значения могут быть изменены пользователем с помощью команды change
.
А как насчет информации о группе?
Информация пользователя и пароли хранятся в файлах «/etc/passwd» и «/etc/shadow». Аналогично, информация о группе хранится в файле «/etc/group».
Выше выделены группы, принадлежащие пользователям «углерод» и «плутон». Когда пользователь создается в Linux, этот пользователь немедленно назначается группе с тем же именем, что и имя пользователя.
Члены группы также могут использовать групповой пароль для действий, связанных с группой. Значение x
указывает, что информация о пароле для этой группы будет находиться в файле «/etc/gshadow».
Однако доступ к «/etc/gshadow» ограничен пользователем «root».
Пользователь root может просматривать записи в файле «/etc/gshadow», который аналогичен «/etc/shadow». Глядя на запись группы «углерод», мы видим, что второе поле имеет значение !
, что указывает на то, что пароля для этой группы не существует.
Собираем все вместе
Когда пользователь желает войти в систему, хеш введенного пароля находится с использованием значения соли этого пользователя в «/etc/shadow». Затем он сравнивается с сохраненным хешем. Если значения совпадают, пользователю предоставляется доступ.
Связано: