Почему для файла / etc / shadow установлено разрешение 600?

25

Разрешения /etc/shadow600, что означает, что он не доступен для чтения никому, кроме root.

Однако, поскольку все пароли внутри него хранятся не в виде обычного текста, а в виде хешей (что означает, что невозможно вычислить исходный пароль из хеша), почему он не может быть прочитан всеми?

Шубханшу Вишвакарма
источник
Вы уверены, что разрешения для /etc/shadowявляются 600?
Edwinksl
4
Если пароль вашей учетной записи Stackoverflow хэширован, готовы ли вы показать свой хешированный пароль другим?
Чон
5
@ByteCommander. Иногда я хочу способ внести изменения.
TRiG

Ответы:

60

Предотвратить оффлайн атаки методом перебора.

Даже если вы не можете отменить хэш, вы все равно можете попробовать хэшировать все возможные пароли, пока не найдете совпадение, и вы можете делать миллионы попыток в секунду с хорошим оборудованием и локальным доступом к файлу.

Если у файла есть 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вместо этого.

insert_name_here
источник
1
Хороший звонок на копирование файла!
Rinzwind
1
и мне не нужен представитель ;-) edit: хм, он установил его на моем: P извините: D edit2 и теперь он снова вернулся. эх: D
Rinzwind
6
В последний раз я проверял, что вы можете поместить хешированный пароль обратно в / etc / passwd, удалить строку из / etc / shadow и ожидать, что сможете войти в систему. / Etc / shadow существует, поэтому его можно установить равным 600 по указанной причине. в этом ответе.
Джошуа
8
Стоит отметить, что разрешения для / etc / passwd - 644. Я считаю, что исторически хэши паролей хранились здесь. Однако изменение этого файла на 640 вызвало бы все виды проблем совместимости, поэтому вместо этого хэши паролей были перемещены в тень и удалены из passwd - это позволяет другой информации в passwd оставаться доступной для чтения во всем мире, в то время как хэши паролей хранятся в секрете. другой файл.
Родни
4
@ Родни, как тот, кто вырос на BSD 4.3, вы правы. Хеши были сохранены в / etc / passwd. Когда Vax 11/780 был современным, атака методом перебора паролей в файле считалась невозможной. Возможно, что еще более важно, Интернет [Арпанет] был сонной маленькой затылкой, и такие вещи вряд ли рассматривались; не было ssh- только рлогин / телнет. Сохранение файла паролей 644 означает, что утилиты, такие как lssetuid, не нуждаются в root для преобразования из uid в имя.
Майк С
13

На самом деле, / etc / shadow был создан, чтобы позволить отойти от общедоступного списка имен пользователей и паролей.

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

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

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

Посмотрите на / etc / passwd в вашей системе. Видите это второе поле, которое говорит xвезде? Используется для хранения хешированного пароля для рассматриваемой учетной записи.

Проблема заключалась в том, что люди могли загружать / etc / passwd или даже не загружать его и работать над взломом паролей. Это не было большой проблемой, в то время как компьютеры не были особенно мощными (Клиффорд Столл, в «Яйце с кукушкой») , насколько я помню, дает время для хеширования одного пароля в системе класса IBM PC в середине 1980-х годов примерно на секунду. ), но это стало проблемой по мере увеличения вычислительной мощности. В какой-то момент, с приличным списком слов, взломать эти пароли стало слишком легко. По техническим причинам эта схема также не может поддерживать пароли длиннее восьми байт.

Для решения этой проблемы были сделаны две вещи:

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

Этот файл / etc / shadow.

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

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

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

CVn
источник
мне очень нравится, как ты описываешь каждую вещь :) (у)
Шубханшу Вишвакарма
Терминология / этимология: /etc/shadowне содержит «теневых паролей» (потому что это не вещь). Весь файл является тенью /etc/passwd. Посмотрите, как терминология используется в теневом пароле Linux. HOWTO : Зачем нужен теневой файл passwd? , В отличие от некоторых других применений термина «Shadow» в вычислениях, это не теневая копия (как, например, дублирование кода BIOS в ОЗУ вместо запуска из ПЗУ). Поле в / etc / passwd является заполнителем, содержащим специальный символ, который означает, что "настоящий хэш пароля находится в / etc / shadow".
Питер Кордес
Хорошая история но 1 сек. количество паролей практически не ограничивалось даже в 1980-х годах, когда верхние пароли использовали более 1% людей каждый.
Уоррен Дью
1
@WarrenDew Не уверен, что вы делаете констатацию факта или мнение. Функция crypt () имеет 12-битную соль и 12 + 64-битный выход для восьмибайтового пароля (тогда обычно кодируется base64). Для обычных паролей, да, вы, вероятно , можете атаковать их с помощью грубой силы, но это не займет , что большое часть пароля , чтобы растрескиванию при переборе неосуществимого , если каждая проверка пароля занимает второе место . Предварительные вычисления таблицы с солями даже для одного пароля занимают порядка часа со скоростью одного шифрования в секунду, плюс вам приходится бороться с ограниченным объемом памяти (в те дни было 40–80 МБ).
CVn
@PeterCordes Хороший вопрос. Я удаляю этот отрывок, потому что он действительно не имеет особого отношения к ответу на вопрос ОП.
CVn
10

Почему для файла / etc / shadow установлено разрешение 600?

Кто тебе это сказал?

$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
  • это 640.

Простой ответ: разрешения в Linux воспринимаются серьезно. У «других» нет никаких причин что-либо делать /etc/shadow. И нет никаких причин для того, чтобы группа «тень» писала в нее. И исполнение вышло из строя.

Однако, поскольку все пароли внутри него хранятся не в виде обычного текста, а в виде хешей (что означает, что невозможно вычислить исходный пароль из хеша), почему он не может быть прочитан всеми?

Потому что нет единой причины для этого.

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

Этот ответ интересен и имеет некоторые оценки по грубому принуждению.

Rinzwind
источник
640 для обычного пользователя ?? Пользователь группы может читать теневой файл ??
Шубханшу Вишвакарма
Сожалею? Файл 640. Так что читайте, пишите для пользователя «root» и читайте для группы «shadow». "shadow" - это группа, созданная привилегированной системой для этой конкретной цели.
Rinzwind
2

Важная информация: /etc/shadowсуществует исключительно для того, чтобы скрыть хеши паролей. В ранние дни Unix хэши паролей хранились в /etc/passwd. Поскольку компьютеры стали более мощными, сетевые соединения стали более устойчивыми, а средства безопасности стали более изощренными, люди поняли, что хранение хэшей паролей, читаемых словами, вызывает проблемы. (Я не буду подробно описывать эксплойты; уже достаточно хороших ответов об этом.)

Но /etc/passwdне может быть защищен от чтения: он используется всеми видами программ для сопоставления числовых идентификаторов пользователей с именами пользователей, а также для поиска домашних каталогов, оболочек по умолчанию, полного имени пользователя (и номера офиса и т. Д. - проверить man finger) , Таким образом, конфиденциальная часть, хеши паролей, была перемещена /etc/shadow, а остальная часть осталась прежней. Поэтому /etc/passwd, несмотря на название, содержит все, кроме (хешированного) пароля.

Алексиса
источник
спасибо за ваш ответ на мой вопрос, теперь я получил полное представление о файлах / etc / passwd и / etc / shadow.
Шубханшу Вишвакарма