Почему для файла /etc/shadow установлено разрешение 600?
Разрешения /etc/shadow
600, что означает, что он не доступен для чтения никому, кроме root.
Однако, поскольку все пароли внутри него хранятся не в виде обычного текста, а в виде хешей (что означает, что невозможно вычислить исходный пароль из хеша), почему он не может быть прочитан всеми?
4 ответа
Предотвратить оффлайн атаки методом перебора.
Даже если вы не можете отменить хэш, вы все равно можете попробовать хэшировать все возможные пароли, пока не найдете совпадение, и вы можете делать миллионы попыток в секунду с хорошим оборудованием и локальным доступом к файлу.
Если файл имел 644
разрешения, то любой, кто вошел в вашу систему, даже в гостевой сессии, сможет скопировать этот файл с вашего компьютера (на USB-накопитель или удаленно через scp
) и попытаться провести автономную атаку методом перебора, не оставляя никаких доказательств этого на вашем компьютере.
Обратите внимание, что разрешения на Ubuntu на самом деле 640
не 600
:
$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow
Это не имеет большого значения, так как для других по-прежнему нет разрешений, и по умолчанию никого нет в shadow
группа.
Изначально хэши хранились в /etc/passwd
(вот почему это называется passwd
), как тогда, когда создавался Linux, взломать хеш, даже слабые типы, использовавшиеся тогда, было практически невозможно. Однако со временем вычислительная мощность достигла такой степени, что взломать хэш, по крайней мере, относительно слабого пароля, стало возможным.
Изменение разрешений /etc/passwd
в 640
или же 600
не будет работать, так как есть много законных причин, чтобы иметь возможность читать /etc/passwd
как обычный пользователь (преобразование UID в имена пользователей, получение полного имени пользователя, номера телефона и т. д.), поэтому хэши были перемещены в /etc/shadow
, который был дан 640
разрешения. x
вместо поля хеша пароля для пользователя в /etc/passwd
используется, чтобы указать, что хеш для этого пользователя хранится в /etc/shadow
вместо.
На самом деле, /etc/shadow был создан, чтобы позволить отойти от общедоступного списка имен пользователей и паролей.
Держитесь там, это будет небольшой урок истории, прежде чем мы перейдем к фактическому ответу. Если вас не волнует история, просто прокрутите немного вниз.
В старые времена Unix-подобные ОС, включая Linux, обычно хранили пароли в /etc/passwd. Этот файл был доступен для чтения всем и остается, потому что он содержит информацию, позволяющую сопоставлять, например, числовые идентификаторы пользователей и имена пользователей. Эта информация очень полезна даже для обычных пользователей в совершенно законных целях, поэтому удобство чтения файлового мира очень полезно.
Уже тогда люди понимали, что иметь пароли в виде простого текста в файле в хорошо известном месте, которое любой, кто мог войти, мог свободно читать, было плохой идеей. Так что в некотором смысле пароли были хешированы. Это старый "криптованный" механизм хеширования паролей, который почти никогда не используется в современных системах, но часто поддерживается в устаревших целях.
Посмотрите на / etc / passwd в вашей системе. Посмотрите на это второе поле, которое говорит x
везде? Используется для хранения хешированного пароля для рассматриваемой учетной записи.
Проблема заключалась в том, что люди могли загружать / etc / passwd или даже не загружать его и работать над взломом паролей. Это не было большой проблемой, в то время как компьютеры не были особенно мощными (Клиффорд Столл, в "Яйце кукушки", насколько я помню, дает время для хеширования одного пароля в системе класса IBM PC в середине 1980-х годов примерно на секунду).), но это стало проблемой по мере увеличения вычислительной мощности. В какой-то момент, с приличным списком слов, взломать эти пароли стало слишком легко. По техническим причинам эта схема также не может поддерживать пароли длиннее восьми байт.
Для решения этой проблемы были сделаны две вещи:
- Переход к более сильным хеш-функциям. Старый crypt() изжил свой срок полезного использования, и были разработаны более современные схемы, которые были бы как на будущее, так и в вычислительном отношении.
- Переместите хешированные пароли в файл, который никто не может прочитать. Таким образом, даже если хэш-функция пароля оказалась слабее, чем ожидалось, или если у кого-то был слабый пароль для начала, у злоумышленника было еще одно препятствие, чтобы получить доступ к значениям хеша для начала. Это больше не было бесплатным для всех.
Этот файл / etc / shadow.
Программное обеспечение, которое работает с /etc/shadow, как правило, очень маленькое, сильно сфокусировано и имеет тенденцию к получению дополнительной проверки в обзорах из-за потенциальных проблем. Он также работает со специальными разрешениями, которые позволяют ему читать и изменять /etc/shadow, в то же время обычные пользователи не могут просматривать этот файл.
Итак, у вас есть: разрешения на / etc / shadow являются ограничивающими (хотя, как уже отмечалось, не такими ограничительными, как вы заявляете), потому что вся цель этого файла - ограничить доступ к конфиденциальным данным.
Предполагается, что хеш пароля надежный, но если ваш пароль входит в список 500 самых популярных паролей в Интернете, любой, у кого есть доступ к хешу, все равно сможет быстро найти пароль. Защита хеша предотвращает эту простую атаку и поднимает планку для успешной атаки от простого просмотра до того, что требуется либо уже быть системным администратором на хосте, либо сначала пройти атаку по повышению привилегий. Особенно в правильно управляемой многопользовательской системе, обе эти задачи значительно сложнее, чем просто просмотр файла, доступного для чтения.
Почему для файла /etc/shadow установлено разрешение 600?
Кто тебе это сказал?
$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
- это 640.
Простой ответ: разрешения в Linux воспринимаются серьезно. У "других" нет причин делать что-либо с /etc/shadow
, И нет никаких причин для того, чтобы группа "тень" писала в нее. И исполнение вышло из строя.
Однако, поскольку все пароли внутри него хранятся не в виде обычного текста, а в виде хешей (что означает, что невозможно вычислить исходный пароль из хеша), почему он не может быть прочитан всеми?
Потому что нет единой причины для этого.
Хэши односторонние. Предоставление кому-либо доступа для чтения позволяет ему использовать сценарий для злоупотребления этим односторонним путем: просто перечислите любое слово, которое вы можете себе представить, и создайте хэш. В какой-то момент это может соответствовать паролю. Хотя это может занять некоторое время.
Этот ответ интересен и имеет некоторые оценки по грубому принуждению.
Важный фон: /etc/shadow
существует исключительно для того, чтобы скрыть хеши паролей. В ранние дни Unix хэши паролей хранились в /etc/passwd
, Поскольку компьютеры стали более мощными, сетевые соединения стали более устойчивыми, а средства безопасности стали более изощренными, люди поняли, что хранение хэшей паролей, читаемых словами, вызывает проблемы. (Я не буду подробно описывать эксплойты; уже достаточно хороших ответов об этом.)
Но /etc/passwd
не может быть защищен от чтения: он используется всеми видами программ для сопоставления числовых идентификаторов пользователей с именами пользователей, а также для поиска домашних каталогов, оболочек по умолчанию, полного имени пользователя (и номера офиса и т. д.). man finger
). Поэтому чувствительная часть, хеши паролей, была перемещена в /etc/shadow
а остальное осталось как было. Вот почему /etc/passwd
, despide name, содержит все, кроме (хешированного) пароля.