По заметке Ben Rockwood
Если вы посмотрите на содержимое файла /etc/shadow, вы увидите строки подобные этой:
pupkin:uHPd12GzUgwW.:13581::::::
и вам, конечно, известно что "uHPd12GzUgwW" представляет собою пароль, традиционно зашифрованный через crypt_unix алгоритм. Но знаете ли вы, что эти пароли имеют длину только 8 символов? И если вы устанавливаете себе пароль, скажем, "pupkin123forever", система пустит вас при вводе лишь первых 8 символов - "pupkin12"?
Однако man-страница unix_crypt(5) все объясняет:
Only the first eight characters of the key passed to crypt() are used with this algorithm; the rest are silently ignored.
Но можно ли это исправить? Очень просто - Solaris имеет 4 различных схемы паролей, определяемых в файле /etc/security/policy.conf. Заглянем в него - нас интересуют следующие строки:
CRYPT_ALGORITHMS_ALLOW=1,2a,md5
#CRYPT_ALGORITHMS_DEPRECATE=_unix_
CRYPT_DEFAULT=_unix_
Все эти алгоритмы, за исключением "
_unix_", отмечены в файле /etc/security/crypt.conf и представляют собою:
- 1 (crypt_bsdmd5.so): модуль криптования для использования с crypt (3С), использующий алгоритм хеширования MD5, совместим с md5crypt
на BSD и Linux системах. Допустимая длина пароля : 255 символов
- 2a (crypt_bsdbf.so): модуль криптования для использования с crypt (3С), использующий алгоритм Blowfish. Допустимая длина пароля: 255 символов *
- md5 (crypt_sunmd5.so): модуль криптования для использования с crypt (3С), использующий алгоритм хеширования MD5. Данный модуль предназначен для того, чтобы затруднить взлом пароля с использованием brute-force атак. Допустимая длина пароля: 255 символов
Чтобы перейти на другую схему криптования необходимо просто изменить две строчки в /etc/security/policy.conf : раскомментировать CRYPT_ALGORITHMS_DEPRECATE и изменить CRYPT_DEFAULT:
CRYPT_ALGORITHMS_DEPRECATE=_unix_
CRYPT_DEFAULT=2a
Теперь необходимо изменить пароль с помощью команды passwd, так как даже теперь устаревшие пароли все еще принимаются.
Ниже можно увидеть как различаются межу собою пароли с разным криптованием:
- moqZuc0PXJ/gw: Традиционный UNIX пароль
- $1$AR11mcp5$5wP5t99.kiHBiJ3qrg9jW1: Linux / BSD Compatible MD5
- $2a$04$Q4m1iCDQWCl9l6h6yDFcC.agmbB21YXJxhrB1bmfnVOcrZwBBZUsm: Blowfish пароль
- $md5$3UqYqndY$$6P.aaWOoucxxq.l00SS9k0: Sun MD5 пароль
Однако следует знать, что изменение алгоритма криптования пароля может повлиять на работу некоторых приложений. Так SMC, Webmin и Sun’s WBEM отказались работать после перехода на blowfish**.
* - люди говорят, что на практике blowfish использует только 76 символов (прим. sunhelp.ru).
** - DB2 также отказалась работать с пользователями после того как я перешел на md5. Кстати, я пытался сломать дефолтовый unix_crypt пароль при помощи JohnTheRipper на специально отведенном для этого IBM eServer 305, который был занят исключительно данной операцией - через две недели мне надоело ждать и я сделал джону kill -9 (прим. sunhelp.ru).