Назад | Перейти на главную страницу

Почему максимальная длина корневого пароля OpenWrt составляет 8 символов?

Когда я пытаюсь установить rootпароль:

root@OpenWrt:~# passwd
Changing password for root
Enter the new password (minimum of 5, maximum of 8 characters)
Please use a combination of upper and lower case letters and numbers.

Кажется, максимальная длина равна 8. Если я попытаюсь установить пароль длиннее 8, действительными будут только первые 8 символов. Как установить более длинный пароль для root?

Моя версия OpenWrt:

Linux OpenWrt 4.14.108 #0 SMP Wed Mar 27 21:59:03 2019 x86_64 GNU/Linux

Это связано с тем, что шифрование на основе DES (также известное как «descrypt») обрезает пароли до 8 байтов и проверяет только первые 8 с целью проверки пароля.

Это ответ на ваш прямой вопрос, но вот несколько общих советов, вытекающих из вашего контекста:

  • К счастью, из моего чтения MD5 в /etc/login.defs на самом деле md5crypt ($ 1 $), который, хотя и немного устарел и объявлен устаревшим его автором, по-прежнему намного превосходит шифрование на основе DES (и определенно намного лучше, чем необработанный несоленый хеш, такой как обычный MD5! Большинство несоленых хэшей можно взломать на обычных графических процессорах со скоростью миллиарды в секунду)

  • Это выглядит как SHA256 (на самом деле sha256crypt) и SHA512 (на самом деле sha512crypt) тоже есть. Я бы выбрал один из них.

  • Если вы установите пароль на password или что-то под каждой схемой, вы можете визуально проверить, верен ли мой вывод о том, что это варианты -crypt (примеры здесь взяты из хеши примера hashcat, все 'hashcat', некоторые завернуты для удобства чтения):

Не рекомендуется - несоленые или устаревшие типы хэшей, слишком "быстрые" (скорость взлома) для хранения паролей:

MD5         - 8743b52063cd84097a65d1633f5c74f5
SHA256      - 127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935
SHA512      - 82a9dda829eb7f8ffe9fbe49e45d47d2dad9664fbb7adf72492e3c81ebd3e2 \
              9134d9bc12212bf83c6840f10e8246b9db54a4859b7ccd0123d86e5872c1e5082f
descrypt    - 48c/R8JAv757A

Хорошо - намного лучше, чем несоленое, без усечения, но уже недостаточно устойчиво к грубой силе на современном оборудовании:

md5crypt    - $1$28772684$iEwNOgGugqO9.bIz5sk8k/

Лучше - относительно современные хеши с большими солями и факторами работы:

sha256crypt - $5$rounds=5000$GX7BopJZJxPc/KEK$le16UF8I2Anb.rOrn22AUPWvzUETDGefUmAV8AZkGcD
sha512crypt - $6$52450745$k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX/

Из них Descrypt усекает только на 8. Последние два - ваш лучший выбор.

(Примечание: соли только с цифрами в приведенных выше примерах md5crypt и sha512crypt являются лишь побочными эффектами того, как hashcat создает примеры хэшей; настоящие, полезные соли обычно берутся из гораздо большего пространства ключей).

Также обратите внимание, что я перечисляю только те хеш-типы, которые поддерживаются /etc/login.defs на этой платформе. Для общего использования были заменены даже sha256crypt и sha512crypt - сначала на bcrypt, а затем на действительно устойчивые к параллельным атакам хэши, такие как scrypt и семейство Argon2. (Обратите внимание, однако, что для интерактивных входов, которые должны завершиться менее чем за одну секунду, bcrypt на самом деле более устойчив к атакам, чем последний)

Я изменил это в /etc/login.defs:

PASS_MAX_LEN            8

проблема исправлена.


Важные дополнения:

После того, как я изменил вышеуказанные параметры, хотя я могу установить пароль длиной более 8 цифр, он все еще недействителен, потому что настоящий пароль состоит только из первых восьми цифр. Не знаю, проблема ли в этом.

Мое окончательное решение - установить

# ENCRYPT_METHOD DES

к

ENCRYPT_METHOD MD5

в /etc/login.defs.

Теперь я наконец могу установить пароль root, который действительно больше восьми.