Безопасность файлового сервера AFP
Информации, хранившей в совместно используемом ресурсе, нужна защита от неавторизованных пользователей. Роль безопасности файлового сервера должна обеспечить переменные суммы и виды защиты, в зависимости от того, что чувствуют пользователи, необходимо.
AFP обеспечивает безопасность тремя способами:
аутентификация пользователя, когда пользователь входит в систему сервера
дополнительный пароль уровня громкости, когда пользователь сначала пытается получить доступ к объему
средства управления доступом каталога
Методы аутентификации пользователей
AFP обеспечивает возможность серверов и клиентов AFP для использования множества методов для аутентификации пользователей, когда они входят в систему. Определяются пять методов аутентификации пользователей: никакая аутентификация пользователя, пароль в виде открытого текста, случайное число обменный, двухсторонний обмен случайного числа и Обмен ключами Диффи-Хеллмана. Некоторые UAMs также используются для изменения пароля после того, как пользователь войдет в систему.
Клиент AFP указывает его выбор UAM путем предоставления серверу строки UAM. Эти строки предназначаются, чтобы быть нечувствительными к регистру и диакритическо-чувствительными.
Некоторые UAMs запрашивают дополнительную информацию аутентификации пользователя, которая будет передана серверу в FPLogin или FPLoginExt команда. Следующие разделы описывают UAMs и виды информации, которую они запрашивают.
Никакая аутентификация пользователя
Никакая Аутентификация пользователя UAM не требует никакой информации аутентификации. Когда FPLogin и FPLoginExt команды не используют Аутентификацию пользователя UAM, нет никакого параметра UserAuthInfo. Соответствующее нечувствительное к регистру имя протокола UAM ни для Какой Аутентификации пользователя UAM No User Authent. Когда пользователь входит в систему как Гостевой пользователь, Никакой UAM Аутентификации пользователя используется.
Для реализации средств управления доступом каталога, описанных позже в этом разделе, сервер должен присвоить Идентификатор пользователя и Группу ID пользователю для сеанса.
Числа Идентификатора пользователя и Идентификационные номера Группы присваиваются от того же пула чисел. Кроме того, начиная с AFP 2.1, серверы AFP должны присвоить нуль пользователям, входящим в систему как Гостевой пользователь и 1 Администратору/Владельцу.
В этом UAM сервер присваивает пользователю «Всех» права доступа для каждого каталога в каждом объеме сервера. «Все» права доступа описаны в разделе Directory Access Controls.
Пароль в виде открытого текста
Пароль в виде открытого текста UAM передает имя пользователя и пароль к серверу как открытый текст (т.е. не закодированный). Имя протокола для Пароля в виде открытого текста UAM Cleartxt Passwrd.
Для FPLogin команда, UserAuthInfo параметр состоит из имени пользователя (который является строкой до 255 символов Macintosh Roman), сопровождаемый паролем пользователя (до 8 байтов). Для FPLoginExt команда, UserAuthInfo параметр состоит из имени пользователя (который является строкой до 255 символов Unicode), сопровождаемый паролем пользователя (до 8 байтов). Чтобы гарантировать, что пароль пользователя выровненный на ровной границе байта в пакете, клиенту AFP, вероятно, придется вставить нулевой байт (0x00) между именем пользователя и паролем. Если пользователь обеспечивает пароль, который короче, чем 8 байтов, он должен быть дополнен в конце с нулевыми байтами для создания пароля восемь байтов длиной. Допустимый набор символов в паролях состоит из всех 8-разрядных символов ASCII.
Сравнение имени пользователя нечувствительно к регистру, но сравнение пароля чувствительно к регистру для этого UAM. Если существует пользователь указанного имени, пароль которого соответствует пароль, предоставленный вызывающей стороной FPLogin или FPLoginExt, пользователь аутентифицировался, и вход в систему успешно выполняется. Если пароли не соответствуют, a kFPUserNotAuth код результата возвращается.
UAM Пароля в виде открытого текста должен использоваться клиентами AFP, только если прошедшая сеть безопасна против подслушивания. Иначе, информация о пароле может быть считана из FPLogin или FPLoginExt пакеты команды любым слушающим в сети.
Рисунок 3-1 показывает блок запроса для вызова FPChangePassword при использовании Пароля в виде открытого текста UAM.

Exchange случайного числа
В средах, в которых сеть не безопасна против подслушивания, Exchange Случайного числа является более безопасным методом аутентификации пользователей. Имя протокола для этого UAM Randnum Exchange. С Exchange Случайного числа пароль пользователя никогда не отправляется по сети и не может быть взят путем подслушивания. Получение пароля от информации, отправленной по сети, является столь же трудным как повреждение зашифрованного пароля DES.
С Exchange Случайного числа UAM только имя пользователя отправляется в параметре UserAuthInfo FPLogin или FPLoginExt команда. Если имя пользователя допустимо, сервер генерирует восьмибайтовое случайное число и передает его обратно клиенту AFP, вместе с Идентификационным номером и a kFPAuthContinue код результата. kFPAuthContinue код результата указывает, что все хорошо в этой точке, но еще не аутентифицировался пользователь. Клиент AFP тогда шифрует случайное число с паролем пользователя и отправляет результат в сервер в UserAuthInfo параметр FPLoginCont команда вместе с Идентификационным номером возвратилась ранее сервером в блоке ответа от FPLogin или FPLoginExt команда. Сервер использует Идентификационный номер для соединения более раннего FPLogin или FPLoginExt команда с этим вызовом к FPLoginCont. Сервер ищет пароль для того пользователя и использует его в качестве ключа для шифрования того же случайного числа. Если два зашифрованных числа соответствуют, пользователь аутентифицировался, и вход в систему успешно выполняется. Иначе, сервер возвращает a kFPUserNotAuth код результата.
Следующие шаги объясняют Exchange Случайного числа UAM более подробно:
Клиент AFP отправляет
FPLoginилиFPLoginExtблок команды со строкой UAM иUserAuthInfoпараметр, содержащий строку имени пользователя. ДляFPLogin, имя пользователя может быть до 255 символов Macintosh Roman долго; дляFPLoginExt, имя пользователя может быть до 255 символов Unicode долго.После получения этого блока команды сервер исследует свою пользовательскую базу данных, чтобы определить, допустимо ли имя пользователя. Сравнение имени пользователя нечувствительно к регистру и диакритическо-чувствительно.
Если сервер не находит имя пользователя в пользовательской базе данных, это отправляет код ошибки клиенту AFP, указывающему, что имя пользователя не допустимо и отклоняет запрос входа в систему. Если сервер находит имя в пользовательской базе данных, это генерирует восьмибайтовое случайное число и отправляет его клиенту AFP, вместе с Идентификационным номером и
kFPAuthContinueкод результата.kFPAuthContinueкод результата указывает, что все хорошо в этой точке, но еще не аутентифицируется пользователь.И клиент AFP и сервер используют Стандарт шифрования данных Национального института стандартов и технологий (NIST DES) алгоритм для шифрования случайного числа. Чувствительный к регистру пароль пользователя применяется как ключ шифрования для генерации восьмибайтового значения. Сервер применяет тот же алгоритм к паролю, который это считает связанным с именем пользователя в его базе данных.
Клиент AFP отправляет зашифрованное значение в сервер в
UserAuthInfoпараметрFPLoginContкоманда, вместе с Идентификационным номером это получило от сервера. Сервер использует Идентификационный номер для соединения предыдущегоFPLoginилиFPLoginExtкоманда с ее соответствиемFPLoginContкоманда.Сервер сравнивает зашифрованное значение клиента AFP с зашифрованным значением, полученным с помощью пароля от его пользовательской базы данных. Если два зашифрованных значения соответствуют, процесс аутентификации завершен, и вход в систему успешно выполняется. Сервер возвращает код результата
kFPNoErrклиенту AFP. Если два зашифрованных значения не соответствуют, сервер возвращаетсяkFPUserNotAuthкод результата.
Рисунок 3-2 показывает блок запроса для вызова FPChangePassword при использовании Exchange Случайного числа UAM.

Двухсторонний Exchange случайного числа
С Двухсторонним Exchange Случайного числа UAM пользователь аутентифицируется к серверу, и сервер аутентифицируется пользователю, принимающему меры против спуфинга (т.е. с помощью поддельного сервера для получения паролей или данных). Этот метод использует те же шаги в качестве Exchange Случайного числа UAM с тремя дополнительными шагами. Соответствующая строка UAM 2-Way Randnum.
Когда клиент отправляет, как Exchange Случайного числа UAM, Двухсторонний Exchange Случайного числа запускается UAM FPLogin или FPLoginExt запросите к серверу, включающему имя пользователя пользователя. Если сервер находит имя пользователя в базе данных имени пользователя, сервер возвращает Идентификационный номер, восьмибайтовое случайное число и код результата kFPAuthContinue. Клиент тогда кодирует случайное число с паролем пользователя и отправляет закодированное число и Идентификационный номер к серверу в FPLoginCont запрос. Если закодированный пароль соответствует копию сервера случайного числа, закодированного копией сервера пароля, клиент аутентифицируется и kFPNoErr возвращается.
Дополнительные шаги Двухстороннего Exchange Случайного числа
Клиент отправляет к серверу
FPLoginContзапрос, включающий второе восьмибайтовое случайное число.Сервер кодирует второе восьмибайтовое случайное число с, он - копия пароля пользователя от пользовательской базы данных и возвращает закодированное случайное число в
FPLoginContблок ответа.Клиент кодирует случайное число с паролем пользователя и сравнивает его с закодированным случайным числом от сервера. Если они соответствуют, сервер также аутентифицируется.
Рисунок 3-3 показывает запрос и блочные форматы ответа для FPLoginCont команда, когда Двухсторонний Exchange Случайного числа используется UAM.

Двухсторонний Exchange Случайного числа UAM не доступен для использования с FPChangePassword команда. Вместо этого Exchange Случайного числа UAM должен использоваться для изменения пароля. Пользователь, уже вошедший в систему с помощью Двухстороннего Exchange Случайного числа UAM и кто изменяет его или ее пароль, уже аутентифицировал сервер, таким образом, нет никакой потребности аутентифицировать сервер снова при помощи Двухстороннего Exchange Случайного числа UAM.
Обмен ключами Диффи-Хеллмана
Обмен ключами Диффи-Хеллмана (DHX) является реализацией Протокола Согласования ключей Diffie-Hellman с помощью реализации SSLeay/OpenSSL CAST 128 в режиме CBC. Имя протокола UAM для DHX ‘DHCAST128’.
DHX силен против пакетных атак сниффинга, но уязвим для активных атак такой “Человек в Середине”. Нет никакого способа для клиента проверить, что сервер знает пароль, таким образом, мог легко имитироваться сервер. Существует некоторая слабость в использовании фиксированных векторов инициализации, p и g. Когда сервер требует паролей в открытом тексте, DHX полезен.
С DHX клиентом и сервером каждый генерирует случайное число, Ra и Rb соответственно, служащие «закрытыми ключами» для сеанса. Возведение в степень модуля использования клиента и сервера, чтобы получить «открытые ключи», маму и Мбит, от закрытых ключей и обмениваться ими. Клиент комбинирует Ра и Мбит, и сервер комбинирует маму с Rb для генерации идентичных сеансовых ключей, K.
После того, как ключевой обмен завершен, ключевая фаза проверки следует. Каждая сторона генерирует случайное число (данный случай), шифрует его с сеансовым ключом и отправляет его другой стороне. Каждая сторона берет верификатор других, дешифрует для получения данного случая, изменяет данный случай в пути, который известен обеим сторонам, шифрует его с сеансовым ключом и передает его обратно. Инициатор проверяет, что данный случай был изменен как ожидалось. Постепенное увеличение данного случая является простым и эффективным способом изменить верификатор.
Когда UAM является DHX, таблица 3-1 перечисляет значения, используемые для вычисления содержания сообщений, которыми обмениваются между клиентом и сервером.
Значение | Значение |
|---|---|
пароль | Пароль пользователя, дополненный нулями к 64 байтам. |
имя пользователя | Строка Паскаля (pstring), дополненный к ровной длине байта. |
ServerSig | Полученный из сервера путем отправки |
AFP Vers | Строка Паскаля (pstring) обозначение версии протокола AFP используется для сеанса. |
ID | Двухбайтовое число, используемое сервером для отслеживания запрос пароля входа в систему/изменения. Сервер может отправить любое двухбайтовое число, клиент пасует назад его неизменный. |
x^y | Повысьте x до yth питания. |
данный случай | Случайное число. |
данный случай + 1 | Добавьте тот к данному случаю. |
Ра | 32-байтовое случайное число (на 256 битов), используемое внутренне клиентом. |
Rb | 32-байтовое случайное число (на 256 битов), используемое внутренне сервером. |
p | 16-байтовое простое число (на 128 битов), удовлетворяющее свойство, что (p - 1)/2 является также главным (названный главной Софи Жермен). |
g | Небольшое число, которое является примитивной модификацией p. |
Мама | модификация g^Ra p (отправленный клиентом в сервер в первом сообщении); 16 байтов. |
Мбит | модификация g^Rb p (отправленный сервером клиенту во втором сообщении); 16 байтов. |
K | Ключ = модификация Mb^Ra p = модификация Ma^Rb p. |
(dataBytes, IV) K | Зашифруйте dataBytes использование CAST 128 CBC с помощью вектора инициализации (IV). |
C2SIV | Вектор инициализации клиента к серверу. |
S2CIV | Вектор инициализации сервера клиенту. |
Для DHX константы p и g определяются следующим образом (MSB сначала):
UInt8 p = { 0xBA, 0x28, 0x73, 0xDF, 0xB0, 0x60, 0x57, 0xD4, 0x3F, 0x20, 0x24, 0x74, 0x4C, 0xEE, 0xE7, 0x5B }; |
UInt8 g = { 0x07 }; |
Для DHX, клиент к серверу (C2SIV) и сервер клиенту S2CIV), векторы инициализации определяются следующим образом:
UInt8 C2SIV[] = { 0x4c, 0x57, 0x61, 0x6c, 0x6c, 0x61, 0x63, 0x65 }; |
Uint8 S2CIV[] = { 0x43, 0x4a, 0x61, 0x6c, 0x62, 0x65, 0x72, 0x74 }; |
Входя в систему Используя DHX
Последовательность входа в систему при использовании DHX UAM состоит из обмена четырьмя сообщениями, показанными в Таблице 3-2. В Таблице 3-2 символ вертикальной черты (|) используется для разделения элементов, составляющих сообщение.
Сообщение | Отправитель/Получатель | Содержание |
|---|---|---|
1 | Клиент к серверу | | |
2 | Сервер клиенту | | ID | Мбит | (данный случай, ServerSig, S2CIV) K | и код результата |
3 | Клиент к серверу | | |
4 | Сервер клиенту | Код результата |
В ответ на сообщение 1 сервер может возвратить следующие коды результата (но это может задержать отправку некоторых из этих кодов результата до сообщения 4):
kFPBadUAM— сервер не поддерживает DHX UAM.kFPBadVersNum— сервер не поддерживает требуемую версию AFP.kFPParamErr— имя пользователя не допустимо.kFPMiscErr— сеанс уже аутентифицируется.kFPServerGoingDown— сервер закрывается.kFPUserAlreadyLoggedOnErr— сервер позволяет только один активный сеанс на пользователя.kFPAuthContinue— сервер подготовлен продолжать входить в систему процесс.
Сервер может задержать отправку некоторых вышеупомянутых кодов результата до четвертого сообщения, или может отчет a kFPUserNotAuth результат как kFPParamErr ограничить сумму информации, раскрытой клиенту.
В ответ на сообщение 3 сервер может возвратить любой из следующих кодов результата:
kFPNoErr— аутентификация была успешна; сервер дешифровал данный случай/пароль и проверил, что данный случай был постепенно увеличен должным образом, и пароль, отправленный клиентом, соответствует пароль на сервере.kFPUserNotAuth— пароль является неправильным.kFPParamErr— аутентификация перестала работать, и сервер предпочитает не указывать, недопустимы ли имя пользователя или пароль.kFPPwdExpiredErr— пароль пользователя истек.kFPPwdNeedsChangeErr— пароль пользователя должен быть изменен.
Рисунок 3-4 показывает запрос и блоки ответа для FPLogin при использовании DHX UAM.
FPLogin
Изменение паролей Используя DHX
Нет никакого эквивалента FPLoginCont при изменении пароля, таким образом, клиент должен отправить FPChangePassword команда, по крайней мере, дважды и использование ID для отслеживания состояние изменяющего пароль процесса. ID сначала появляется в сообщении 1 и установлен в 2 байта 0x00. Сервер отправляет ненулевое значение за ID в сообщении 2, и клиент должен скопировать его с сообщения 2 в сообщение 3. Ключ, используемый для шифрования старых и новых паролей, создается таким же образом как ключ при входе в систему. Значения p и g являются теми же значениями, использующимися при входе в систему.
При использовании DHX UAM, последовательность изменения пароля состоит из обмена по крайней мере четырьмя сообщениями, показанными в Таблице 3-3. В Таблице 3-3 символ вертикальной черты (|) используется для разделения элементов, составляющих сообщение.
Сообщение | Отправитель/Получатель | Содержание |
|---|---|---|
1 | Клиент к серверу | | |
2 | Сервер клиенту | | ID | Мбит | (данный случай, ServerSig, S2CIV) K | и код результата |
3 | Клиент к серверу | | |
4 | Сервер клиенту | Код результата |
В ответ на сообщение 1 сервер может возвратить любой из следующих кодов результата (или может ожидать, пока это не получает второе FPChangePassword команда для возврата первых трех кодов результата):
kFPBadUAM— сервер не поддерживает DHX для изменения паролей.kFPParamErr— имя пользователя не допустимо.kFPServerGoingDown— сервер закрывается.kFPAuthContinue— сервер подготовлен продолжать изменяющий пароль процесс.
В ответ на сообщение 3 сервер может возвратить любой из следующих кодов результата:
kFPNoErr— пароль был изменен.kFPUserNotAuth— старый пароль является неправильным.kFPParamErr— ограничить сумму информации, выпущенной клиенту.kFPPwdPolicyErr— новый пароль не соответствует политике паролей сервера.kFPPwdSameErr— новый пароль совпадает со старым паролем.kFPPwdTooShortErr— новый пароль слишком короток.
Рисунок 3-5 показывает запрос и блоки ответа для вызова FPChangePassword с DHX UAM.
FPChangePassword

Обмен ключами Диффи-Хеллмана 2
Обмен ключами Диффи-Хеллмана 2 (DHX2) является реализацией Протокола Согласования ключей Diffie-Hellman с помощью реализации SSLeay/OpenSSL CAST 128 в режиме CBC. Имя протокола UAM для DHX2 ‘DHX2’.
DHX2 отличается от DHX в начале использования того DHX2 переменного размера (p) и генератор (g) значения, который позволяет серверам выбирать надлежащий уровень безопасности. Минимальный размер начала увеличен до 512 битов для улучшения сопротивления численным методам атаки. Кроме того, в отличие от DHX, DHX2 не использует подпись сервера (ServerSig) в сообщении 2.
DHX2 силен против пакетных атак сниффинга, но уязвим для активных атак такой “Человек в Середине”. Нет никакого способа для клиента проверить, что сервер знает пароль, таким образом, мог легко имитироваться сервер. Существует некоторая слабость в использовании фиксированных векторов инициализации, p и g, улучшенного путем помещения случайных данных случаев сначала в зашифрованных частях сообщений. Когда сервер требует паролей в открытом тексте, DHX2 полезен.
Как с DHX, в DHX2 клиент и сервер каждый генерирует случайное число, Ra и Rb соответственно, служащие «закрытыми ключами» для сеанса. Возведение в степень модуля использования клиента и сервера, чтобы получить «открытые ключи», маму и Мбит, от закрытых ключей и обмениваться ими. Клиент комбинирует Ра и Мбит, и сервер комбинирует маму с Rb для генерации идентичных сеансовых ключей, K.
После того, как ключевой обмен завершен, ключевая фаза проверки следует. Каждая сторона генерирует случайное число (данный случай), шифрует его с сеансовым ключом и отправляет его другой стороне. Каждая сторона берет верификатор других, дешифрует для получения данного случая, изменяет данный случай в пути, который известен обеим сторонам, шифрует его с сеансовым ключом и передает его обратно. Инициатор проверяет, что данный случай был изменен как ожидалось. Постепенное увеличение данного случая является простым и эффективным способом изменить верификатор.
Когда UAM является DHX2, таблица 3-4 перечисляет значения, используемые для вычисления содержания сообщений, которыми обмениваются между клиентом и сервером.
Значение | Значение |
|---|---|
пароль | Пароль пользователя, дополненный нулями к 256 байтам. |
имя пользователя | Строка Паскаля (pstring), дополненный к ровной длине байта. |
AFP Vers | Строка Паскаля (pstring) обозначение версии протокола AFP используется для сеанса. |
ID | Двухбайтовое число, используемое сервером для отслеживания запрос пароля входа в систему/изменения. Сервер может отправить любое двухбайтовое число, клиент пасует назад его неизменный. |
ID + 1 | ID, постепенно увеличенный одним. |
clientNonce | 16-байтовое случайное число используется в ключевой части проверки обмена. |
serverNonce | 16-байтовое случайное число используется в ключевой части проверки обмена. |
clientNonce + 1 | clientNonce, постепенно увеличенный одним. |
MD5 (данные) | Возьмите хеш MD5 данных, приводящих к 16-байтовому значению (на 128 битов). |
p | Простое число переменной длины (в минимальных 512 битах в размере) удовлетворение свойства, что (p - 1)/2 является также началом (названный главной Софи Жермен) отправленный сервером клиенту. (Два байта длиной сопровождаемый данными.) |
g | Небольшое число, которое является примитивной модификацией p отправленный сервером клиенту. (Четыре байта.) |
x^y | Повысьте x до yth питания. |
Ра | X укусил случайное число, используемое внутренне клиентом. |
Rb | X укусил случайное число, используемое внутренне сервером. |
Мама | модификация g^Ra p (отправленный клиентом в сервер); то же число байтов как p, дополненный нулями в конце MSB. |
Мбит | модификация g^Rb p (отправленный сервером клиенту); то же число байтов как p, дополненный нулями в конце MSB. |
x | Размер p в битах. |
len | Размер p и мамы и Мбита в байтах; двухбайтовое значение. |
K | Ключ = MD5 (модификация Mb^Ra p) = MD5 (модификация Ma^Rb p) |
(dataBytes, IV) K | Зашифруйте dataBytes использование CAST 128 CBC с помощью вектора инициализации (IV) |
C2SIV | Вектор инициализации клиента к серверу. |
S2CIV | Вектор инициализации сервера клиенту. |
Для DHX2 клиент к серверу (C2SIV) и сервер клиенту (S2CIV) векторы инициализации определяются следующим образом:
UInt8 C2SIV[] = { 0x4c, 0x57, 0x61, 0x6c, 0x6c, 0x61, 0x63, 0x65 }; |
Uint8 S2CIV[] = { 0x43, 0x4a, 0x61, 0x6c, 0x62, 0x65, 0x72, 0x74 }; |
Входя в систему Используя DHX2
При использовании DHX2 UAM последовательность входа в систему состоит из обмена шестью сообщениями, показанными в Таблице 3-5. В Таблице 3-5 символ вертикальной черты (|) используется для разделения элементов, составляющих сообщение.
Сообщение | Отправитель/Получатель | Содержание |
|---|---|---|
1 | Клиент к серверу | | |
2 | Сервер клиенту | | ID | g | len | p | Мбит | и код результата |
3 | Клиент к серверу | | |
4 | Сервер клиенту | | ID + 1 | (clientNonce + 1, serverNonce, S2CIV) K | и код результата |
5 | Клиент к серверу | | |
6 | Сервер клиенту | Код результата |
Некоторые более старые реализации клиента AFP Apple добавляют десять дополнительных байтов до конца FPLoginCont пакет (обмениваются сообщениями пять в Таблице 3-5). Точно так же два дополнительных байта добавляются до конца сообщения два в Таблице 3-5. Серверы должны проигнорировать присутствие и содержание этих байтов.
В ответ на сообщение 1 сервер может возвратить следующие коды результата (но это может задержать отправку некоторых из этих кодов результата до сообщения 6):
kFPBadUAM— сервер не поддерживает DHX2 UAM.kFPBadVersNum— сервер не поддерживает требуемую версию AFP.kFPParamErr— имя пользователя не допустимо.kFPMiscErr— сеанс уже аутентифицируется.kFPServerGoingDown— сервер закрывается.kFPUserAlreadyLoggedOnErr— сервер позволяет только один активный сеанс на пользователя.kFPAuthContinue— сервер подготовлен продолжать входить в систему процесс.
Сервер может задержать отправку некоторых вышеупомянутых кодов результата до шестого сообщения, или может отчет a kFPUserNotAuth результат как kFPParamErr ограничить сумму информации, раскрытой клиенту.
В ответ на FPLoginCont команда, сервер может возвратить любой из следующих кодов результата:
kFPNoErr— аутентификация была успешна; сервер дешифровал данный случай/пароль и проверил, что данный случай был постепенно увеличен должным образом, и пароль, отправленный клиентом, соответствует пароль на сервереkFPUserNotAuth— пароль является неправильнымkFPParamErr— аутентификация перестала работать, и сервер предпочитает не указывать, недопустимы ли имя пользователя или парольkFPPwdExpiredErr— пароль пользователя истекkFPPwdNeedsChangeErr— пароль пользователя должен быть изменен
Изменение паролей Используя DHX2
Нет никакого эквивалента FPLoginCont когда изменение пароля, таким образом, клиент имеет отправляет FPChangePassword команда, по крайней мере, дважды и использование ID к отслеживайте состояние изменяющего пароль процесса. ID сначала появляется в сообщении 1 и установлен в 2 байта 0x00. Сервер отправляет ненулевое значение за ID в сообщении 2, и клиент должен скопировать его с сообщения 2 в сообщение 3, а также с сообщения 4 в сообщение 5. Ключ, используемый для шифрования старых и новых паролей, создается таким же образом как ключ при входе в систему. Значения p и g являются теми же значениями, использующимися при входе в систему.
При использовании DHX2 UAM последовательность изменения пароля состоит из обмена по крайней мере шестью сообщениями, показанными в Таблице 3-6. В Таблице 3-6 символ вертикальной черты (|) используется для разделения элементов, составляющих сообщение.
Сообщение | Отправитель/Получатель | Содержание |
|---|---|---|
1 | Клиент к серверу | | |
2 | Сервер клиенту | | ID | g | len | p | Мбит | и код результата |
3 | Клиент к серверу | | |
4 | Сервер клиенту | | ID+1 | (clientNonce+1, serverNonce, S2CIV) K | и код результата |
5 | Клиент к серверу | | |
6 | Сервер клиенту | Код результата |
В ответ на сообщение 1 может возвратиться сервер kFPAuthContinue или любой из следующих кодов результата:
kFPBadUAM— сервер не поддерживает DHX2 для изменения паролей.kFPParamErr— имя пользователя не допустимо.kFPServerGoingDown— сервер закрывается.
В ответ на сообщение 3 может возвратиться сервер kFPAuthContinue или любой из следующих кодов результата:
kFPUserNotAuth— старый пароль является неправильным.kFPPwdPolicyErr— новый пароль не соответствует политике паролей сервера.kFPPwdSameErr— новый пароль совпадает со старым паролем.kFPPwdTooShortErr— новый пароль слишком короток.
Kerberos
Клиент AFP учится, поддерживает ли сервер Kerberos UAM путем исследования kSupportsDirServices бит в Flags параметр, возвращенный FPGetSrvrInfo команда. Если тот бит установлен, сервер, поддерживающий Kerberos, UAM помещает свое основное имя в DirectoryNames параметр, возвращенный FPGetSrvrInfo.
Клиент AFP использует основное имя, чтобы определить, поддерживает ли сервер Kerberos v4 или v5.
Тогда клиент пытается получить билет службы от сервера. Если это не может получить билет, клиент должен использовать некоторый другой метод аутентификации. Если клиент получает билет службы, он может вызвать FPLoginExt, обеспечение следующих значений в блоке запроса:
два байта
FlagsпараметрСтрока версии AFP
Строка UAM (
Client Krb v2)kFPUTF8Name(определенный как 3)длина следующего имени пользователя
Имя пользователя UTF-8–encoded
kFPUTF8Name(определенный как 3)длина области в этом следует
Область UTF-8–encoded
Сервер отвечает с кодом результата kFPAuthContinue. Блок ответа содержит два байта ID значение.
Если клиент использует Kerberos v4, он вызывает FPLoginCont, обеспечение следующих значений в блоке запроса:
Имя пользователя UTF-8–encoded
байт клавиатуры, если Вы необходимы, чтобы вынудить имя пользователя закончиться на ровной границе
длина следующего билета
тикет, созданный
KClientGetTicketForService()
Если сервер возвращает код результата, пользователь аутентифицируется kFPNoErr и блок ответа, состоящий из параметра два байта длиной и аутентификатора.
Если клиент использует Kerberos v5, он вызывает FPLoginCont, обеспечение следующих значений в блоке запроса:
ID, возвращенный
FPLoginExt
Имя пользователя UTF-8–encoded
байт клавиатуры, если Вы необходимы, чтобы вынудить имя пользователя закончиться на ровной границе
длина следующего билета
тикет, созданный
gss_init_sec_contextсGSS_C_MUTUAL_FLAGиGSS_C_REPLAY_FLAGнабор и никакая привязка канала
Если сервер возвращает код результата, пользователь аутентифицируется kFPNoErr и блок ответа, состоящий из параметра два байта длиной и аутентификатора.
После того, как клиент получает FPLoginCont ответный пакет, клиент отправляет FPGetSessionToken команда с типом kGetKerberosSessionKey (8) для получения случайного сеансового ключа от сервера. Этот сеансовый ключ шифруется на использовании сервера gss_wrap() и дешифрован на клиенте, использующем gss_unwrap(). Обратите внимание на то, что клиент может вызвать FPGetSessionToken позже для получения маркера разъединения.
Рисунок 3-6 показывает запрос и блоки ответа для FPLoginExt и FPLoginCont при использовании Kerberos UAM.
FPLoginExt
Переподключение
В отличие от другого UAMs, описанного в этом разделе, которые используются для входа сервера AFP, Переподключение, которое UAM используется только, чтобы повторно подключить к серверу. UAM Переподключения может использоваться, когда первоначальное соединение было сделано с помощью UAM, обеспечивающего сеансовый ключ, такой как DHX, DHX2 и Kerberos. Имя протокола UAM для Переподключения UAM ‘Recon1’.
Цели Переподключения UAM:
Хранилище в маркере, возвращенном
FPGetSessionTokenкоманда вся требуемая информация, чтобы повторно соединиться, даже если был перезагружен сервер.Используйте только безопасную хеш-функцию и симметричный алгоритм шифрования.
Обеспечьте взаимную аутентификацию, чтобы доказать, что сервер, с которым повторно соединяется клиент, является тем же первоначально аутентифицировавшимся сервером.
Гарантируйте, чтобы поставивший под угрозу сеансовый ключ или отобрал значение, не поставит под угрозу долгосрочный ключ сервера.
Таблица 3-7 перечисляет переменные, используемые для вычисления значений для Переподключения UAM.
Значение | Размер в байтах | Значение |
|---|---|---|
k1 | 16 | Начальный сеансовый ключ, возвращенный UAM, использовавшимся для входа в систему; известный и клиенту и серверу во время переподключения. |
ks | 16 | Долгосрочный ключ сервера. Этот ключ содержит криптографически псевдослучайное значение, выбранное сервером. Долгосрочный ключ сервера обычно сохранен в персистентном хранении на сервере в таком как способ, которым это может только быть считано самим сервером. Это позволяет серверу продолжать использовать тот же ключ после перезапуска сервера. Сервер AFP Apple периодически изменяет этот ключ, но сохраняет копию предыдущего ключа, чтобы позволить клиентам, использующим более старые учетные данные повторно соединяться. Время жизни долгосрочного ключа сервера должно быть намного больше, чем учетное время истечения срока. |
s | 8 | Lamports хешируют семя. Это - криптографически псевдослучайное значение, выбранное сервером. |
n | 4 | Число раз для выполнения хеш-функции. |
m | 4 | Максимальное количество времен для выполнения хеш-функции (m> = n). |
clientNonce | 16 | Случайное число выбрано клиентским данным случаем. |
serverNonce | 16 | Случайное число выбрано сервером. |
ts | 4 | Метка времени, когда клиент сначала загрузил код AFP. Используемый, чтобы определить, была ли перезагружена клиентская машина. |
t1 | 4 | Начальная метка времени. |
t2 | 4 | Метка времени, используемая при пересоединении. |
t3 | 4 | Временной интервал между часами сервера и часами клиента. |
exp | 4 | Время истечения срока учетных данных. |
теперь | 4 | Текущее время, как известный сервером или клиентом. |
пользователь/домен | Информация об имени пользователя, однозначно определяющая пользователя. | |
sessionInfo | 8-байтовое значение, выбранное сервером в качестве уникального идентификатора для сеанса. Например, сервер AFP Apple помещает время начала сервера в первые четыре байта и сеанс ID (постепенно увеличенный для каждого нового сеанса) в остающихся четырех байтах. | |
(данные) ключ | Данные зашифровали использование симметричного ключа использования алгоритма шифрования. (Режим CBC), Это использует тот же алгоритм CAST 128 CBC в качестве DHX2. | |
(данные) H | Данные, хешированные с безопасной хеш-функцией (та же 128-байтовая хеш-функция MD5, используемая DHX2). | |
(данные) H (n) | Данные хешировали n времена с безопасной хеш-функцией (та же 128-байтовая хеш-функция MD5, используемая DHX2). | |
(данные) HMAC (ключ) | Данные, подписанные включенным алгоритмом HMAC (алгоритм MD5 HMAC на 128 битов; посмотрите RFC 2104). | |
список аннулирования | Список значения хэш-функции и пар времени жизни. Пары остаются в списке, пока значение времени жизни не передало. | |
credSize | 4-байтовое значение, содержащее общий размер учетных данных. | |
csize | 4-байтовое значение, содержащее общий размер учетных данных, окруженных, чтобы быть ровным кратным числом 8 байтов. | |
cred | (s, m, exp, t3, csize, пользователь, домен) ks |
Для переподключения UAM, клиент к серверу (C2SIV) и сервер клиенту S2CIV), векторы инициализации определяются следующим образом:
UInt8 C2SIV[] = { 0x57, 0x4f, 0x4d, 0x44, 0x4d, 0x4f, 0x41, 0x42 }; |
Uint8 S2CIV[] = { 0x57, 0x4f, 0x4d, 0x44, 0x4d, 0x4f, 0x41, 0x42 }; |
Таблица 3-8 описывает общие методы атаки и путей, которыми Переподключение UAM защищен от этих атак.
Атака | Защита |
|---|---|
Человек в середине | Если исходный UAM, используемый для соединения с сервером, был стойким к Человеку в Средних атаках, данный случай регистрируется в сообщении a, которые требуют знания s, должен не пустить Человека в Середине. |
Воспроизведение | Метка времени в сообщении a, защищенном HMAC и учетным списком аннулирования, должна предотвратить простые атаки с повторением пакетов. Даже если атакующий преуспевает в том, чтобы управлять часами на сервере и управляет вызвать перезапуск сервера, атакующий не может войти в систему, потому что s не известен, таким образом, шаг проблемы/ответа не может быть выполнен успешно. |
Отражение | Этому типу атаки мешают при помощи цепочечных данных случаев при наличии информации о пользователе в учетных данных, и при наличии каждого сообщения быть асимметричным. |
Чередование | Этому типу атаки мешают при помощи цепочечных данных случаев. |
Выбранный текст | Ключ сервера не используется для шифрования любых данных, полученных от клиента. |
Принудительная задержка | Метки времени, ключевое истечение срока и использование списка аннулирования должны мешать этому типу атаки. |
Получение учетных данных
После того, как клиент успешно входит в систему и монтирует удаленный объем, он вызывает FPGetSessionToken, установка Type параметр к kRecon1Login (5) и отправка в сервер текущая метка времени (t1) и его идентификатор клиента (cid) зашифрованный с сеансовым ключом (k1):
id = (t1, cid)k1 |
Клиент также предоставляет IDLength поле (длина id) и Timestamp поле (ts).
В результате процесса входа в систему сервер также знает сеансовый ключ (k1) и sessionInfo значение для этого сеанса. Сервер также имеет долгосрочный сеансовый ключ (ks).
Использование сервера k1 извлечь t1 и cid. Это использует t1 вычислить расфазировку тактовых сигналов (t3) и определите надлежащее время истечения срока для учетных данных, которые оно собирается создать. Сервер тогда генерирует учетные данные путем конкатенации семени хеша Lamports (s), максимальное количество времен для выполнения хеш-функции (m), время истечения срока (exp), расфазировка тактовых сигналов (t3), пользователь и домен, затем шифруя связанные данные с помощью его долгосрочного сеансового ключа (ks):
cred = (s, m, exp, t3, user, domain)ks |
Сервер тогда использует сеансовый ключ (k1) зашифровать связь sessionInfo, Lamports хешируют семя (s), максимальное количество времен для выполнения хеш-функции (m), время истечения срока (exp), и учетные данные (cred), и отправляет результат клиенту. Формула для этого вычисления:
(sessionInfo, s, m, exp, cred)k1 |
В это время сервер также ищет сохраненные сеансы переподключения, соответствующие идентификатор клиента (cid). Если предыдущий сеанс найден с различной меткой времени (ts), предыдущий сеанс уничтожается, выпущение любых блокировок диапазона байта и закрытие любых открытых файлов с отклоняют режимы.
Клиент использует сеансовый ключ (k1) дешифровать результат, получая зашифрованные учетные данные (cred), Lamports хешируют семя (s), максимальное количество времен для выполнения хеш-функции (m), время истечения срока зашифрованных учетных данных (exp), и sessionInfo значение. Клиент ответственен за то, что хранил эту информацию так, чтобы она могла использовать его позже.
Таблица 3-9 суммирует обмен между клиентом и сервером при получении учетных данных.
Сообщение | Отправитель/Получатель | Содержание |
|---|---|---|
1 | Клиент к серверу | | |
2 | Сервер клиенту | | (sessionInfo, s, m, exp, cred) k1 | |
Обновление учетных данных
Прежде чем учетные данные истекают, клиентские вызовы FPGetSessionToken снова, установка Type параметр к kRecon1RefreshToken (7) и отправка в сервер текущая метка времени (t1) и текущие учетные данные, зашифрованные с сеансовым ключом (k1). Формула для вычисления этого значения:
id = (t1, cred)k1 |
Клиент также предоставляет IDLength поле (длина id) и Timestamp поле (начальная метка времени соединения, ts).
И клиент и сервер тогда вычисляют k2 использование следующей формулы:
k2 = (cred, s)H |
Сервер дешифрует значение, отправленное клиентом. Если учетные данные допустимы, сервер создает новые учетные данные (cred') состоять из связи нового Lamports хеширует семя (s'), максимальное количество времен для выполнения хеш-функции (m'), время истечения срока (exp'), и новая расфазировка тактовых сигналов (t3') и шифрует это с зашифрованным с долгосрочным сеансовым ключом (ks) как показано в следующей формуле:
cred' = (s', m', exp', t3', user, domain)ks |
Сервер возвращает зашифрованные учетные данные клиенту вместе с новым семенем хеша Lamports, новым максимальным количеством времен для выполнения хеш-функции, и sessionInfo, все зашифрованные k2. Формула для создания этой ценности:
(sessionInfo, s', m', exp', cred')k2 |
Клиентское использование k2 для дешифрования ответа, получая новые учетные данные, новые Lamports хешируют семя, новое максимальное количество времен для выполнения хеш-функции, нового истечения срока и sessionInfo. Оба отбрасывание клиента и сервера k2. Прежде чем эти учетные данные истекают, клиент обновляет их снова.
Таблица 3-10 суммирует обмен между клиентом и сервером при обновлении учетных данных.
Сообщение | Отправитель/Получатель | Содержание |
|---|---|---|
1 | Клиент к серверу | | |
2 | Сервер клиенту | | |
Используя учетные данные, чтобы повторно соединиться
Если соединение с сервером теряет работоспособность по какой-либо причине, у клиента есть текущие учетные данные (cred), Lamports хешируют семя (s), и максимальное количество времен для выполнения хеша (m). Сервер знает долгосрочный ключ сервера (ks).
Клиент регистрирует назад в использовании
FPLoginExtкоманда, указываяRecon1ReconnectLoginкак UAM и отправка следующей информации к серверу:(sig, (s)H(n), n, t2, (clientNonce)k, cred)
Где
sig((s)H(n), n, t2, (clientNonce)k)HMAC(s)
и
k(s)H(n-1)
Сервер использует свой долгосрочный сеансовый ключ (
ks) дешифроватьcred. Если дешифрование перестало работать, сервер приводит попытку входа в систему к сбою.Если дешифрование успешно выполняется, сервер получает
s,m,exp,t3,user, иdomainот учетных данных.Сервер вычисляет
(cred)Hи ищет его в списке аннулирования. Если найдено, учетные данные истекли, таким образом, сервер приводит попытку входа в систему к сбою.Если
(cred)Hне найден в списке аннулирования, проверках сервераexp,m >= n, иHMAC(s) user/domain. Если кто-либо недопустим, сервер приводит попытку входа в систему к сбою.Сервер вычисляет
(s)H(n)использованиеsот дешифрованных учетных данных иnот клиентского пакета и сравнивает результат со значением(s)H(n)если в клиентском сообщении. Если они не соответствуют, сервер приводит попытку входа в систему к сбою.Сервер дешифрует и хеширует
clientNonce, выбираетserverNonce, добавляет(cred)H, t3+nowк списку аннулирования, и отправляет следующее значение клиенту:(serverNonce, (clientNonce)H)k
где
k(s)H(n-1)
Клиент дешифрует значение, проверяет
(clientNonce)H, и хешиserverNonce. Клиент используетFPLoginContкоманда для отправки следующего значения в сервер:((serverNonce)H)k
где
k(s)H(n-1)
Сервер дешифрует значение и проверяет
(serverNonce)H. Если они не соответствуют, сервер приводит попытку входа в систему к сбою.Если они соответствуют, сервер отвечает клиенту с кодом результата
kFPNoErr. Клиент теперь зарегистрирован.И сервер и клиент делают следующее вычисление:
k1' = (clientNonce, serverNonce)H
Клиентские вызовы
FPGetSessionTokenиспользованиеk1'как сеансовый ключ для получения новых учетных данных. Это также вызываетFPDisconnectOldSessionсказать серверу разъединять старый сеанс и передавать его ресурсы новому сеансу.
Таблица 3-11 суммирует обмен между клиентом и сервером при пересоединении.
Сообщение | Отправитель/Получатель | Содержание |
|---|---|---|
1 | Клиент к серверу | | Где
и
|
2 | Сервер клиенту | | |
3 | Клиент к серверу | | |
4 | Сервер клиенту |
|
5 | Клиент к серверу, если результат | | |
Пароли тома
AFP обеспечивает дополнительное второго уровня из управления доступом через пароли тома. Сервер может связать фиксированную длину пароль с 8 символами с каждым объемом, который это делает видимым клиентам AFP.
Клиент AFP может выйти FPGetSrvrParms команда к серверу, чтобы обнаружить имена каждого объема и получить индикацию относительно того, защищен ли каждый из них паролем.
Отправить команды AFP, относящиеся к объему сервера, клиентское использование AFP, идентификатор объема вызвал Объем ID. Клиент AFP получает этот ID путем отправки FPOpenVol команда к серверу. Эта команда содержит имя объема как один из его параметров. Если пароль связан с объемом, команда должна также включать пароль как другой параметр.
Пароли тома составляют простую защиту для серверов, которые не должны реализовывать средства управления доступом каталога, описанные в следующем разделе. Однако пароли тома не так безопасны как средства управления доступом каталога.
Средства управления доступом каталога
Средства управления доступом каталога обеспечивают самую большую степень сетевой безопасности в AFP правами доступа пользователям. Как только пользователь вошел в систему, права доступа позволяют пользовательские различные степени свободы для выполнения действий в структуре каталогов.
AFP определяет три права доступа каталога: поиск, читайте, и запись:
Пользователь с поисковым доступом к каталогу может перечислить параметры каталогов, содержавших в каталоге.
Пользователь с доступом для чтения к каталогу может перечислить параметры файлов, содержавших в каталоге в дополнение к способности считать содержание файла.
Пользователь с доступом для записи к каталогу может изменить содержание каталога включая параметры файлов и каталогов, содержавших в каталоге. Доступ для записи позволяет пользователю объявлению, и удалите каталоги и файлы, а также измените данные, содержавшие в файле.
Каждый каталог на объеме сервера имеет владельца и присоединение группы. Первоначально, владелец является пользователем, создавшим каталог, несмотря на то, что владение каталога может быть передано другому пользователю. Только владелец каталога может изменить его права доступа. Сервер использует имя до 31 символа и четырехбайтового Идентификационного номера для представления владельцев каталогов. Имя владельца и Владелец ID синонимичны с Именем пользователя и Идентификатором пользователя.
Присоединение группы используется для присвоения различного набора прав доступа для каталога группе пользователей. Для каждой группы сервер поддерживает имя до 31 символа, четырехбайтового Идентификационного номера и списка пользователей, принадлежащих группе. Присвоение полномочий группового доступа к каталогу дает те полномочия той группе пользователей.
Каждый пользователь может принадлежать любому числу групп или никакой группе. Одно из присоединения группы пользователя может определяться как основная группа пользователя. Эта группа будет присвоена первоначально каждому новому каталогу, создаваемому пользователем. Присоединение группы каталога может быть удалено или изменено позже владельцем каталога.
Срок Все используются для указания каждого пользователя, который в состоянии войти в систему сервера. Каталог может быть присвоен определенные права доступа для Всех, которые предоставили бы пользователю, который не является ни владельцем каталога, ни участником группы, с которой связан каталог.
С каждым каталогом файловый сервер хранит три байта прав доступа, соответствующие владельцу каталога, его присоединения группы и Всех. Каждый из этих байтов является битовым массивом, кодирующим права доступа (поиск, читайте, и запись), которые соответствуют каждой категории. Старшие значащие биты каждого байта прав доступа должны быть нулем.
Для выполнения управления доступом каталога AFP связывает эти пять параметров, показанных в Таблице 3-12 с каждым каталогом.
Параметр | Размер |
|---|---|
Владелец ID | Четыре байта |
Группа ID | Четыре байта |
Права доступа владельца | Один байт |
Полномочия группового доступа | Один байт |
Все права доступа | Один байт |
Владелец ID совпадает с Идентификатором пользователя владельца. ID Группы является Идентификационный номер группы, с которой каталог связан, или нуль. Файловый сервер поддерживает непосредственное отображение между Владельцем ID и именем пользователя и между Группой ID и названием группы. В результате каждое имя связано с уникальным идентификатором. AFP включает команды, позволяющие пользователям отображать IDs на имена и имена к IDs. Присвоение Идентификаторов пользователей, Группа IDs и основные группы являются административной функцией и выходят за рамки этого протокола.
ID Группы нулевых средних значений, что каталог не имеет никакого присоединения группы. Права доступа групп проигнорированы.
Когда пользователь входит в систему сервера, идентификаторы получены от пользовательской базы данных, сохраняемой на сервере. Эти идентификаторы включают Идентификатор пользователя (четырехбайтовое число, уникальное среди всех пользователей сервера) и одна или более четырехбайтовых Групп IDs, указывающий составы группы пользователя. Точное число составов группы является зависящим от реализации. Один из них Группа IDs может представлять основную группу пользователя.
Сервер должен быть в состоянии получить, какие права доступа определенный пользователь имеет к определенному каталогу. Пользовательские права доступа (UARights) содержат сводку полномочий, независимо от категории (Владелец, Группа, Все), из которого они были получены. Кроме того, пользовательские права доступа содержат флаг, указывающий, принадлежит ли пользователю каталог.
Сервер использует следующий алгоритм для извлечения пользовательских прав доступа. OR в этом алгоритме указывает операции «включающее ИЛИ».
UARights := Everyone’s access rights; |
clear UARights owner flag |
If (Owner ID = 0) then |
set UARights own flag |
If (User ID = Owner ID) then |
UARights := UARights OR owner’s access privileges; |
set UARights owner flag |
If (any of user’s Group IDs = directory’s Group ID) then |
UARights := UARights OR directory’s group access privileges |
ID Владельца нулевых средних значений, что каталог не принадлежит или принадлежит другому пользователю. Бит владельца байта прав доступа всегда устанавливается для такого каталога.
Права доступа, требуемые пользователем выполнять большинство функций управления файлами, объяснены в следующих параграфах согласно символам, перечисленным в Таблице 3-13.
Символ | Значение |
|---|---|
SA | Поисковый доступ ко всем наследователям вниз к, но не включая родительский каталог |
WA | Поисковый или доступ для записи ко всем наследователям вниз к, но не включая, родительский каталог |
SP | Поисковый доступ к родительскому каталогу |
RP | Доступ для чтения к родительскому каталогу |
WP | Доступ для записи к родительскому каталогу |
Почти все операции требуют SA. Для выполнения любого действия в данном каталоге у пользователя должно быть разрешение искать каждый каталог по пути от корня до родительского каталога родителя. Доступ к файлам и каталогам в родительском каталоге тогда определяется SP, RP и WP.
Определенные функции управления файлами и права доступа должны были выполнить их, перечислены в Таблице 3-14.
Функция | Требуемые права доступа |
|---|---|
Создайте файл или каталог | У пользователя должен быть WA плюс WP. Твердое создает (удалите сначала файла, существует), требует тех же полномочий как удаление файла. |
Перечислите каталог | Перечислить каталог означает перечислить в числовом порядке потомков каталога и выбранные параметры тех потомков. У пользователя должен быть поисковый доступ ко всем каталогам вниз к, но не обязательно включая каталог, перечисляемый (SA). Кроме того, для просмотра его потомков каталога у пользователя должен быть поисковый доступ к каталогу, перечисляемому (SP). Для просмотра его потомков файла поисковый доступ к каталогу не требуется, но у пользователя должен быть доступ для чтения к каталогу (RP). |
Удалите файл | У пользователя должны быть SA, RP и WP. Если не открыто в то время, файл может быть удален только это. |
Удалите каталог | У пользователя должен быть WA плюс WP. Твердое создает (удалите сначала файла, существует), требует тех же полномочий как удаление файла. |
Переименуйте файл | Перечислить каталог означает перечислить в числовом порядке потомков каталога и выбранные параметры тех потомков. У пользователя должен быть поисковый доступ ко всем каталогам вниз к, но не обязательно включая каталог, перечисляемый (SA). Кроме того, для просмотра его потомков каталога у пользователя должен быть поисковый доступ к каталогу, перечисляемому (SP). Для просмотра его потомков файла поисковый доступ к каталогу не требуется, но у пользователя должен быть доступ для чтения к каталогу (RP). |
Переименуйте каталог | У пользователя должны быть SA, RP и WP. Если не открыто в то время, файл может быть удален только это. |
Переименуйте файл | У пользователя должны быть SA, SP и WP. Каталог может быть удален, только если это пусто |
Переименуйте каталог | У пользователя должны быть SA, RP и WP. |
Считайте параметры каталога | У пользователя должны быть SA и SP. |
Откройте файл для чтения | Ветвление файла должно быть открыто в режиме чтения, прежде чем сможет быть считано его содержание. Для открытия файла в режиме чтения у пользователя должны быть SA и RP. Режим чтения и другие режимы доступа описаны в следующем разделе. |
Откройте файл для записи | Ветвление файла должно быть открыто в режиме записи для записи в него. Для открытия пустого ветвления для записи у пользователя должны быть WA и WP. (Пустое ветвление должно принадлежать файлу, имеющему оба ветвления нулевой длины. Для открытия существующего ветвления (когда любое ветвление не пусто) для записи SA, RP и WP требуются. |
Запишите параметры файла | Для пустого файла (где оба ветвления являются нулевой длиной), у пользователя должен быть WA плюс WP. Для непустого файла (где одно или оба ветвления не являются нулевой длиной), у пользователя должны быть SA, RP и WP. |
Запишите параметры каталога | Для каталогов, содержащих потомков, пользователь должен SA, SP и WP. Для каталогов, которые пусты, у пользователя должны быть WA и WP. |
Переместите каталог или файл | Через AFP каталог или файл могут быть перемещены от его родительского каталога до целевого родительского каталога на том же объеме. Для перемещения каталога использование должно иметь SA и SP к исходному родительскому каталогу, WA к целевому родительскому каталогу, плюс WA и к источнику и к целевым родительским каталогам. Для перемещения файла пользователю нужен SA плюс RP к исходному родительскому каталогу плюс WP и к источнику и к целевым родительским каталогам. |
Измените полномочия каталога | ID Владельца каталога, Группа, ID и эти три байта прав доступа могут быть изменены, только если пользователь является владельцем каталога и затем только если у пользователя есть WA плюс WP или доступ SP к родительскому каталогу. |
Скопируйте файл ( | Для копирования файла, на единственном объеме или через объемы, которыми управляет сервер, у пользователя должен быть SA плюс доступ RP к исходному родителю и WA плюс WP к целевому родительскому каталогу. |
Наследованные права доступа
Версия 2.1 AFP и более поздние поддержки наследовались, права доступа через Пустые Права доступа каталога укусили в битовом массиве Каталога. То, когда Пустые Права доступа укусили, установлено для каталога, его другие биты права доступа проигнорированы, и биты права доступа родителя каталога применяются к каталогу, включая присоединение группы родителя.
Пустые Права доступа укусили, не может быть установлен для каталога, который является точкой доли. Аналогично, Пустые Права доступа укусили, не может быть установлен для корневого каталога объема (Каталог ID = 2) совместно используемого тома, потому что это всегда - точка доли для администратора/владельца.
Списки управления доступом
Эта версия AFP включает поддержку списков управления доступом OS X (ACLs), который может быть включен на на основание объема. Наследование и многократные возможности владения ACLs улучшают поток операций в средах, где файлы и каталоги требуют различных владельцев в различных фазах работы.
Когда ACLs включены для объема, каждому файлу и каталогу определили полномочия:
ряд отмечает, включая флаги, указывающие, наследовал ли ACL настройки ACLs выше его.
владелец UUID, подобный владельцу файла UNIX
основная группа UUID, подобный владельцу группы файлов UNIX
список управления доступом (ACL), указывающий, какие разрешения даны или отклонены к который пользователи или группы
Элементы списка управления доступом (ACEs) в ACLS содержат следующую информацию:
указание UUID пользователя или группы, к которой применяется ACE
ряд флагов, включая флаги наследования (перечисленный в Таблице 3-15)
Флаг | Описание |
|---|---|
| Указывает, была ли запись наследована от родительского ACL. |
| Указывает, существует ли запись только, чтобы быть распространенной дочерним элементам и используется только, когда дочерние объекты создаются или когда изменяется та запись. Если установлено, когда доступ или контрольные проверки сделаны, запись не проверяется. |
| Указывает, должна ли запись быть наследована каталогами ниже объекта, к которому применяется запись. |
| Указывает, должна ли запись быть наследована файлами ниже объекта, к которому применяется запись. |
| Когда запись копируется в дочерний элемент, ли настройки, указывает |
ряд битов права доступа (перечисленный в Таблице 3-16); для записей DACL биты прав доступа позволяют или отклоняют разрешение; для записей SACL, биты прав доступа, указывающие типы доступов, которые будут контролироваться
Право доступа укусило | Описание |
|---|---|
Стандартные права доступа | Ряд стандартных прав доступа, соответствующих операциям, характерным для большинства типов securable объекта. Константы, определенные для стандартных битов прав доступа, включают следующее: |
| Право удалить объект |
| Право считать настройки безопасности объекта (полномочия, ACLs, и т.д.). |
| Право изменить настройки безопасности объекта (полномочия, ACLs, и т.д.). |
| Право изменить владельца объекта в настройках безопасности объекта. |
Файл и права доступа каталога | Права, относящиеся к изменению самого файла или каталога, включая добавление к или выполнение файла, и создание, переименование и удаление файлов и каталогов в каталоге. |
| Право создать файл в каталоге |
| Право создать каталог в каталоге |
| Право создать новый каталог в каталоге. Кроме того, право добавить данные к файлу, если установлено на файле. |
| Право удалить каталог и все файлы это содержит |
| Право выполнить программу |
| Право перечислить содержание каталога |
| Право считать POSIX файла и атрибуты Средства поиска, включая скрытый, только для чтения, систему и архивные атрибуты. |
| Право считать данные из файла или канала (когда установлено для файла или канала), или перечислить содержание каталога (когда установлено для каталога) |
| Право считать расширенные атрибуты объекта |
| Право записать атрибуты файла. |
| Право записать в файл (когда установлено для файла) или создает файл в каталоге (когда установлено для каталога); когда применено к каталог, этот бит эквивалентен |
| Право записать расширенные атрибуты |
ACL может иметь смесь явно набора и наследовал ACEs. Когда файл или каталог создается, ACEs копируется в новый объект в следующем порядке:
Явные записи ACL, отклоняющие определенные права UUID
Явные записи ACL, предоставляющие определенные права UUID
Наследованные записи ACL, отклоняющие определенные права UUID
Наследованные записи ACL, предоставляющие определенные права UUID
Наследованные записи помещаются в порядок, в котором они наследованы. ACEs, наследованный от родителя, на первом месте, тогда записи, наследованные от прародителя (т.е. записи, которые родитель наследовал и переданный), и т.д. Поскольку ACEs обрабатывается от начала до конца, это означает, что явные записи переопределяют записи, наследованные от далее дерева.
Наследование происходит, когда объект создается и в то время, когда ACL для каталога изменяется и не происходит в то время, когда объект перемещен в дерево каталогов. Когда папка или файл перемещены в объеме, его ACL также перемещен без изменения и не обновляя наследованные полномочия. Вместо этого ACL обновляется в следующий раз, когда его полномочия изменяются, который вынуждает родителя распространить свои полномочия.
ACEs копируется только если ACL_ENTRY_DIRECTORY_INHERIT или ACL_ENTRY_FILE_INHERIT бит установлен.
ACES ТО, в который ACL_ENTRY_DIRECTORY_INHERIT бит установлен, копируются, когда каталог создается, но не, когда создается файл. ACL_ENTRY_ONLY_INHERIT бит очищен на получающемся каталоге.
ACES ТО, в который ACL_ENTRY_FILE_INHERIT бит установлен, копируются, когда создаются файл или каталог. Если скопировано в файл, ACL_ENTRY_ONLY_INHERIT бит очищен. Если скопировано в каталог, ACL_ENTRY_ONLY_INHERIT бит установлен. Намерение состоит в том, чтобы позволить каталогам давать один набор полномочий к подкаталогам и другой набор полномочий к файлам.
ACL_ENTRY_INHERITED бит установлен на всем копирующемся ACEs.
Если ACL_ENTRY_LIMIT_INHERIT бит установлен на скопированной записи, ACL_ENTRY_DIRECTORY_INHERIT и ACL_ENTRY_FILE_INHERIT биты очищены в копии.
Когда ACLs включены для объема, они отображаются на эффективном владельце, группе и других полномочиях UNIX.
При доступе к удаленным объемам, для которых включены ACLs, используйте FPAccess команда, чтобы определить, есть ли у клиента доступ к файлу или каталогу; используйте FPGetACLи FPSetACL команды, чтобы добраться и установить ACLs для файла или каталога, соответственно.
Отображение полномочия
OS X до версии 10.6 поддерживал отображенную модель полномочий. В этой модели пользователь, монтирующий объем, показан как владелец для всех элементов и что группа пользователя показана как группа для всех элементов на сервере. Полномочия владельца получены из UARights, полномочия группы являются копией других полномочий пользователя, и другие полномочия пользователя предоставлены сервером. Это отображение описано в статье TA21221 поддержки: Сервер OS X: Об Отображении Полномочия и Когда Это Используется.
Это отображенное полномочие установило проблемы причин для некоторых приложений, сохранивших измененные файлы на сервере. Некоторые приложения смотрят на эти отображенные полномочия и предполагают, что они - реальные полномочия, затем копируют полномочия POSIX с исходного файла и устанавливают их на недавно создаваемом сохраненном файле.
Начиная в OS X v.10.6, клиент AFP представляет точные полномочия, о которых сообщает сервер. Сервер ответственен за осуществление доступа к любому элементу независимо от того, что могут показать его полномочия POSIX, и большинство серверов поддерживает ACLs.
С этой новой моделью избегают проблемы приложений, неправильно копируя полномочия.