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

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

Модератор: Olej

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

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

Непрочитанное сообщение Olej » 11 июн 2019, 17:19

Речь идёт, естественно о /etc/shadow ...

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

root@ACER:/etc# pwd
/etc

root@ACER:/etc# ls -l shadow
-rw-r----- 1 root shadow 1367 мар  8 06:13 shadow
И о содержимом его строк - хешированных паролях пользователей в Linux:

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

root@ACER:/etc# cat /etc/shadow
root:$6$QiWwCbrg$ejp.A2/7uvmb4hy13vn.SAyetXiXeIENwSuWkriZHeNzJofLkWfCBkJp6wL1Urle47VcqrIK.7kdexN/qRCUd.:17887:0:99999:7:::
daemon:*:17882:0:99999:7:::
bin:*:17882:0:99999:7:::
sys:*:17882:0:99999:7:::
sync:*:17882:0:99999:7:::
games:*:17882:0:99999:7:::
man:*:17882:0:99999:7:::
lp:*:17882:0:99999:7:::
mail:*:17882:0:99999:7:::
news:*:17882:0:99999:7:::
uucp:*:17882:0:99999:7:::
proxy:*:17882:0:99999:7:::
www-data:*:17882:0:99999:7:::
backup:*:17882:0:99999:7:::
list:*:17882:0:99999:7:::
irc:*:17882:0:99999:7:::
gnats:*:17882:0:99999:7:::
nobody:*:17882:0:99999:7:::
_apt:*:17882:0:99999:7:::
systemd-timesync:*:17882:0:99999:7:::
systemd-network:*:17882:0:99999:7:::
systemd-resolve:*:17882:0:99999:7:::
uuidd:*:17882:0:99999:7:::
avahi-autoipd:*:17882:0:99999:7:::
usbmux:*:17882:0:99999:7:::
dnsmasq:*:17882:0:99999:7:::
messagebus:*:17882:0:99999:7:::
rtkit:*:17882:0:99999:7:::
avahi:*:17882:0:99999:7:::
geoclue:*:17882:0:99999:7:::
colord:*:17882:0:99999:7:::
saned:*:17882:0:99999:7:::
speech-dispatcher:!:17882:0:99999:7:::
pulse:*:17882:0:99999:7:::
lightdm:*:17882:0:99999:7:::
olej:$6$pFRKLvEH$Ciq6AlhkvrqCWOP5kV2ZRXc91niIZp9Q5EmievfbxkdTU/M/F5IT7kpGD5utCcmn66xnSBv7OL4qBR9lhRxLF/:17887:0:99999:7:::
systemd-coredump:!!:17887::::::
sshd:*:17888:0:99999:7:::
nm-openvpn:*:17889:0:99999:7:::
mysql:!:17919:0:99999:7:::
Debian-exim:!:17963:0:99999:7:::

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

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

Непрочитанное сообщение Olej » 11 июн 2019, 17:55

Olej писал(а): И о содержимом его строк - хешированных паролях пользователей в Linux:
Вообще то, с содержимым этих строк пользователи Linux не разбираются, не утруждают себя. И правильно - работает и работает!
Я вот за 30 почти лет самой плотной работы с Linux, зная что это "теневые записи паролей" - никогда не интересовался деталями их представлений ... и утилитами работы с ними.
Но нужда возникла в связи с разборкой в паролями Astra Linux, с невозможностью непосредственного входа (терминал) в сеанс root.

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

olej@astra:~$ uname -a
Linux astra 4.19.0-1-generic #astra1 SMP Wed Mar 20 12:59:21 UTC 2019 x86_64 GNU/Linux

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

root@astra:/etc# cat shadow
root:!:18056:0:99999:7:::
daemon:*:18056:0:99999:7:::
bin:*:18056:0:99999:7:::
sys:*:18056:0:99999:7:::
sync:*:18056:0:99999:7:::
games:*:18056:0:99999:7:::
...
fly-dm:!:18056::::::
Debian-exim:!:18056:0:99999:7:::
dnsmasq:*:18056:0:99999:7:::
...
libvirt-qemu:!:18056:0:99999:7:::
hplip:*:18056:0:99999:7:::
avahi:*:18056:0:99999:7:::
olej:$6$/Fx7EP5H$HjJTlrqtWI2m74FdQpg0YmE8fP5vkMo18O1a0XS.cp87GtdtVu3LZbRtxhuy.ZHCpgzZVmgAkaAsNfOqO9mSb1:18056:0:99999:7:::
vboxadd:!:18056::::::
Как легко видеть, здесь во 2-м поле (поле пароля) root стоит '!' - вход с таким паролем заблокирован. В отличие от '*' в этой позиции - вход с таким именем запрещён - '!' похоже (IMHO) нововведение нескольких последних лет ... потому что в публикациях порядка 2006 года он нигде не упоминается.
А заблокированный пароль/имя можно разблокировать.

P.S. Вообще то, все дела с /etc/shadow, даже на просто посмотреть, можно выполнять только с правами root - остальным здесь делать нечего:

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

root@astra:~# ls -l /etc/shadow
-rw-r----- 1 root shadow 1139 Июн 10 18:43 /etc/shadow
Вопрос: а как попасть в root 1-й раз, чтобы начать там что-то делать с root ("проблема курицы и яйца" ;-) )?
А вот так (вспоминаем):

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

olej@astra:~$ sudo -i
[sudo] пароль для olej:
root@astra:~# whoami
root

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

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

Непрочитанное сообщение Olej » 11 июн 2019, 18:33

Olej писал(а): А заблокированный пароль/имя можно разблокировать.
Заблокированный пароль - это тот, которому предшествует '!'.
Разблокировка делается командой passwd (см. passwd --help).
Но в данном случае это не сработает:

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

root@astra:/etc# passwd -u root
passwd: разблокировка пароля приведёт к появлению беспарольной учётной
записи. Вы должны задать пароль с помощью usermod -p для разблокировки учётной записи пользователя.

root@astra:/etc# cat shadow | grep root
root:!:18056:0:99999:7:::
Разблокировка может быть сделана сразу непосредственно присвоением пустому паролю непустого значения.
Но я сделаю по-другому:

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

root@astra:/etc# usermod -p ''  root

root@astra:/etc# cat shadow | grep root
root::18057:0:99999:7:::
И получаем беспарольный разблокированный вход:

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

olej@astra:~$ su -
root@astra:~# whoami
root
Для root это не лучшая идея ;-) , но ... а). у меня это виртуальная машина и б). в порядке экспериментов это годится.

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

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

Непрочитанное сообщение Olej » 12 июн 2019, 00:26

Теперь о строках (пользователях) со значащими паролями:

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

olej:$6$pFRKLvEH$Ciq6AlhkvrqCWOP5kV2ZRXc91niIZp9Q5EmievfbxkdTU/M/F5IT7kpGD5utCcmn66xnSBv7OL4qBR9lhRxLF/:17887:0:99999:7:::
Здесь 2-е поле между разделителями ':' - хешированное значение пароля.

Поля хешированного значения разделяются '$'.
Здесь 1-е поле = 6 - метод хеширования
Методы можем посмотреть так:

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

root@ACER:/etc# mkpasswd -m help
Доступные методы:
sha512crypt     SHA-512
sha256crypt     SHA-256
md5crypt        MD5
descrypt        standard 56 bit DES-based crypt(3)
2-е поле = pFRKLvEH - это salt (соль), строка с которой и хешируется наш пароль

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

Теперь, как выглядит это хешированное значение для разных алгоритмов хеширования (я беру значение пароля aaaaaa):

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

root@ACER:/etc# mkpasswd -m sha-512 --salt=pFRKLvEH aaaaaa
$6$pFRKLvEH$Ciq6AlhkvrqCWOP5kV2ZRXc91niIZp9Q5EmievfbxkdTU/M/F5IT7kpGD5utCcmn66xnSBv7OL4qBR9lhRxLF/

- это ровно то значение, котрое показано в начале сообщения.
Но здесь может быть и:

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

root@ACER:/etc# mkpasswd -m sha-256 --salt=pFRKLvEH aaaaaa
$5$pFRKLvEH$8UiUCHTWJQKYT9L5ZO9w5xmabohIu6zra1g7CP3fd./

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

root@ACER:/etc# mkpasswd -m md5 --salt=pFRKLvEH aaaaaa
$1$pFRKLvEH$CyFIOFF6nLEaq4H4Zkhis0

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

root@ACER:/etc# mkpasswd -m descrypt --salt=pFRKLvEH aaaaaa
Неверная длина соли: 8 байт при ожидаемой 2.

root@ACER:/etc# mkpasswd -m descrypt --salt=pF aaaaaa
pFcjREOAymk7I
P.S. Указывать пароль для хеширования последним параметром команды mkpasswd - не очень хорошая идея (явно выписывать пароль).
Для всех алгоритмов это можно (лучше) делать так:

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

root@ACER:/etc# mkpasswd -m md5 --salt=pFRKLvEH
Пароль: 
$1$pFRKLvEH$CyFIOFF6nLEaq4H4Zkhis0

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

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

Непрочитанное сообщение Olej » 12 июн 2019, 00:44

Экспериментирую...

Создаю нового пользователя freak с паролем 12345:

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

root@ACER:/etc# adduser freak
Добавляется пользователь «freak» ...
Добавляется новая группа «freak» (1001) ...
Добавляется новый пользователь «freak» (1001) в группу «freak» ...
Создаётся домашний каталог «/home/freak» ...
Копирование файлов из «/etc/skel» ...
Новый пароль : 
Повторите ввод нового пароля : 
passwd: пароль успешно обновлён
Изменение информации о пользователе freak
Введите новое значение или нажмите ENTER для выбора значения по умолчанию
	Полное имя []: 
	Номер комнаты []: 
	Рабочий телефон []: 
	Домашний телефон []: 
	Другое []: 
Данная информация корректна? [Y/n] y

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

root@ACER:/etc# cat /etc/shadow | grep freak
freak:$6$bERj3kkuLv5Rq1jj$8L0s5hd4C6HkwjL/s.sIg1gm5BCsrh4vU/r3WO.ifei7q/hI6p9bAsBy1jrjRupe/M/CUDfz/FtcZBq44.yq31:18058:0:99999:7:::
Проверяем:

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

root@ACER:/etc# mkpasswd -m sha-512 --salt=bERj3kkuLv5Rq1jj 12345
$6$bERj3kkuLv5Rq1jj$8L0s5hd4C6HkwjL/s.sIg1gm5BCsrh4vU/r3WO.ifei7q/hI6p9bAsBy1jrjRupe/M/CUDfz/FtcZBq44.yq31
Это та же строка!

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

olej@ACER:~$ su freak -
Пароль: 

freak@ACER:/home/olej$ whoami
freak

freak@ACER:/home/olej$ cd ~

freak@ACER:~$ pwd
/home/freak

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

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

Непрочитанное сообщение Olej » 12 июн 2019, 00:51

Olej писал(а): Проверяем:
Меняю алгоритм:

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

root@ACER:/etc# usermod -p '$5$bERj3kkuLv5Rq1jj$hfoZgPn7yYbZHhc9E13TiFkm6JLdzJah/On4RZtkZ/C' freak

root@ACER:/etc# cat /etc/shadow | grep freak
freak:$5$bERj3kkuLv5Rq1jj$hfoZgPn7yYbZHhc9E13TiFkm6JLdzJah/On4RZtkZ/C:18058:0:99999:7:::

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

olej@ACER:~$ su freak -
Пароль: 

freak@ACER:/home/olej$ whoami
freak

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

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

Непрочитанное сообщение Olej » 12 июн 2019, 00:57

Olej писал(а): Меняю алгоритм:
Ещё раз меняю алгоритм:

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

root@ACER:/etc# mkpasswd -m md5 --salt=bERj3kkuLv5Rq1jj 12345
Неверная длина соли: 16 байт при ожидаемой 8.

root@ACER:/etc# mkpasswd -m md5 --salt=12345678 12345
$1$12345678$M1o7XeamKvTv64m7bK9e30

root@ACER:/etc# usermod -p '$1$12345678$M1o7XeamKvTv64m7bK9e30' freak

root@ACER:/etc# cat /etc/shadow | grep freak
freak:$1$12345678$M1o7XeamKvTv64m7bK9e30:18058:0:99999:7:::

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

olej@ACER:~$ su freak -
Пароль: 

freak@ACER:/home/olej$ whoami
freak

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

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

Непрочитанное сообщение Olej » 12 июн 2019, 01:01

Olej писал(а): Меняю алгоритм:
Ещё раз меняю алгоритм:

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

root@ACER:/etc# mkpasswd -m descrypt --salt=XX 12345
XXj6IcTHu4zJQ

root@ACER:/etc# usermod -p 'XXj6IcTHu4zJQ' freak

root@ACER:/etc# cat /etc/shadow | grep freak
freak:XXj6IcTHu4zJQ:18058:0:99999:7:::

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

olej@ACER:~$ su freak -
Пароль: 
freak@ACER:/home/olej$ whoami
freak

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

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

Непрочитанное сообщение Olej » 12 июн 2019, 01:14

Olej писал(а): Создаю нового пользователя freak с паролем 12345:

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

root@ACER:/etc# adduser freak
...
Убираем следы экспериментирования...

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

root@ACER:/etc# deluser freak
Удаляется пользователь «freak» ...
Предупреждение: в группе «freak» нет больше членов.
userdel: user freak is currently used by process 19412
/usr/sbin/deluser: Работа «/sbin/userdel freak» завершилась с кодом ошибки 8. Завершение работы.
Это неудача - в одном из терминалов остался логиненным freak...

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

root@ACER:/etc# ls -a /home/freak/
.  ..  .bash_history  .bash_logout  .bashrc  .profile

root@ACER:/etc# cat /etc/passwd | grep freak
freak:x:1001:1001:,,,:/home/freak:/bin/bash

root@ACER:/etc# cat /etc/group | grep freak
freak:x:1001:
Но пользователь freak уже удалён из группы freak!
Закрываю все терминалы, где залогинен freak...

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

root@ACER:/etc# deluser freak
Удаляется пользователь «freak» ...
Предупреждение: в группе «freak» нет больше членов.
Готово.

root@ACER:/etc# cat /etc/passwd | grep freak
root@ACER:/etc# 
Всё!
Нет такого пользователя...

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

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

Непрочитанное сообщение Olej » 12 июн 2019, 01:18

Всё это кино с генерацией хешированных значений для паролей внятно описано:

- Генерация хеша для /etc/shadow в Debian
вторник, 15 ноября 2011 г.
- Ручная генерация содержимого shadow файла на примере Debian 6 Squeeze
пятница, 7 октября 2011 г.
- Защита с помощью пароля в Linux: файл /etc/shadow
21.02.2015

Ответить

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

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

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