Для чего нужны файлы / etc / shadow и shadow cache в операционной системе Linux?

9

Какова цель файла / etc / shadow в операционной системе Linux? Кроме того, это то же самое для клиентов SUSE? Существует один файл теневого кэша, какова цель этого?

Ashitosh
источник

Ответы:

16

С самого начала операционные системы Unix и Unix-стиля (включая Linux) всегда хранили пароли в виде криптографических хэшей (1). Эти хэши были изначально сохранены /etc/passwd, но этот файл должен был быть доступен для чтения всем людям, чтобы сделать информацию доступной для других целей - даже простую ls -lдля чтения /etc/passwd, чтобы преобразовать числовой идентификатор пользователя каждого владельца файла в его имя пользователя для отображения. Однако наличие хешированных паролей в общедоступном файле позволило злоумышленникам легко получить эти хэши и попытаться сгенерировать используемые пароли (2) для учетных записей других пользователей.

Чтобы предотвратить это, хешированные пароли в конечном итоге были перемещены в файл, доступный для чтения только пользователю root (и иногда привилегированной группе администраторов) /etc/shadow. Это скрывает хэши от обычных пользователей системы, оставляя их доступными для аутентификации пользователей.

Примечания :

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

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

Дейв Шерохман
источник
Я думаю, что в последнем абзаце вы должны сказать «конечный», а не «бесконечный».
phunehehe
4
@phunehehe Нет, набор ввода (все возможные пароли) бесконечен, но вывод (все возможные значения хеша) конечен.
phihag
@ phihag Ах, я вижу. Но хэш будет намного длиннее любого запоминаемого человеком пароля в любом случае :)
phunehehe
1
Число входов, ведущих к любой данной коллизии, не бесконечно, потому что длина строк, которые могут быть хэшированы любым заданным алгоритмом, конечна . См., Например, stackoverflow.com/questions/17388177/…
MariusMatutiae
1
@MariusMatutiae Предположим, что действительно плохая реализация хеша, которая усекается до 3 символов. Правильный пароль "abc". Входные данные «abcd», «abcde», «abcdef» и т. Д. Также будут выдавать тот же выходной хэш и, следовательно, также будут приняты. Существует бесконечное количество строк, которые начинаются с «abc» и будут тривиально сталкиваться. (Обратите внимание , что мы в основном только соглашаясь здесь ли «вход» средства до или после применения усечения.)
Dave Sherohman
6

/etc/shadowФайл был создан по соображениям безопасности, и содержит зашифрованный пароль для каждого пользователя.

Первоначально зашифрованный пароль хранился в /etc/passwd. /etc/passwdдолжен был быть читаемым во всем мире, чтобы система могла сопоставлять идентификаторы пользователей с именами пользователей, и чтобы пользователи могли находить информацию друг о друге, например домашний каталог другого пользователя, или свой номер телефона, который традиционно хранился в поле «gecos» и отображается утилитой «палец».

Но потом люди поняли, что это проблема безопасности. Любой, у кого достаточно времени, может сделать так называемую атаку грубой силой , программно генерируя зашифрованные пароли для каждого возможного пароля. Если злоумышленник сделал это, фактически не пытаясь войти через telnetили ssh, система не могла бы знать, что он подвергся атаке.

Таким образом, зашифрованный пароль был перемещен во вновь созданный /etc/shadow, который доступен для чтения только пользователю root.

Он также содержит другую информацию, которую /etc/passwdфайл не поддерживает, связанную с учетной записью пользователя и паролем, например, когда пароль был изменен в последний раз и когда он истекает.

Смотрите man 5 shadow( веб-версия ) для получения полной информации о формате файла.


Я не могу сказать, так ли это для SUSE, не зная, с какой версией SUSE вы имеете дело. Например, ваша система SUSE может использовать Blowfish вместо MD5.

Вы также подразумевали, что смешивали свой /etc/shadowфайл с системой, работающей под другим дистрибутивом Linux, но не сказали, каким был другой дистрибутив.

См., Например, Проблемы миграции теневого файла с SuSE 9.3 на Ubuntu Server x86_64 .

Чтобы попытаться выяснить это, откройте /etc/shadowи посмотрите, начинается ли поле зашифрованного пароля с $1$или $2$. Если он содержит $1$, то он MD5 и совместим с большинством других дистрибутивов. Если он содержит $2$, то это, вероятно, Blowfish в соответствии с теневыми файлами Blowfish в Debian .

Если вы используете Ubuntu, первый результат поиска Google для Ubuntu Blowfish может быть хорошей отправной точкой.

Mikel
источник
3

Пользователи перечислены в /etc/passwdфайле. Этот файл содержит много информации, используемой системой, не только для того, чтобы пользователи могли войти в систему.

Каждая строка соответствует записи пользователя, а различные поля разделены двоеточиями. Первым полем является логин, за которым следует соответствующий пароль.

Зашифрованные пароли раньше хранились в этом поле. Тем не менее, /etc/passwdфайл должен быть доступен для чтения всем в системе, поэтому шифрование не предотвращает атаки методом "грубой силы", как было сказано @Mikel. Решение было перенести эти зашифрованные пароли в корневом только читаемом файл: /etc/shadow.

Таким образом, /etc/shadowсодержит зашифрованные пароли пользователей системы. Система знает, что она должна проверять пароли в этом файле, когда в полях паролей /etc/passwdсодержится только один х (что означает « перейти к / etc / shadow»)

jopasserat
источник
1
Обратите внимание, что пароли, хранящиеся в, /etc/passwdбыли / все еще хешируются точно так же, как если бы они были в /etc/shadow. Вы на самом деле не говорите, что пароли /etc/passwdбыли бы незашифрованными, но кому-то, незнакомому с обработкой паролей * nix, было бы легко неверно истолковать ваш ответ как подразумевающий это.
Дейв Шерохман
Спасибо за ваш комментарий, который помог мне улучшить мой ответ.
Я не думаю, что на xсамом деле ничего не значит. Это просто недействительный хеш (тот, который не соответствует ни одному паролю). Некоторые системы используют !.
user1686
3

Давайте посмотрим, смогу ли я получить все положительные голоса в мире, так как я написал то, что стало Linux Shadow Password Suite в 87 году;)

Исходный /etc/passwdфайл содержал модифицированный хеш-код пароля открытого текста на основе DES. Во время создания crypt()функции считалось (и это было заявлено создателями операционной системы UNIX), что атаки на хеш паролей были бы невозможны из-за количества возможных паролей и использования 12-битного (4096 возможных значений) «соль». Каждый возможный пароль в виде открытого текста имел 4096 возможных значений хэширования и 64-битный результат хеширования, что давало в общей сложности 2 ^ 72 возможных хэшей пароля.

Как упоминалось в другом постере, /etc/passwdон также использовался различными утилитами для сопоставления имен пользователей и значений UID ( /etc/groupфайл предоставляет аналогичную функцию для групп), и для этого требовалось, чтобы он был читаем для всех.

В 1980-х годах стало очевидным, что словарные атаки против хэша пароля, хранящегося в /etc/passwdфайле, становятся осуществимыми и /etc/shadowбыли представлены AT & T UNIX в раннем выпуске System V. Я задокументировал, какие страницы управления я использовал для написания исходной библиотеки Shadow, и я ' Мы забыли, но это был, безусловно, ранний выпуск System V, вероятно SVR3.2.

То, что сделал AT & T, и то, что я реализовал для SCO Xenix (первоначальный SCO Xenix, а не позже злой SCO Xenix) в 87 году, который в конечном итоге вошел в эксплуатацию в Linux, - это просто перенести хешированный пароль /etc/shadow. Это предотвратило атаку «Drive-by», когда непривилегированный пользователь получил копию /etc/passwdи провел атаку против нее. Если вы знаете, почему я сначала написал Shadow, у меня был пользователь, загружавший мой /etc/passwdфайл через UUCP, в те времена, когда мы все еще использовали UUCP практически для всего.

К тому времени, когда Linux был создан и получил широкое распространение, было очень много инструментов для атаки на хэши паролей. Высокопроизводительные повторные реализации crypt()были одним путем, а атаки по словарю с помощью таких инструментов, как Crack и libcrack, были другими. Первоначальный порт был сделан Нейтом Холлоуэем и Флорией Ля Рош (я дал им должное, я не знаю, делал ли кто-нибудь работу до них).

В конце концов использование crypt()хэшей на основе, даже в защищенном файле, перестало быть безопасным, и MD5были сделаны первоначальные изменения хэша. MD5в конце концов он был признан слишком слабым, и использовались более новые хэши.

Теоретически, достаточно сильный хеш может храниться в /etc/passwd. Плохая эксплуатационная безопасность означает, что у многих систем есть свои /etc/shadowфайлы, доступные через различные векторы атаки - «Я украл файлы резервных копий», вероятно, самый простой.

Джули в Остине
источник