как получить пароли пользователей

Модератор: Модераторы разделов

FFFFh
Сообщения: 11

как получить пароли пользователей

Сообщение FFFFh »

Задача формулируется так: запускается комплекс. Дальше идет процедура аутентификации пользователя. Мне нужно чтобы в моей программе, пароль, который вводит оператор сравнивался с паролями (именно паролями) всех пользователей, которые присутсвую в системе, в т.ч. и root. Программа, естественно, запускается под рутом.
Среда: Kylix. Можно внешний скрипт. По поводу технической реализации - такое я уже видел. Но сделано было очень убого - через вызов какой то внутренней то ли утилиты, то ли команды - не знаю даже чего. Выглядело так -запускается комплекс, затем оператор вводит пароль - затем выскакивает эта консольная не пойми чего - чего то там вводится - и дальше я уже не понял суть творящихся там танцев с бубнами.Одним словом - ужасно страшная непонятная вещь.
Может быть, кто-нибудь из здешних метров сталкивался с такой проблемой или знает где чего почитать на этут тему?
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: как получить пароли пользователей

Сообщение madskull »

(FFFFh @ Понедельник, 05 Сентября 2005, 23:55) писал(а):Задача формулируется так: запускается комплекс. Дальше идет процедура аутентификации пользователя. Мне нужно чтобы в моей программе, пароль, который вводит оператор сравнивался с паролями (именно паролями) всех пользователей, которые присутсвую в системе, в т.ч. и root.

Уважаемый, может вам надо поизучать предмет глубжЕе?
Ибо паролей (именно паролей), не знает даже система.
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
pipll
Сообщения: 234
Статус: Программист
ОС: Slackware 12

Re: как получить пароли пользователей

Сообщение pipll »

Надо сравнивать хэши, а не пароли
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

Re: как получить пароли пользователей

Сообщение ilich »

Я бы сделал это так. Сначала получаю UID пользователя или его имя. Потом лезу в файл /etc/shadow, нахожу там хэш пароля пользователя. Потом получаю хэш пароля, введенного пользователем. Обычно (если не ошибаюсь) это md5. В старых системах - des. Осталось только сравнить хэши.
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали:
Ananas
Сообщения: 64

Re: как получить пароли пользователей

Сообщение Ananas »

(ilich @ Вторник, 06 Сентября 2005, 9:58) писал(а):Я бы сделал это так. Сначала получаю UID пользователя или его имя. Потом лезу в файл /etc/shadow, нахожу там хэш пароля пользователя. Потом получаю хэш пароля, введенного пользователем. Обычно (если не ошибаюсь) это md5. В старых системах - des. Осталось только сравнить хэши.


man 3 crypt
Спасибо сказали:
MedVed
Сообщения: 112

Re: как получить пароли пользователей

Сообщение MedVed »

Вот тут простейший пример, позволяющий понять суть.
Но работать он скорей всего не будет. :)
Потому что getpwnam читает только /etc/passwd (об /etc/shadow она ничего не знает). Поэтому, в случае затенения паролей - нужен собственный парсер теневой копии. Но даже с собственным парсером эта вещь может не работать, что наблюдается в случае использования pam (при этом в /etc/shadow ничего не храниться). И здесь поможет только PAM programmers guide.
МСВС 3.0/Linux Mandrake 8.0
Спасибо сказали:
Ananas
Сообщения: 64

Re: как получить пароли пользователей

Сообщение Ananas »

в случае shadow-паролей - man 3 shadow

getpwnam -> getspnam и так далее
Спасибо сказали:
FFFFh
Сообщения: 11

Re: как получить пароли пользователей

Сообщение FFFFh »

Спасибо всем, кто ответил. Значит я проверил один из вариантов, предложенных здесь: полез в файл shadow и что я там увидел:

root:$1$ZhRet36.$ZkS6RUAXmQr.hOg2az7NN1:12976:0:99999:7:::
user:$1$kJe8SBxm$m/kbmo7ZI.xQhlS5iWqaK.:12970::::::0

Пароль и у рута и юзера один и тот же: ffffff (6 букв f)
Далее. Скачал какую то прогу, которая все кодит по многим известным алгоритмам и начал мутить. - беру пасс ffffff и скармливаю на корм этой супер-мега-пати тулзе, предаврительно сказав волшебное слово md5:
на выходе имею: EED8CDC400DFD4EC85DFF70A170066B7
Удивляюсь и начинаю муты дальше: пробовал кодировать при помощи:

GOST R 34.11-94,
MD2,
MD4,
MD5,
RIPEMD-128,
RIPEMD-160,
RIPEMD-256,
RIPEMD-320,
SHA,
SHA-1
SHA-256
SHA-384
SHA-512
Tiger

Никаких циферек и буковок даже близких к хранящимся в shadow я не получил. У меня такие вопросы:
1.) Кодировать по алгоритму нужно пароль?
2.) Пассы у рута и юзера одинаковые - почему же кодированные значения разные?

Про команды, которые вы описали - я если, честно не особо понял.
Спасибо сказали:
Аватара пользователя
JaGoTerr
Сообщения: 380

Re: как получить пароли пользователей

Сообщение JaGoTerr »

имхо, посмотрел бы ты соответствующую документацию к своему дистрибутиву. Если она есть :) Объясню почему.
Да, запись в /etc/shadow - ничто иное как хэш. И он действительно может быть сгенерирован любым алгоритмом. И, к слову, МД5 уходит в небытие в этойобласти, ибо уже взломан. Так вот. Подобно тому как в дистрах от RedHat, в т.ч. в Федоре, утилиты управлениями пользовательскими записями отличаются от стандартных в том плане, что осуществляют определённые действия (хз какие :) ), связанные с поддержкой технологии SELinux, включённой в эти дистры, точно так же они могут использовать произвольную логику генерации этих хэшэй. Вывод? ИМХО, (Повторяю и подчёркиваю: ИМХО!) надо бы пару-тройку раз переосмыслить задачу, донести соответствующие соображения до заказчика и в результате применить более стандартизованное решение. Может тебе в сторону Authentication Servers посмотреть? Или Directory Servers (что более низко, в смысле низкоуровнево :) )?
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

Re: как получить пароли пользователей

Сообщение ilich »

Согласен, но как мне кажется, большинство дистрибутивов все же используют crypt() для этих целей. Так по крайней мере в стандартах написано.
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали:
Аватара пользователя
JaGoTerr
Сообщения: 380

Re: как получить пароли пользователей

Сообщение JaGoTerr »

(ilich @ Пятница, 09 Сентября 2005, 8:12) писал(а):как мне кажется, большинство дистрибутивов все же используют crypt() для этих целей

Вопрос в том, что они передают на вход этому crypt (). Просто пароль или, к примеру, его некоторую комбинацию с именем пользователя.
Спасибо сказали:
FFFFh
Сообщения: 11

Re: как получить пароли пользователей

Сообщение FFFFh »

надо бы пару-тройку раз переосмыслить задачу, донести соответствующие соображения до заказчика и в результате применить более стандартизованное решение. Может тебе в сторону Authentication Servers посмотреть? Или Directory Servers


Я тока и занимаюсь тем, что переосмысливаю задачу :) Если серьезно - чт прописано в подписанном ТЗ, уже на 99,99% не реал изменить. Поэтому придется ковыряться в этом. Насчет документации - она есть - но в каком то урезанном испоганенном виде. По поводу crypt написано что она использует DES c какой то хитрой приблудкой.

Следствие продолжается :)
Спасибо сказали:
Аватара пользователя
JaGoTerr
Сообщения: 380

Re: как получить пароли пользователей

Сообщение JaGoTerr »

Можно попробовать сделать "тупо". Берёшь исходники useradd и делаешь
egrep -R "crypt\s*(.*?)" ./useradd-src/
А дальше сам :D
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

Re: как получить пароли пользователей

Сообщение ilich »

ТО же самое можно проделать с passwd, login etc.
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали:
Ananas
Сообщения: 64

Re: как получить пароли пользователей

Сообщение Ananas »

(JaGoTerr @ Пятница, 09 Сентября 2005, 11:40) писал(а):Можно попробовать сделать "тупо". Берёшь исходники useradd и делаешь
egrep -R "crypt\s*(.*?)" ./useradd-src/
А дальше сам  :D


ты бы хоть man useradd прочитал для начала

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

       -p passwd
              The  encrypted  password,  as returned by crypt(3).
              The default is to disable the account.


useradd не шифрует пароли. просто вставляет переданную ему с -p строку в соответствующее поле /etc/passwd (или /etc/shadow)
Спасибо сказали:
Аватара пользователя
JaGoTerr
Сообщения: 380

Re: как получить пароли пользователей

Сообщение JaGoTerr »

(Ananas @ Пятница, 09 Сентября 2005, 15:08) писал(а):ты бы хоть man useradd прочитал для начала


Ты бы хоть правила хорошего тона подучил. Для начала.
Ну не useradd, так login/passwd, как предложил ilich. Я направление показал. Немножко ошибся в деталях.
Спасибо сказали: