- Создаем хранилище паролей в Linux при помощи утилиты Pass
- Подготовка к установке и настройке
- Генерируем открытый и закрытый ключи шифрования
- Где хранятся пароли пользователей Linux
- Управление учетными записями в Linux. Часть 1. Хранение учетных данных
- Где хранятся учетки
- Быстрый перебор
- И еще немного… соли
- Заключение
Создаем хранилище паролей в Linux при помощи утилиты Pass
Про менеджер паролей Pass рассказывал в отдельном посте, но там было только упоминание преимуществ утилиты, про установку и настройку тогда ничего не сказал. Пользуюсь этой утилитой на протяжении полугода, думаю, что достаточный срок, чтобы рекомендовать ее подписчикам и читателям, желающим обзавестись безопасным хранилищем паролей. Готовьте чай и вкусняшки и приступайте к чтению.
Если вы еще не подписаны на канал Просто Код, то пора сделать это. Также подпишитесь на обновления канала в Телеграме , чтобы получать уведомления о выходе новых заметок.
Подготовка к установке и настройке
Для того, чтобы в итоге получить хранилище паролей нам понадобятся:
- дистрибутив Linux — какой именно, значения не имеет.
- GnuGPG — утилита для шифрования информации и создания электронных цифровых подписей (установлена по-умолчанию).
- Pass — непосредственно сам менеджер паролей.
Генерируем открытый и закрытый ключи шифрования
Каждый пароль, который мы будем создавать в Pass будет зашифрован (и в последующем расшифрован) при помощи асимметричной пары ключей: публичный (открытый) ключ будет использоваться для шифрования, непубличный (закрытый) будет использоваться для дешифровки. Поэтому нам необходимо эту пару вначале сгенерировать. Для этого открываем терминал и вводим соответствующую команду:
После нажатия клавиши Enter вам необходимо будет ввести следующие данные:
- Тип шифрования — выбираем классический RSA.
- Длина ключа в битах — ставим максимальную длину в 4096 бит, так с одной стороны шифрование/дешифрование будет происходить дольше, но с другой, безопаснее.
- Время жизни ключа — ставим 0, то есть ключи не будут иметь срока жизни
- Реальное имя — указываем что хотим, так как эти данные будут использоваться для формирования подписей, которыми в Pass мы пользоваться не будем.
- Адрес электронной почты — можете указать существующий, можете выдуманный, главное чтобы вы его запомнили.
- Комментарий — любой, какой взбредет в голову.
После подтверждения введенной информации вас ждет самый важный пункт создания ключей: ввод пассфразы (парольной фразы), которая будет использоваться при попытке доступа к зашифрованным паролям. Эту пассфразу нужно не просто ввести, но запомнить или (если с памятью не очень) где-нибудь зафиксировать, так как в случае если вы не сможете вспомнить эту фразу, то доступ к паролям будет утрачен. Ввод парольной фразы необходимо будет произвести дважды.
Где хранятся пароли пользователей Linux
В Linux нет особого реестра, где бы хранились настройки программ, данные пользователей и другие компоненты системы. Всё хранится в файлах. В этой небольшой статье мы поговорим о том, где хранятся пароли пользователей Linux.
Изначально для хранения паролей использовался файл /etc/passwd. Но этот файл доступен для чтения всем пользователям. Поэтому, из соображений безопасности, пароли пользователей были перенесены в файл /etc/shadow. Этот файл доступен для чтения только пользователю root.
Важно отметить, что пароли в этом файле хранятся не в открытом виде, а в хэшированном. Существует несколько алгоритмов хэширования паролей для Linux. Подробно всё это рассматривалось в статье про смену пароля Linux. Сейчас же давайте посмотрим на общий синтаксис файла /etc/shadow:
В первой строке представлены следующие данные:
- root — имя пользователя, для которого сохранен пароль;
- $6$yr. — хэш пароля, длина хэша от пароля никак не зависит, в данном случае зашифровано слово password;
- 18376 — дата последнего изменения пароля;
- 0 — количество дней на смену пароля, если его срок действия истёк;
- 999999 — количество дней от момента последней смены пароля до момента, когда надо сменить пароль принудительно;
- 7 — за сколько дней пользователь будет предупреждён о необходимости смены пароля.
- Ещё три поля — задают параметры отключения учётной записи пользователя.
Это всё, что следует знать об этом файле. В Linux есть ещё одно место, где приложения хранят свои пароли, SSH-ключи и другие секретные данные. Это хранилище ключей. В Gnome утилита называется SeaHorce. Вы можете найти её по названию в главном меню:
В самой утилите вы сможете найти и удалить ключи от различных приложений, ключ от хранилища паролей Chromium, токен доступа в Skype, а также все SSH-ключи, добавленные к вашей системе.
Естественно, здесь всё тоже захэшировано и просто прочитать пароль не получиться, если, конечно, какое-нибудь приложение не хранит их в открытом виде. Теперь вы знаете, где хранятся пароли в Linux. На этом всё.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Управление учетными записями в Linux. Часть 1. Хранение учетных данных
Файлы в операционках семейства Linux можно назвать основой всего. Для Linux все есть файл. Другими словами, файлы это не только объекты для хранения информации, но и устройства, тоннели, сокеты и многое другое. При этом, нам необходимы разграничивать доступ к тем или иным файлам в зависимости от прав пользователя, обращающегося к файлу.
У каждого файла в Linux системах есть владелец (user). И как мы уже говорили, у каждого пользователя есть уникальный идентификатор – user ID. Еще есть группы, то есть объединения пользователей по тому или иному признаку. Каждый пользователь должен состоять минимум в одной группе, но есть возможность добавить пользователя во множество групп. Так же, как и у пользователя, группа имеет уникальный идентификатор группы называемый GID – group ID.
Где хранятся учетки
Информацию об учетных записях ОС Linux хранит в файле /etc /passwd .
Он содержит следующее:
Где:
User ID — логин;
Password – наличие пароля;
UID — идентификатор пользователя;
GID — идентификатор группы по умолчанию;
User Info – вспомогательная информация о пользователе (полное имя, контакты и т.д.)
Home Dir — начальный (он же домашний) каталог;
Shell — регистрационная оболочка, или shell.
Когда-то, на заре становления Линукс, в файле /etc/passwd хранились также хэши паролей от учетных записей пользователей. Но тогда эти данные становились легкой добычей злоумышленников, так как любой пользователь мог прочитать этот файл и скопировать хэши для последующей расшифровки.
В качестве проверки можно под учеткой обычного пользователя (не root) ввести cat /etc/passwd и вы получите содержимое файла.
Для хранения хэшей паролей в современных Линукс используется файл /etc/shadow .
И вот к содержимому этого файла обычные пользователи уже доступа не имеют. Таким образом, обеспечивается защита хэшей от пользовательского доступа.
Файл /etc/shadow имеет следующую структуру:
loginID – имя пользователя;
password – пароль в зашифрованном виде;
lastchg – количество дней c 1.01.1970, когда пароль был изменен в последний раз;
min – минимальное число дней между сменами пароля;
max – максимальное число дней, в течении которых пароль будет валиден;
warn – количество дней за которые пользователь будет предупрежден об истечении пароля;
inactive – количество дней, в течении которых пользователь может быть неактивен перед блокировкой;
expire – дата, когда истекает срок пользовательской учетной записи.
Отсутствие доступа к /etc/shadow для обычных пользователей конечно усложняет жизнь потенциальным взломщикам, но не исключает полностью возможность получить доступ к хэшам. При наличии физического доступа злоумышленник может загрузиться с флешки и подмонтировав раздел скопировать нужный файл к себе. Аналогично в случае использования виртуализации можно скопировать выключенную виртуалку к себе и затем, также загрузиться со сменного носителя.
В случае, если хакер получил права обычного пользователя, например www, он может попытаться повысить привилегии для того, чтобы прочитать файл. Также, если пользователь может загружать любые docker-контейнеры, то при определенных условиях он может получить права на чтение /etc/shadow. Об этом мы подробно поговорим в третьей статье.
Быстрый перебор
Не углубляясь в тему взлома (все-таки эта статья больше про администрирование Linux) кратко опишем дальнейшие действия злоумышленника после получения доступа к хэшам паролей.
Перебор паролей даже на достаточно мощной машине процесс довольно продолжительный. И для того, чтобы его максимально ускорить существуют наборы сгенерированных заранее хэшей паролей, например все комбинации из цифр длиной до 10 символов, маленьких латинских букв до 10 символов и т.д. Более сложные комбинации тоже можно получить готовыми, но это уже будет стоить денег. Тем не менее взломщик может сэкономить много времени используя готовые хэши.
И еще немного… соли
Для решения проблемы использования готовых хэшей разработчики ОС Linux стали использовать соль (salt), то есть набор из нескольких дополнительных байт, который добавлялись к паролю перед хэшированием.
Обычно формат пароля, хранимого в /etc/shadow представляет собой:
$id $salt $hashed, где $id — алгоритм, которым шифруется пароль ($1 is MD5, $2a is Blowfish, $2y is Blowfish, $5 is SHA-256, $6 is SHA-512).
Таким образом, использование соли для шифрования паролей осложняет перебор, так как не позволяет использовать готовые таблицы.
Заключение
В этой статье мы рассмотрели механизмы работы с учетными записями в ОС семейства Linux, в частности механизм обеспечения безопасности при хранении хэшей паролей. В следующей статье мы начнем говорить о настройках доступа и тех ошибках могут допустить администраторы при выполнении этих настроек.
Вместо заключения хочу пригласить вас на бесплатные демоуроки по Linux от OTUS. Зарегистрироваться на уроки можно по ссылкам ниже: