Традиционные Unix системы хранят данные о пользователях вместе с зашифрованным паролем в текстовом файле « /etc/passwd ». Поскольку этот файл используется многими инструментальными средствами (типа «ls») чтобы отобразить владельца файла и другие подобные сведения, файл должен быть открыт на чтение для всех, что, конечно, дает отличный шанс хакерам.
Другой метод хранения информации, тот, который я всегда использую, затенение паролей. Как и раньше, есть файл /etc/passwd с данными о пользователях. Однако, вместо паролей ставится символ “x”, а пароли хранятся отдельно в файле « /etc/shadow », в котором хранятся зашифрованные пароли и некоторая дополнительная информация о паролях. Файл /etc/shadow доступен для чтения только root, что повышает защиту.
В Red Hat Linux установка пакета Shadow Password Suite, ответственного за теневые пароли, проста. Наберите как root:
С теневыми (shadow) паролями файл « /etc/passwd » хранит сведения о пользователях в виде:
Каждое поле в записи отделено символом “:”:
Username, до 8 символов. Регистр важен, обычно пишут в нижнем регистре.
Символ “x” в поле пароля. Пароли хранятся в файле « /etc/shadow ».
Числовой user id. Назначается скриптом « adduser ». Unix использует данное значение и значение группы для определения кому какие файлы принадлежат.
Числовой group id. Red Hat использует group id в довольно неожиданном способе усиления защиты файла. Часто group id равен user id.
Полное имя пользователя. Максимальная длина мне неизвестна, но лучше ограничиться разумными рамками (до 30 символов).
Домашний каталог пользователя. Обычно /home/username (например, /home/smithj). Там хранятся все личные файлы пользователя и его web-страницы.
Пользовательская оболочка. Обычно используется « /bin/bash » для доступа к оболочке bash.
Если нужно чтобы пользователь не имел доступа к shell, создайте скрипт « /bin/sorrysh », который выведет соотвтетствующее сообщение и завершит работу пользователя. Впишите скрипт сюда в качестве оболочки.
Замечание: Если пользователь должен передавать файлы по “FTP” shell должна быть нормальной оболочкой, например, « /bin/bash », а чтобы не давать shell-доступа надо настроить доступ в домашнем каталоге пользователя. См. раздел Администрирование Web-сервера и HTTP Proxy в главе 7.
Файл « /etc/shadow » хранит данные о пользователе в формате:
Как и в файле passwd, каждое поле в файле shadow отделяется двоеточием:
Username, до 8 символов. Совпадает с username в файле /etc/passwd.
Пароль, 13 символов (зашифрованный). Пустая запись (то есть, ::) показывает, что для входа пароль не нужен (обычно идея плохая), и запись «*» (то есть, :*:) показывает, что вход заблокирован.
Количество дней (с 1 января 1970), когда пароль был сменен в последний раз.
Число дней до смены пароля (0 показывает, что он может быть сменен всегда).
Число дней, после которых пароль должен быть сменен (99999 показывает, что пользователь может не менять пароль фактически никогда).
Число дней, в течение которых пользователь получает предупреждения о необходимости пароль сменить (7 для полной недели).
Число дней после окончания действия пароля, когда еще можно работать. Если пароль не сменить, после данного срока он выдохнется, и аккаунт будет заблокирован.
Число дней, начиная с 1 января 1970, после которых пароль будет заблокирован.
Зарезервировано для возможного будущего использования.
Источник
Фундаментальные основы Linux. Часть VII. Управление локальными учетными записями пользователей
Глава 27. Пароли пользователей
Данная глава содержит дополнительную информацию о паролях локальных пользователей.
В главе подробно описаны три метода установки паролей; с использованием утилиты passwd , с использованием реализации алгоритма шифрования passwd из библиотеки openssl , а также с использованием функции crypt в программе на языке C.
Кроме того, в данной главе обсуждаются параметры паролей и методики отключения, аннулирования или блокировки учетных записей пользователей.
Утилита passwd
Файл shadow
Файл /etc/shadow содержит таблицу с девятью разделенными двоеточиями столбцами. Эти девять столбцов (слева направо) содержат имя пользователя, зашифрованный пароль, время последнего изменения пароля (первый день соответствует 1 января 1970 года), количество дней, в течение которых пароль должен оставаться неизменным, день истечения срока действия пароля, количество дней перед истечением срока действия пароля, в течение которых должно выводиться предупреждение, количество дней после истечения срока действия пароля, по прошествии которых учетная запись должна быть отключена, а также день, когда учетная запись была отключена (также с начала 1970 года). Последнее поле пока не имеет значения.
Все пароли в примере выше являются хэшами фразы hunter2 .
Шифрование ключевых фраз с помощью утилиты passwd
Шифрование ключевых фраз с помощью утилиты openssl
Другой способ создания учетных записей пользователей с паролями заключается в использовании параметра -p утилиты useradd, но в случае использования данного параметра утилите необходимо передавать уже зашифрованный пароль. Вы можете зашифровать пароль с помощью команды openssl passwd .
Помните о том, что после выполнения данной команды ваш пароль в открытом виде будет сохранен в файле истории команд командной оболочки!
Шифрование ключевых фраз с помощью функции crypt
Обратили ли вы внимание на то, что первые два символа зашифрованного пароля являются значением salt ?
Файл /etc/login.defs
Утилита chage
Блокировка учетных записей
Пароли из файла /etc/shadow не могут начинаться с символа восклицательного знака. Если второе поле в строке из файла /etc/passwd начинается с символа восклицательного знака, пароль не может использоваться.
Использование данной особенности обычно называется блокировкой , деактивацией или отключением пользовательской учетной записи. Помимо текстового редактора vi (или vipw) вы можете использовать утилиту usermod для этой цели.
Следует подходить с осторожностью к работе и учитывать различия параметров интерфейса командной строки утилит passwd , usermod и useradd в различных дистрибутивах Linux. Проверяйте содержимое локальных файлов при использовании таких возможностей, как «деактивация, отключение или блокировка» учетных записей пользователей и их паролей.
Редактирование локальных файлов
Практическое задание: пароли пользователей
1. Установите пароль hunter2 для пользователя serena .
2. Также установите пароль для пользователя venus , после чего заблокируйте учетную запись пользователя venus с помощью утилиты usermod . Проверьте наличие признаков блокировки в файле /etc/shadow до и после осуществления блокировки.
3. Используйте команду passwd -d для деактивации пароля пользователя serena . Проверьте наличие строки для пользователя serena в файле /etc/shadow до и после осуществления деактивации.
4. Каковы различия между операцией блокировки пользовательской учетной записи и операцией деактивации пароля пользовательской учетной записи, которые мы только что осуществляли с помощью команд usermod -L и passwd -d ?
5. Попытайтесь изменить пароль serena на пароль serena as serena.
6. Сделайте так, чтобы пользователь serena был обязан изменять пароль через каждые 10 дней.
7. Сделайте так, чтобы каждый новый пользователь был обязан изменять свой пароль через каждые 10 дней.
8. Воспользуйтесь учетной записью пользователя root для создания резервной копии файла /etc/shadow . Используйте текстовый редактор vi для копирования хэша пароля hunter2 из строки пользователя venus в строку пользователя serena . Может ли после этого пользователь serena войти в систему с паролем hunter2 ?
9. В каких случаях следует использовать утилиту vipw вместо vi ? Какая проблема может возникнуть при использовании текстового редактора vi или vim для редактирования файла паролей?
10. Используйте команду chsh для вывода списка доступных командных оболочек (данная команда будет работать исключительно в дистрибутивах RHEL/CentOS/Fedora) и сравните вывод с выводом команды cat /etc/shells .
11. Какой параметр утилиты useradd позволяет установить имя домашней директории пользователя?
12. Как можно определить, заблокирован или разблокирован пароль пользователя serena ? Предложите решение на основе утилиты grep , а также решение на основе утилиты passwd .
Корректная процедура выполнения практического задания: пароли пользователей
1. Установите пароль hunter2 для пользователя serena .
2. Также установите пароль для пользователя venus , после чего заблокируйте учетную запись пользователя venus с помощью утилиты usermod . Проверьте наличие признаков блокировки в файле /etc/shadow до и после осуществления блокировки.
Обратите внимание на то, что в результате выполнения команды usermod -L перед хэшем пароля добавляется символ восклицательного знака.
3. Используйте команду passwd -d для деактивации пароля пользователя serena . Проверьте наличие строки для пользователя serena в файле /etc/shadow до и после осуществления деактивации.
4. Каковы различия между операцией блокировки пользовательской учетной записи и операцией деактивации пароля пользовательской учетной записи, которые мы только что осуществляли с помощью команд usermod -L и passwd -d ?
Блокировка предотвратит вход пользователя в систему с использованием установленного пароля благодаря добавлению символа ! перед хэшем пароля в файле /etc/shadow .
Деактивация с помощью утилиты passwd приведет к удалению хэша пароля из файла /etc/shadow .
5. Попытайтесь изменить пароль serena на пароль serena as serena.
Войдите в систему с именем пользователя serena , после чего выполните команду: passwd serena . Исполнение команды должно завершиться неудачей!
6. Сделайте так, чтобы пользователь serena был обязан изменять пароль через каждые 10 дней.
7. Сделайте так, чтобы каждый новый пользователь был обязан изменять свой пароль через каждые 10 дней.
8. Воспользуйтесь учетной записью пользователя root для создания резервной копии файла /etc/shadow . Используйте текстовый редактор vi для копирования хэша пароля hunter2 из строки пользователя venus в строку пользователя serena . Может ли после этого пользователь serena войти в систему с паролем hunter2 ?
9. В каких случаях следует использовать утилиту vipw вместо vi ? Какая проблема может возникнуть при использовании текстового редактора vi или vim для редактирования файла паролей?
Утилита vipw выведет предупреждение в том случае, если кто-либо еще в данный момент редактирует данный файл (с помощью утилиты vipw ).
10. Используйте команду chsh для вывода списка доступных командных оболочек (данная команда будет работать исключительно в дистрибутивах RHEL/CentOS/Fedora) и сравните вывод с выводом команды cat /etc/shells .
11. Какой параметр утилиты useradd позволяет установить имя домашней директории пользователя?
12. Как можно определить, заблокирован или разблокирован пароль пользователя serena ? Предложите решение на основе утилиты grep , а также решение на основе утилиты passwd .
Источник
Структура хранения данных о пользователе в Linux. Файл /etc/passwd
Как упоминалось ранее, (в статье про то, как можно посмотреть список пользователей на компьютере под Linux), есть файл /etc/passwd , в котором хранятся основные данные всех пользователей Linux. В этой статье подробно рассмотрим, что это за данные и в каком формате они записываются и хранятся. Файл /etc/passwd — обычный текстовый файл и его можно открыть, посмотреть и изменить, если есть права доступа к нему. Обычно эти права есть у пользователя root .
Содержимое файла /etc/passwd
Если отрыть и посмотреть содержимое файла /etc/passwd , то можно увидеть, что он состоит из строк, которые начинаются с имени пользователя, после которого через знак двоеточия : следуют ряд текстовых записей. Некоторые записи могут отсутствовать, и тогда двоеточия идут одним за другим. Всего в одной строке шесть двоеточий, разделяющих семь записей, относящихся к одному пользователю. В одной строке содержится информация только об одном пользователе. Так по количеству строк можно определить, сколько всего пользователей зарегистрировано на данной машине.
Структура записей о пользователе Linux в файле /etc/passwd
Итак, разберём поля, относящиеся к пользователю в этом файле. Как было указано их ровно семь:
Поле login содержит регистрационное имя (или логин) пользователя. Регистрационные имена должны быть уникальными и представлять собой строки не длиннее 32 символов (любые, кроме двоеточия и символа новой строки). По сути дела, имя пользователя — это его короткий и легко запоминаемый псевдоним, который используется при входе в систему и часто включается в адреса электронной почты.
Поле password
Поле password предназначено для хранения пароля пользователя. Но хранить его в явном виде, да ещё и все пароли в одном месте, не безопасно. Поэтому в этом поле обычно стоит символ x , вместо паролей хранятся их хэши, и не в этом поле, а в специальном файле /etc/shadow . Таким образом, даже если кому-то удастся получить файл /etc/passwd , то паролей пользователей в нём нет и требуется ещё файл /etc/shadow , в котором хранятся хэши паролей (зашифрованные записи самих паролей). То есть пароль пользователя в явном виде не знает даже администратор. Можно конечно порадоваться, но админ всегда может поменять ваш пароль и войти с этим новым паролем на компьютер. Так что root — всё равно имеет доступ ко всему на компьютере. (Другое дело, что при смене пароля придётся объяснять пользователю, почему он вдруг не может войти под своим логином, но это уже другая история.) 😉
Поле UID
Поле UID содержит идентификатор пользователя. Идентификатор пользователя — это число от 0 до 2 32 -1. Пользователь с идентификатором 0 (обычно root ) называется суперпользователем и имеет право на выполнение любых операций в системе. Принято соглашение о выделении «специальным» пользователям ( bin , daemon ), назначение которых — только запуск определённых программ, маленьких идентификаторов (меньше 100 или, в некоторых дистрибутивах Linux, меньше 500). По UID в некоторых программах можно определить, что за пользователь совершает (или совершил (в логах)) какое-либо действие. В системе могут существовать несколько пользователей с одним идентификатором. Это нередко используется взломщиками, когда они после проникновения в систему создают себе учётную запись с UID =0. В результате они выглядят как обычные пользователи, но на самом деле имеют права root .
Поле GID
Поле GID содержит идентификатор группы пользователя. Один пользователь в UNIX может принадлежать к одной или нескольким группам, которые используются для задания прав более чем одного пользователя на тот или иной файл. Максимальное количество групп, в которых может состоять один пользователь, разное в разных вариантах системы. Список групп с их участниками задаётся в /etc/group . В файле /etc/passwd указывается идентификатор группы по умолчанию.
Поле GECOS
Поле GECOS хранит вспомогательную информацию о пользователе (номер телефона, адрес, полное имя и так далее). Оно не имеет чётко определённого синтаксиса.
Поле home
Поле home содержит путь папке пользователя (домашнему каталогу). После входа в систему пользователь оказывается в своём домашнем каталоге, в котором хранятся данные пользователя: файлы, логи и прочая информация, относящаяся к работе этого пользователя на данном компьютере. Если на момент входа в систему домашний каталог отсутствует, то система выдаёт сообщение об ошибке и отказывается допустить пользователя к командной строке. Такое поведение не характерно для GNU/Linux; в большинстве дистрибутивов этой ОС просто выводится предупреждение, после чего пользователь попадает в каталог « / ». В целях безопасности это можно изменить посредством установки параметра DEFAULT_HOME в файле /etc/login.defs в значение no .
Для информации: В → этой статье предложено несколько способов того, как получить путь к домашней директории пользователя.
Поле shell
Поле shell содержит данные по регистрационной оболочке, подключенной к учётной записи пользователя. В поле регистрационной оболочки задаётся shell , то есть интерпретатор командной строки. Здесь может быть указана любая программа, и пользователь может сам выбирать для себя наиболее подходящую при помощи команды chsh . Тем не менее, некоторые системы в целях безопасности требуют, чтобы суперпользователь root явно разрешил использовать приложение в качестве интерпретатора командной строки. Для этого используется специальный файл /etc/shells , содержащий список допустимых оболочек. Для того, чтобы отключить доступ пользователя к shell , в это поле можно ввести значение /bin/false . Таким образом, пользователь при попытке зайти в систему через консоль будет попадать на обработчик /bin/false вместо запуска оболочки shell заданной в системе по умолчанию, например /bin/bash или /bin/date .