Generate passwords and encrypt/decrypt content in Linux
OpenSSL is one of the utilities available with all major Linux distributions. We can use the same to encrypt and decrypt passwords in Linux to protect sensitive data.
Generate Random Passwords
We can utilities like mkpasswd or pwgen to generate random passwords if needed:
# generates multiple 8-character passwords pwgen # generates single random password makepasswd # generates multiple 12-character passwords pwgen 12 makepasswd --chars=12 # generates specified 12-character passwords, say 5 pwgen 12 5 makepasswd --chars=12 --count=5
Generate Encrypted/Hashed Passwords
We can generated encrypted passwords with utilities like makepasswd :
# generates 12-character password and encrypted password with crypt algorithm makepasswd --chars=12 --crypt # generates 12-character password and encrypted password with crypt algorithm + salt makepasswd --chars=12 --crypt --cryptsalt=20 # generates 12-character password and encrypted md5 password makepasswd --chars=12 --crypt-md5
With openssl , we can generated hashed-passwords for supplied password as input:
# generates hashed password with crypt algorithm openssl passwd -crypt my_password # generates hashed password with crypt algorithm + salt openssl passwd -crypt -salt my_salt my_password # generates hashed md5 password openssl password -1 my_password # generates hashed sha-256/512 password openssl password -5 my_password
Encrypting Contents with OpenSSL
Lets say we have a file with some sensitive content. We can encrypt sensitive content, say “my_content” with openssl with different encryption algorithms in the below manner:
# encrypt string with algorithm pbkdf2 with randomly generated salt and input password echo «my_content» | openssl enc -pbkdf2 -a -salt -pass pass:my_password # decrypt string (encoded as above) # note: just add parameter -d to above openssl parameters echo «bXlfY29udGVudAo=» | openssl enc -pbkdf2 -a -d -salt -pass pass:my_password # encrypt string with algorithm aes-256-cbc with randomly generated salt and input password echo «my_content» | openssl enc -aes-256-cbc -a -salt -pass pass:my_password # decrypt string (encoded as above) # note: just add parameter -d to above openssl parameters echo «U2FsdGVkX19MdDInWumh31tKJoqR5HQwSXlxj3NiRC8 wp-block-code»> cloud_user@d7e5dc06581c:~$ echo «my_content» | openssl enc -pbkdf2 -a -salt -pass pass:my_password bXlfY29udGVudAo= cloud_user@d7e5dc06581c:~$ echo «bXlfY29udGVudAo=» | openssl enc -pbkdf2 -a -d -salt -pass pass:my_password my_content cloud_user@d7e5dc06581c:~$ echo «my_content» | openssl enc -aes-256-cbc -a -salt -pass pass:my_password *** WARNING : deprecated key derivation used. Using -iter or -pbkdf2 would be better. U2FsdGVkX19MdDInWumh31tKJoqR5HQwSXlxj3NiRC8= cloud_user@d7e5dc06581c:~$ echo «U2FsdGVkX19MdDInWumh31tKJoqR5HQwSXlxj3NiRC8 jp-post-flair» >
🐧 Как хэшировать пароли в системах Linux
Мануал
Пароли никогда не следует хранить в виде обычного текста.
Независимо от того, идет ли речь о веб-приложении или операционной системе, они всегда должны быть в виде хэша (в Linux, например, хэшированные пароли хранятся в файле /etc/shadow).
Хеширование – это процесс, в ходе которого с помощью сложных алгоритмов пароль превращается в другую строку.
Такой процесс является односторонним: не существует способа вернуть хэшированный пароль к его первоначальному виду.
Хеширование часто предполагает использование случайных данных в качестве дополнительного входа для алгоритма хеширования, чтобы один и тот же пароль, хешированный два раза, не давал одинакового результата.
Эти случайные данные называются солью.
В этом уроке мы рассмотрим некоторые методы, которые можно использовать для хэширования паролей в Linux.
Хеширование пароля с помощью mkpasswd
Первый метод генерации хэша пароля, который мы рассмотрим в этом руководстве, заключается в использовании утилиты mkpasswd, поэтому первым делом необходимо убедиться, что она установлена в нашей системе.
Ранее мы уже рассматривали этот инструмент в статьях:
Приложение доступно в официальных репозиториях всех наиболее распространенных дистрибутивов Linux.
Для установки на Fedora необходимо выполнить следующую команду:
$ sudo dnf install mkpasswd
В Debian и его многочисленных производных приложение входит в пакет “whois” (он должен быть установлен по умолчанию):
После установки приложения на нашу систему мы можем использовать его для хэширования нашего обычного пароля.
Основной синтаксис следующий:
С помощью опции -m (сокращение от –method) мы указываем, какой алгоритм хэширования мы хотим использовать.
Чтобы получить список доступных алгоритмов, нужно просто передать “help” в качестве аргумента опции:
$ mkpasswd -m help Available methods: yescrypt Yescrypt gost-yescrypt GOST Yescrypt scrypt scrypt bcrypt bcrypt bcrypt-a bcrypt (obsolete $2a$ version) sha512crypt SHA-512 sha256crypt SHA-256 sunmd5 SunMD5 md5crypt MD5 bsdicrypt BSDI extended DES-based crypt(3) descrypt standard 56 bit DES-based crypt(3) nt NT-Hash
Рекомендуемый алгоритм – sha512crypt (именно он используется в Linux).
Как только мы запустим команду, нам будет предложено ввести пароль, который мы хотим хэшировать.
Программа работает в интерактивном режиме из соображений безопасности: если бы нам пришлось вводить пароль открытым текстом непосредственно в качестве аргумента какой-либо опции, он был бы виден в выводе ps как часть команды и в истории оболочки.
Хешированный пароль возвращается как вывод команды:
$ mkpasswd -m sha512crypt Password: $6$2sE/010goDuRSxxv$o18K52wor.wIwZp6aXXBC69phYwPQahKQo2ex8ce2.f0V9BtnYZc0KtTB0WGm2m5pNOcL1Ep3kgDWmJCz36B./
Соль генерируется случайным образом, но для передачи значения в явном виде мы можем использовать опцию -s (сокращение от –salt).
Если по какой-то причине мы все же хотим ввести хэшируемый пароль не интерактивным способом (опять же, это не рекомендуется), мы используем опцию –stdin и некоторую магию перенаправления:
$ mkpasswd -m sha512crypt --stdinХеширование пароля с помощью Python
Другой метод, который мы можем использовать для генерации хэша пароля в Linux, – это использование Python и модуля crypt.
Первым делом мы импортируем модуль, а затем используем входящую в него функцию crypt.
Функция имеет один обязательный аргумент – открытый текст, который мы хотим зашифровать; она возвращает односторонне хэшированный пароль, дополненный солью.
Метод хэширования можно передать явно в качестве второго аргумента функции, выбрав один из следующих (если он не указан, используется самый сильный из доступных на платформе):
- crypt.METHOD_SHA512
- crypt.METHOD_SHA256
- crypt.METHOD_BLOWFISH
- crypt.METHOD_MD5
- crypt.METHOD_CRYPT
crypt.METHOD_SHA512 является самым сильным.
При его использовании пароль хэшируется функцией sha512 с солью из 16 символов.
Чтобы избежать передачи исходного пароля как части команды, который также будет запомнен в истории оболочки python, мы должны также импортировать модуль getpass и сделать так, чтобы пароль запрашивался интерактивно с помощью метода getpass(), включенного в него.
Чтобы сгенерировать наш хэшированный пароль, выполните следующие действия:
>>> import crypt >>> import getpass hashed_password = crypt.crypt(getpass.getpass(), crypt.METHOD_SHA512) Password:
При работе из оболочки вышеприведенный пример можно выполнить как однострочный, вызвав интерпретатор Python с опцией -c, которая позволяет нам указать команду для непосредственного выполнения:
$ hashed_password="$(python3 -c 'import crypt; import getpass; print(crypt.crypt(getpass.getpass(), crypt.METHOD_SHA512))')"
В примере, показанном выше вы можете заметить, что мы использовали функцию print() для вывода сгенерированного хэшированного пароля, чтобы он был использован в качестве результата подстановки команды и стал значением переменной hashed_password.
Хеширование пароля с помощью openssl
Третий и последний метод генерации хэша пароля, который мы рассмотрим в этой статье, заключается в использовании команды openssl passwd.
Ранее мы уже рассматривали этот инструмент в статьях:
По умолчанию команда использует алгоритм crypt для генерации хэша пароля.
Чтобы использовать алгоритм sha512, вместо него нужно использовать опцию -6.
$ openssl passwd -6 Password: Verifying - Password: $6$82Bk5H60hZqXBSUp$GPdqJ1zNQOXwuXqUBBB59a4oaKah/HpR3nbiNrW1eXXPH48mTRZ3y6cOOMHnBtMjLF9IBfhDWfQMXMk8kM5kZ/
Как видите, по причинам безопасности, о которых мы уже говорили, даже при этом методе пароль запрашивается интерактивно; кроме того, нам предлагается ввести его второй раз, чтобы проверить.
Это поведение можно отключить с помощью опции –noverify.
Как и в других методах, соль генерируется автоматически, но у нас есть возможность указать ее напрямую с помощью опции –salt:
У нас также есть возможность прочитать пароль из файла. Для этого достаточно использовать опцию -in и передать в качестве аргумента путь к файлу, содержащему пароль. Предположим, что наш пароль записан в файле password.txt, мы напишем:
$ openssl passwd -6 -in password.txt
При использовании последней опции мы можем указать в файле более одного пароля (по одному на строку). Они будут хэшироваться отдельно, и результат будет возвращен командой.
Наконец, если нас не беспокоят вопросы безопасности, мы можем передать хэшируемый пароль непосредственно в качестве последнего аргумента команды:
$ openssl passwd -6 "plainpassword"
Заключение
В этом руководстве мы рассмотрели три метода хэширования паролей в системах Linux. Мы рассмотрели, как использовать утилиту mkpasswd, как генерировать хэш пароля с помощью языка программирования Python, используя модуль crypt, и, наконец, как выполнить ту же операцию с помощью openssl.
Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
- Аудит ИБ (49)
- Вакансии (12)
- Закрытие уязвимостей (105)
- Книги (27)
- Мануал (2 306)
- Медиа (66)
- Мероприятия (39)
- Мошенники (23)
- Обзоры (820)
- Обход запретов (34)
- Опросы (3)
- Скрипты (114)
- Статьи (352)
- Философия (114)
- Юмор (18)
Anything in here will be replaced on browsers that support the canvas element
OpenVPN Community Edition (CE) – это проект виртуальной частной сети (VPN) с открытым исходным кодом. Он создает защищенные соединения через Интернет с помощью собственного протокола безопасности, использующего протокол SSL/TLS. Этот поддерживаемый сообществом проект OSS (Open Source Software), использующий лицензию GPL, поддерживается многими разработчиками и соавторами OpenVPN Inc. и расширенным сообществом OpenVPN. CE является бесплатным для […]
Что такое 404 Frame? Большинство инструментов для взлома веб-сайта находятся в 404 Frame. Итак, что же представляют собой команды? Вы можете отдавать команды, используя повседневный разговорный язык, поскольку разработчики не хотели выбирать очень сложную систему команд. Команды Команды “help” / “commands” показывают все команды и их назначение. Команда “set target” – это команда, которая должна […]
В этой заметке вы узнаете о блокировке IP-адресов в Nginx. Это позволяет контролировать доступ к серверу. Nginx является одним из лучших веб-сервисов на сегодняшний день. Скорость обработки запросов делает его очень популярным среди системных администраторов. Кроме того, он обладает завидной гибкостью, что позволяет использовать его во многих ситуациях. Наступает момент, когда необходимо ограничить доступ к […]
Знаете ли вы, что выполняется в ваших контейнерах? Проведите аудит своих образов, чтобы исключить пакеты, которые делают вас уязвимыми для эксплуатации Насколько хорошо вы знаете базовые образы контейнеров, в которых работают ваши службы и инструменты? Этот вопрос часто игнорируется, поскольку мы очень доверяем им. Однако для обеспечения безопасности рабочих нагрузок и базовой инфраструктуры необходимо ответить […]
Одной из важнейших задач администратора является обеспечение обновления системы и всех доступных пакетов до последних версий. Даже после добавления нод в кластер Kubernetes нам все равно необходимо управлять обновлениями. В большинстве случаев после получения обновлений (например, обновлений ядра, системного обслуживания или аппаратных изменений) необходимо перезагрузить хост, чтобы изменения были применены. Для Kubernetes это может быть […]