passwd — это команда в Unix , Plan 9 , Inferno и большинстве Unix-подобных операционных систем , используемая для изменения пароля пользователя . Введенный пользователем пароль проходит через функцию деривации ключа для создания хэшированной версии нового пароля, которая сохраняется. Сохраняется только хэшированная версия; введенный пароль не сохраняется по соображениям безопасности.
Когда пользователь входит в систему, пароль, введенный пользователем во время процесса входа в систему, пропускается через ту же функцию деривации ключа, и полученная хешированная версия сравнивается с сохраненной версией. Если хеши идентичны, введенный пароль считается правильным, и пользователь аутентифицируется. Теоретически возможно, что два разных пароля могут создать один и тот же хеш . Однако криптографические хеш-функции разработаны таким образом, что найти любой пароль, который создает тот же хеш, очень сложно и практически невозможно, поэтому, если созданный хеш совпадает с сохраненным, пользователь может быть аутентифицирован.
Команду passwd можно использовать для изменения паролей локальных учетных записей, а в большинстве систем ее также можно использовать для изменения паролей, управляемых с помощью распределенного механизма аутентификации, такого как NIS , Kerberos или LDAP .
Файл /etc/passwd
представляет собой текстовую базу данных с информацией о пользователях , которые могут входить в систему, или о других пользователях операционной системы, которым принадлежат запущенные процессы.
Во многих операционных системах этот файл является лишь одним из многих возможных бэкэндов для более общей службы имен passwd .
Название файла происходит от одной из его первоначальных функций, поскольку он содержал данные, используемые для проверки паролей учетных записей пользователей. Однако в современных системах Unix конфиденциальная информация о паролях часто хранится в другом файле с использованием теневых паролей или других реализаций баз данных.
Файл /etc/passwd
обычно имеет разрешения файловой системы , которые позволяют всем пользователям системы читать его ( доступно для чтения всем ), хотя изменять его может только суперпользователь или с помощью нескольких специальных привилегированных команд.
Файл /etc/passwd
представляет собой текстовый файл с одной записью на строку , каждая из которых описывает учетную запись пользователя . Каждая запись состоит из семи полей, разделенных двоеточиями . Порядок записей в файле, как правило, неважен.
Пример записи может быть таким:
jsmith : x : 1001 : 1000 : Джо Смит, комната 1007, (234) 555-8910, (234) 555-0044, эл. почта : /home/jsmith : /bin/sh
Поля, в порядке слева направо, следующие: [1]
jsmith
: Имя пользователя: строка, которую пользователь введет при входе в операционную систему: имя журнала . Должно быть уникальным среди пользователей, перечисленных в файле.x
: Информация, используемая для проверки пароля пользователя . Формат такой же, как у аналогичного поля в файле теневых паролей, с дополнительным соглашением, что установка его на «x» означает, что фактический пароль находится в файле теней, что является обычным явлением в современных системах. [2]1001
: номер идентификатора пользователя , используемый операционной системой для внутренних целей. Он должен быть уникальным, поскольку он однозначно идентифицирует пользователей.1000
: номер идентификатора группы , который определяет основную группу пользователя; все файлы, созданные этим пользователем, изначально могут быть доступны этой группе.Joe Smith,Room 1007...
: Поле Gecos , комментарий, описывающий человека или учетную запись. Обычно это набор разделенных запятыми значений, включая полное имя пользователя и контактные данные. [3]/home/jsmith
: Путь к домашнему каталогу пользователя ./bin/sh
: Программа, которая запускается каждый раз, когда пользователь входит в систему. Для интерактивного пользователя это обычно один из интерпретаторов командной строки системы ( shells )./etc/shadow
используется для повышения уровня безопасности паролей путем ограничения доступа всех, кроме высокопривилегированных пользователей, к хэшированным данным паролей. Обычно эти данные хранятся в файлах, владельцем и доступным только для суперпользователя .
Системные администраторы могут снизить вероятность атак методом подбора, сделав список хэшированных паролей недоступным для чтения непривилегированными пользователями. Очевидный способ сделать это — сделать passwd
саму базу данных доступной для чтения только пользователю root. Однако это ограничит доступ к другим данным в файле, таким как сопоставления имени пользователя и идентификатора пользователя, что нарушит работу многих существующих утилит и положений. Одним из решений является «теневой» файл паролей для хранения хэшей паролей отдельно от других данных в общедоступном для чтения файле passwd . Для локальных файлов это обычно происходит /etc/shadow
в системах Linux и Unix или /etc/master.passwd
в системах BSD ; каждый из них доступен для чтения только пользователю root . (Доступ root к данным считается приемлемым, поскольку в системах с традиционной моделью безопасности «всемогущий root» пользователь root в любом случае сможет получить информацию другими способами). Практически все последние операционные системы типа Unix используют теневые пароли.
Файл теневого пароля не решает полностью проблему доступа злоумышленника к хешированным паролям, поскольку некоторые схемы сетевой аутентификации работают, передавая хешированный пароль по сети (иногда в открытом виде , например, Telnet [4] ), что делает его уязвимым для перехвата. Копии системных данных, такие как резервные копии системы, записанные на ленту или оптический носитель, также могут стать средством незаконного получения хешированных паролей. Кроме того, функции, используемые законными программами проверки паролей, должны быть написаны таким образом, чтобы вредоносные программы не могли выполнять быстрые проверки аутентификации.
Независимо от того, действует ли теневое копирование паролей в данной системе, файл passwd доступен для чтения всем пользователям, так что различные системные утилиты (например, grep ) могут работать (например, чтобы гарантировать, что имена пользователей, существующие в системе, могут быть найдены внутри файла), в то время как только пользователь root может записывать в него. Без теневого копирования паролей это означает, что злоумышленник с непривилегированным доступом к системе может получить хешированную форму пароля каждого пользователя. Эти значения могут быть использованы для проведения атаки методом подбора в автономном режиме, проверяя возможные пароли против хешированных паролей относительно быстро, не вызывая тревогу у системных мер безопасности, разработанных для обнаружения ненормального количества неудачных попыток входа в систему . Особенно, когда хеш не соленый, эти хешированные пароли также можно искать в радужных таблицах , базах данных, специально созданных для возврата пароля для уникального хеша.
При использовании схемы теневого пароля /etc/passwd
файл обычно отображает символ, например « *
», или « x
», в поле пароля для каждого пользователя вместо хешированного пароля и /etc/shadow
обычно содержит следующую информацию о пользователе:
$id$salt$hashed
, печатная форма хэша пароля, созданная crypt (C) , где $id
- используемый алгоритм. Другие Unix-подобные системы могут иметь другие значения, например NetBSD. Растягивание ключа используется для увеличения сложности взлома пароля , используя по умолчанию 1000 раундов модифицированного MD5, [5] 64 раунда Blowfish, 5000 раундов SHA-256 или SHA-512. [6] Количество раундов может варьироваться для Blowfish или для SHA-256 и SHA-512 с помощью $A$rounds=X$
, где «A» и «X» - идентификаторы алгоритма и количество раундов. Обычные значения идентификатора включают: [7]Формат файла shadow прост и в основном идентичен формату файла паролей, а именно, одна строка на пользователя, упорядоченные поля в каждой строке и поля, разделенные двоеточиями. Многие системы [ quantify ] требуют, чтобы порядок строк пользователей в файле shadow был идентичен порядку соответствующих пользователей в файле паролей.
До появления теневого копирования паролей хешированный пароль пользователя Unix хранился во втором поле его записи в /etc/passwd
файле (в формате из семи полей, как описано выше).
Скрытие паролей впервые появилось в системах Unix с разработкой SunOS в середине 1980-х годов, [10] System V Release 3.2 в 1988 году и BSD 4.3 Reno в 1990 году. Однако поставщики, которые выполнили портирование из более ранних выпусков UNIX, не всегда включали новые функции теневого копирования паролей в свои выпуски, в результате чего пользователи этих систем подвергались атакам на файлы паролей.
Системные администраторы также могут организовать хранение паролей в распределенных базах данных, таких как NIS и LDAP , а не в файлах на каждой подключенной системе. В случае NIS механизм теневого пароля часто все еще используется на серверах NIS; в других распределенных механизмах проблема доступа к различным компонентам аутентификации пользователей решается механизмами безопасности базового хранилища данных.
В 1987 году автор оригинального Shadow Password Suite , Джули Хо, подверглась взлому компьютера и написала первый релиз Shadow Suite, содержащий команды login
, passwd
и su
. Первоначальный релиз, написанный для операционной системы SCO Xenix , был быстро перенесен на другие платформы. Shadow Suite был перенесен на Linux в 1992 году, через год после первоначального объявления о проекте Linux, и был включен во многие ранние дистрибутивы, и продолжает быть включенным во многие текущие дистрибутивы Linux .
Раньше для смены паролей в разных схемах аутентификации требовались разные команды. Например, команда для смены пароля NIS была yppasswd . Это требовало от пользователей знания разных методов смены паролей для разных систем, а также приводило к расточительному дублированию кода в разных программах, которые выполняли одни и те же функции с разными бэкэндами . В большинстве реализаций теперь есть одна команда passwd, а контроль того, где фактически меняется пароль, осуществляется прозрачно для пользователя с помощью подключаемых модулей аутентификации (PAM). Например, тип используемого хеша определяется конфигурацией модуля pam_unix.so
. По умолчанию используется хеш MD5 , в то время как текущие модули также способны на более сильные хеши, такие как blowfish , SHA256 и SHA512 .