Я хочу проверить в командной строке linux, совпадает ли заданный пароль открытого текста с зашифрованным паролем в / etc / shadow
(Мне нужно это для аутентификации пользователей сети. Я использую встроенный Linux.)
У меня есть доступ к самому файлу / etc / shadow.
linux
command-line
password
embedded
michelemarcon
источник
источник
Ответы:
Вы можете легко извлечь зашифрованный пароль с помощью awk. Затем вам нужно извлечь префикс
$algorithm$salt$
(при условии, что в этой системе не используется традиционный DES, что сильно не рекомендуется, потому что в наши дни его можно перебрать).Для проверки пароля базовая функция C есть
crypt
, но нет стандартной команды оболочки для доступа к ней.В командной строке вы можете использовать однострочник Perl для вызова
crypt
пароля.Так как это не может быть сделано в чисто инструментальных оболочках, если у вас есть доступный Perl, вы можете сделать все это в Perl. (Или Python, Ruby, ... все, что у вас есть, которое может вызвать
crypt
функцию.) Предупреждение, непроверенный код.На встроенной системе без Perl я бы использовал небольшую специализированную C-программу. Предупреждение, набранное прямо в браузере, я даже не пытался скомпилировать. Это предназначено для иллюстрации необходимых шагов, а не как надежная реализация!
Другой подход заключается в использовании существующей программы, такой как
su
илиlogin
. На самом деле, если вы можете, было бы идеально устроить так, чтобы веб-приложение могло выполнять все, что ему нужноsu -c somecommand username
. Трудность здесь заключается в том, чтобы ввести парольsu
; это требует терминала. Обычный инструмент для эмуляции терминала - ожидаемый , но это большая зависимость для встроенной системы. Кроме того, хотя онsu
находится в BusyBox, он часто опускается, поскольку для многих его применений требуется, чтобы двоичный файл BusyBox был установлен как root. Тем не менее, если вы можете сделать это, это самый надежный подход с точки зрения безопасности.источник
su
подход.Посмотрите на
man 5 shadow
иman 3 crypt
. Из последнего вы можете узнать, что хеши паролей/etc/shadow
имеют следующую форму:где
id
определяет тип шифрования и, читая далее, может быть одним изВ зависимости от типа хэша вам нужно использовать соответствующую функцию / инструмент для генерации и проверки пароля «вручную». Если система содержит
mkpasswd
программу, вы можете использовать ее, как предложено здесь . (Вы берете соль из файла теней, если это не было очевидно.) Например, сmd5
паролями:сгенерирует строку, которая должна соответствовать
/etc/shadow
записи.источник
mkpasswd
, которую я должен был установить, используяapt-get install whois
. Командная строка для теневой линии<user>:$6$<salt>$<pwd>:
былаmkpasswd -msha-512 <password> <salt>
Был подобный вопрос, заданный на переполнении стека . cluelessCoder предоставил сценарий с использованием ожидаемого , который вы можете иметь или не иметь во встроенной системе.
источник
Имейте в виду, что, если система правильно настроена, программу нужно будет запускать с правами root.
Лучшее решение, чем непосредственное чтение файла с тенью и написание собственного кода на crypt, - просто использовать привязки pam.
В архиве squid использовался простой инструмент CLI для проверки имен пользователей / паролей с использованием stdio - настолько прост в адаптации к аргументам - хотя ранее взломанная версия вряд ли была плакатом для структурированного программирования. Быстрый гугл, и похоже, что более свежие версии были значительно очищены, но все еще есть кое-что.
источник
источник
line 61: :: syntax error: operand expected (error token is ":")