теневые пароли

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 12706
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: теневые пароли

Непрочитанное сообщение Olej » 15 сен 2019, 18:25

Olej писал(а): И, наконец, 3-е поле - это хешированное значение, с которым и сверяется хеш (с salt) вводимого вами пароля. Обратная задача: зная salt и результирующее хешированное значение - не решаемая, таким образом пароль не хранится нигде в системе и не восстанавливаем!
Далее...
Если одну и ту же команду mkpasswd повторять несколько раз последовательно, то, естественно, повторяется результат:

Код: Выделить всё

olej@astra:~$ mkpasswd -m sha-512 --salt=zxc12345vbnm 123
$6$zxc12345vbnm$/MRL9KqNdzy1xEKNvtW/o5kSxXcJ8yQ551OyuW8R.XwOHTQXE.qJSKJdhumG/XWOVfaeKFaJCznZ//4iZrait0

olej@astra:~$ mkpasswd -m sha-512 --salt=zxc12345vbnm 123
$6$zxc12345vbnm$/MRL9KqNdzy1xEKNvtW/o5kSxXcJ8yQ551OyuW8R.XwOHTQXE.qJSKJdhumG/XWOVfaeKFaJCznZ//4iZrait0
Но реально mkpasswd вызывается без предопределённого --salt= , и тогда при каждом последовательном вызове берётся случайное значение строки salt (и даже длина её от раза к разу - случайная).
Тогда последовательные, друг за другом, вызовы mkpasswd будут выглядеть так:

Код: Выделить всё

olej@astra:~$ mkpasswd -m sha-512 123
$6$OyH3td/5X$WLXAoa2pUbql4A1jXQqt2G8nFlzKVNq30ADuZasEh.tMEIUNS.UGTPtuu4Up.soxNdPnfU8zrDpWrkU.opmLF/

olej@astra:~$ mkpasswd -m sha-512 123
$6$sXWxZTMDbmho9Z$UUy87d1DKWO6yLRMnUB09YhF97DG8/uhSd91N2XxC4h4Dak0nCqEtuuo8JL7dRXVE4pfigA7BO3XEpNp3fZHF1

olej@astra:~$ mkpasswd -m sha-512 123
$6$hnZEgRiW5$jyQTLVCMIoRy6zdu5Bj5UIeH8.MZE5wyoIGhriA/.GM.MIX23n5adMFhdQslCdFh.nV/8qIyDHoFkQ8DqSYog0
Результат каждый раз отличается!

P.S. Понятно, почему требуется хорошая энтропия генератора случайных значений... Но в Linux, с его новыми генераторами, с этим - очень неплохо.
См. по этому поводу: генератор случайных чисел.

Аватара пользователя
Olej
Писатель
Сообщения: 12706
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: теневые пароли

Непрочитанное сообщение Olej » 15 сен 2019, 18:54

В некоторых дистрибутивах ... RHEL, защищённых Astra Linux SE и др. - просто нет такой утилиты:

Код: Выделить всё

olej@astra:/bin$ sudo find / -name mkpasswd
olej@astra:/bin$
Но это не принципиально важно - у них хоть и нет утилиты mkpasswd, но всё то же можно получить скриптом Perl, который и обеспечивает работу утилиты mkpasswd (обрабатываем пароль 123):

Код: Выделить всё

olej@astra:~$ perl -e 'print crypt(q/123/, q/$6$zxc12345vbnm$/), "\n"'
$6$zxc12345vbnm$/MRL9KqNdzy1xEKNvtW/o5kSxXcJ8yQ551OyuW8R.XwOHTQXE.qJSKJdhumG/XWOVfaeKFaJCznZ//4iZrait0

olej@astra:~$ perl -e 'print crypt(q/123/, q/$6$zxc12345vbnm$/), "\n"'
$6$zxc12345vbnm$/MRL9KqNdzy1xEKNvtW/o5kSxXcJ8yQ551OyuW8R.XwOHTQXE.qJSKJdhumG/XWOVfaeKFaJCznZ//4iZrait0

olej@astra:~$ perl -e 'print crypt(q/123/, q/$6$zxc12345vbnm$/), "\n"'
$6$zxc12345vbnm$/MRL9KqNdzy1xEKNvtW/o5kSxXcJ8yQ551OyuW8R.XwOHTQXE.qJSKJdhumG/XWOVfaeKFaJCznZ//4iZrait0
Сравните с тем результатом, что был получен раньше утилитой mkpasswd в Astra Linua CE.

Код: Выделить всё

olej@astra:~$ mkpasswd -m sha-512 --salt=zxc12345vbnm 123
$6$zxc12345vbnm$/MRL9KqNdzy1xEKNvtW/o5kSxXcJ8yQ551OyuW8R.XwOHTQXE.qJSKJdhumG/XWOVfaeKFaJCznZ//4iZrait0

Аватара пользователя
Olej
Писатель
Сообщения: 12706
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: теневые пароли

Непрочитанное сообщение Olej » 24 окт 2019, 01:21

Olej писал(а):
11 июн 2019, 17:55
Как легко видеть, здесь во 2-м поле (поле пароля) root стоит '!' - вход с таким паролем заблокирован. В отличие от '*' в этой позиции - вход с таким именем запрещён - '!' похоже (IMHO) нововведение нескольких последних лет ... потому что в публикациях порядка 2006 года он нигде не упоминается.
А заблокированный пароль/имя можно разблокировать.
Пришлось по случаю ещё раз покопаться с блокированием пароля ('!') - можно в любой записи /etc/shadow (с паролем) вписать '!' (текстовым редактором) после 1-го ':', и логин будет заблокирован.
Смотрим:

Код: Выделить всё

olej@ACER:/home/watbiz$ sudo cat /etc/shadow | grep watbiz
watbiz:$6$nWvb0qiZE.MQrkKM$PCYQ5tca6wkUk1IoAyas7vFxDTKo9VINAtokxhZHpALXqZoWuK5I9vcy8h48Jih/B47.50UfDC.BlCWTQNrXt1:18192:0:99999:7:::

olej@ACER:/home/watbiz$ sudo watbiz -
sudo: watbiz: command not found

olej@ACER:/home/watbiz$ su watbiz -
Пароль: 

watbiz@ACER:~$ whoami
watbiz

watbiz@ACER:~$ exit
exit
Здесь я логинюсь с паролем как пользователь watbiz.
Теперь я его заблокирую (текстовым редактором впишу 1 символ):

Код: Выделить всё

olej@ACER:/home/watbiz$ sudo cat /etc/shadow | grep watbiz
watbiz:!$6$nWvb0qiZE.MQrkKM$PCYQ5tca6wkUk1IoAyas7vFxDTKo9VINAtokxhZHpALXqZoWuK5I9vcy8h48Jih/B47.50UfDC.BlCWTQNrXt1:18192:0:99999:7:::

olej@ACER:/home/watbiz$ su watbiz -
Пароль: 
su: Сбой при проверке подлинности
Всё ... отлуп - пользователь блокирован.
Возвращаю всё назад (вытираю символ '!'):

Код: Выделить всё

olej@ACER:/home/watbiz$ sudo cat /etc/shadow | grep watbiz
watbiz:$6$nWvb0qiZE.MQrkKM$PCYQ5tca6wkUk1IoAyas7vFxDTKo9VINAtokxhZHpALXqZoWuK5I9vcy8h48Jih/B47.50UfDC.BlCWTQNrXt1:18192:0:99999:7:::

olej@ACER:/home/watbiz$ su watbiz -
Пароль: 

watbiz@ACER:~$ whoami
watbiz

watbiz@ACER:~$ exit
exit
Всё опять с пользователем ОК.

Аватара пользователя
Olej
Писатель
Сообщения: 12706
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: теневые пароли

Непрочитанное сообщение Olej » 08 ноя 2019, 00:28

Работа с паролями в Python:

Код: Выделить всё

olej@ACER:~/python-virtual-environments$ sudo pip3 install bcrypt
[sudo] пароль для olej: 
Collecting bcrypt
  Downloading https://files.pythonhosted.org/packages/8b/1d/82826443777dd4a624e38a08957b975e75df859b381ae302cfd7a30783ed/bcrypt-3.1.7-cp34-abi3-manylinux1_x86_64.whl (56kB)
     |████████████████████████████████| 61kB 858kB/s 
Requirement already satisfied: six>=1.4.1 in /usr/local/lib/python3.7/dist-packages (from bcrypt) (1.11.0)
Collecting cffi>=1.1
  Downloading https://files.pythonhosted.org/packages/16/cd/1f4ddf6be8300713c676bb9f3a2d3b8eb8accc0a6a24f57d4f6c4cd59d34/cffi-1.13.2-cp37-cp37m-manylinux1_x86_64.whl (398kB)
     |████████████████████████████████| 399kB 2.5MB/s 
Collecting pycparser
  Downloading https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz (158kB)
     |████████████████████████████████| 163kB 3.4MB/s 
Building wheels for collected packages: pycparser
  Building wheel for pycparser (setup.py) ... done
  Created wheel for pycparser: filename=pycparser-2.19-py2.py3-none-any.whl size=111031 sha256=bc67eef65590c0ed0be5537d7810f963125d905ab0ae48ae13086ef17a95af0c
  Stored in directory: /root/.cache/pip/wheels/f2/9a/90/de94f8556265ddc9d9c8b271b0f63e57b26fb1d67a45564511
Successfully built pycparser
Installing collected packages: pycparser, cffi, bcrypt
Successfully installed bcrypt-3.1.7 cffi-1.13.2 pycparser-2.19

Код: Выделить всё

olej@ACER:~/2019_WORK/HISTORY/11/07$ python3
Python 3.7.3 (default, Apr  3 2019, 05:39:12) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import bcrypt
>>> bcrypt.hashpw('asdf51'.encode('utf-8'), bcrypt.gensalt())
b'$2b$12$a/uXx0omhwnp70jmbAZOjeVKFC3HdxSn7yaRxmOSXyQRL0hIlcoMS'
Ну и вот это интересно:

Код: Выделить всё

...
>>> bcrypt.gensalt()
b'$2b$12$n/e8qT2bYG/FlzkSkouC/u'
>>> bcrypt.gensalt()
b'$2b$12$yPFCwt/9cqmu4uL.gmInnO'
>>> bcrypt.gensalt()
b'$2b$12$RBgAzOdj.t1XV3Qzx/G99u'
>>> bcrypt.gensalt()
b'$2b$12$hnyelolZZxfFCKXMArYR8.'
>>> bcrypt.gensalt()
b'$2b$12$3.wZQl20jR5FfziQi4Y7pe'
...

Аватара пользователя
Olej
Писатель
Сообщения: 12706
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: теневые пароли

Непрочитанное сообщение Olej » 08 ноя 2019, 00:55

Olej писал(а):
08 ноя 2019, 00:28
Работа с паролями в Python:
https://onstartup.ru/python/python3-bcrypt/
Библиотека хэширования паролей для Python 3
bcrypt — это модуль Python, который предоставляет метод хэширования пароля, основанный на алгоритме хэширования пароля Blowfish, как описано в «Адаптируемой для будущего паролей схеме» Нильса Провоса и Дэвида Мазиера: http://static.usenix.org/events/usenix99 /provos.html.

Аватара пользователя
Olej
Писатель
Сообщения: 12706
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: теневые пароли

Непрочитанное сообщение Olej » 08 ноя 2019, 01:06

Olej писал(а):
08 ноя 2019, 00:28
Работа с паролями в Python:
Альтернатива:

Код: Выделить всё

>>> import hashlib
>>> passwd = b'asdf51'
>>> salt = b'pFRKLvEH'
>>> hashed=hashlib.sha512(passwd + salt).hexdigest()
>>> hashed
'b82fd031afcdf7d8d3f2e476c25999851b16ebc47a0eb64583a8e7f26467fe597e26507cd3ec86cda26953aed9a83134226a2810c26255467a3c09d5ad4c9d57'
>>> hashed=hashlib.sha256(passwd + salt).hexdigest()
>>> hashed
'145d3fdc2f89423a90e38fba869286e9c707d4abee7657545853eedc9a8224f9'

Код: Выделить всё

>>> hashed=hashlib.md5(passwd + salt).hexdigest()
>>> hashed
'eedbc7181a7270b627897e0486684327'
>>> hashed=hashlib.descrypt(passwd + salt).hexdigest()

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость