Общие сведения
AFS - это распределенная файловая система, способная объединять файловые системы множества файловых серверов, обладающая следующими преимуществами по сравнению с централизованными системами:
- расширенная доступность: копии часто используемых файлов (например, файлы приложений) могут храниться на множестве серверов, тогда при выходе из строя одной или даже нескольких машин такой файл может оказаться по-прежнему доступным, потому что запросы пользователей будут направлены на исправные машины;
- улучшенная эффективность: нагрузка может быть распределена между несколькими небольшими файловыми серверами, что зачастую оказывается выгоднее одного дорогого высокопроизводительного сервера.
При этом распределенность структуры AFS скрыта от пользователя. Работа с AFS мало чем отличается от работы с локальными файлами, хранящимися на машине пользователя. На машинах пользователя AFS представляется в виде иерархической файловой структуры, монтируемой, как правило, в каталог /afs.
В структуре AFS выделяют элементы, называемые ячейками (cell). Каждая ячейка представляет собой домен администрирования, в котором задается, как конфигурировать клиентские машины, какие пользователи имеют доступ к файловому пространству ячейки и т. п. Обычно в ячейку AFS объединяются компьютеры одной фирмы, факультета университета или определенной группы пользователей. Связанные между собой ячейки объединяются в AFS-сайт (site). Принято сопоставлять подкаталоги директории /afs файловым пространствам отдельных ячеек. Т. е. каталоги и файлы, относящиеся к ячейке фирмы "Foo, Inc.", располагаются в директории /afs/fooinc.com. Таким образом, хотя каждая ячейка AFS управляет и обслуживает собственное файловое пространство, существует возможность подключаться к файловым пространствам других ячеек. Та ячейка, которой принадлежит ваша клиентская машина, называется локальной ячейкой (local cell). Все остальные ячейки в файловом пространстве AFS называются чужими ячейками (foreign cells).
В ЛВС УЛК ФТИ ПетрГУ в компьютерных классах кафедры ИИС и ФЭ настроена AFS-ячейка dims.prv.
Обычно запоминающие устройства в компьютерах разделены на порции, называемые разделами. AFS производит дальнейшее деление предоставленного ей раздела на единицы, называемые томами (volumes). Том представляет собой удобный контейнер для хранения взаимосвязанных файлов и каталогов. Системный администратор может перемещать тома с одного сервера на другой, причем такое перемещение будет совершенно прозрачным для пользователя, т. к. AFS автоматически отслеживает место расположения тома. Пользователь получает доступ к содержимому тома через его точку монтирования в файловом пространстве AFS.
В ячейке dims.prv для домашней директории каждого пользователя выделяется отдельный том, который монтируется в одну из папок локальной ячейки. Например, том пользователя pupkin в ячейке dims.prv смонтирован в /afs/dims.prv/p/pupkin. Для каждого тома администратор устанавливает предельный размер занимаемого им файлового пространства - квоту. При превышении этого предела возникает ошибка. Для томов пользователей в ячейке dims.prv установлена квота 100000 Кбайт.
Для работы с AFS необходимо не только примонтировать файловое пространство AFS в выделенный каталог, но и запустить специальное клиентское программное обеспечение - кэш-менеджер. Когда пользователь обращается к файлу в AFS, кэш-менеджер определяет необходимый сервер и загружает с него копию этого файла на локальную машину. Прикладные программы используют локальную кэшированную копию файла, поэтому внесенные изменения не сразу отражаются на главной версии файла на сервере. Как правило, изменения переносятся, когда файл закрывается. Если во время работы с каким-либо файлом хранящий его сервер становится недоступным, можно продолжить работу с локальной копией, но изменения не могут быть сохранены до тех пор, пока сервер снова не станет доступным.
Когда главная копия файла на сервере изменяется, файловый сервер AFS сообщает всем кэш-менеджерам о недостоверности их локальных копий этого файла. Это происходит следующим образом. Файловый сервер вместе с копией файла передает кэш-менеджеру механизм обратного вызова (callback). При изменении главной копии файла файловый сервер разрушает обратный вызов. Когда программа запрашивает очередную порцию данных из измененного файла, кэш-менеджер обнаруживает разорванный обратный вызов и загружает обновленную копию файла. Так же, как и в стандартных UNIX-системах, AFS сохраняет только изменения, сделанные в самую последнюю очередь. Поэтому необходимо предпринять определенные меры, чтобы не потерять свои изменения, если с файлом работают одновременно несколько пользователей. Один из возможных способов - воспользоваться средствами ограничения доступа AFS.
Аутентификация в AFS
Для обеспечения авторизованного доступа к файловому пространству ячейки используются пароли и взаимная аутентификация (mutual authentication). Во время аутентификации кэш-менеджер получает от сервера токен - порцию информации, зашифрованную при помощи вашего пароля. Если пользователь предоставил корректный пароль, кэш-менеджер может расшифровать токен. В дальнейшем токен служит доказательством вашей аутентичности для серверных программ AFS. Более того, когда кэш-менеджер обращается к файловому серверу, он шифрует полученный пользователем токен при помощи ключа AFS-сервера, так что только истинный файловый сервер может его расшифровать, что обеспечивает взаимную аутентификацию.
Чтобы получить доступ к файловому пространству AFS, пользователь должен пройти процедуру регистрации на локальной машине и аутентифицировать себя в AFS. При использовании AFS-модифицированной команды регистрации эти две процедуры могут быть совмещены в одну. В этом случае регистрационная информация UNIX и AFS должна совпадать. Пользователь вводит в приглашении login свое имя и пароль и при успешной аутентификации автоматически получает AFS-токен. Проверить наличие токена можно при помощи команды tokens:
$ tokens Tokens held by the Cache Manager: User`s (AFS ID 1022) tokens for afs@dims.prv [Expires Aug 3 14:35] --End of list--
В данном примере сообщается о наличии одного токена пользователя с ID=1022 для ячейки dims.prv, действительного до 3 августа 14:35.
В случае, если процесс регистрации в системе не подразумевает аутентификацию в AFS, необходимо сделать это явно при помощи команды klog. При успешной аутентификации данная программа передает кэш-менеджеру выделенный пользователю токен. Следует иметь ввиду, что вы можете получить только по одному токену для каждой ячейки AFS. Если вы запрашиваете еще один токен для какой-то ячейки, то он заменит собой предыдущий выданный вам для этой ячейки токен. Более того, при создании токена для него задается определенное время жизни. По истечении этого времени токен перестает распознаваться как действительный, так что пользователю может быть отказано в доступе к AFS, поэтому необходимо вовремя запрашивать при помощи klog новый токен.
klog [-setpag] [-cell ячейка] [пользователь]
Если имя пользователя отсутствует, используется регистрационное имя в UNIX. Если не указывать ключ -cell, выдается токен для локальной ячейки. Ключ -setpag используется для привязки токена к определенной группе процессов (PAG - process authentication group), так что им могут воспользоваться только процессы из данного сеанса пользователя. В противном случае токен привязывается к UID пользователя, что позволяет воспользоваться токеном любому процессу с аналогичным UID.
Выход из системы не означает уничтожение токенов. Их следует удалять явно при помощи команды unlog.
unlog [-cell ячейка]
Если не указан ключ -cell, удаляются все токены, иначе удаляется только токен для указанной ячейки.
Для смены пароля в AFS используется команда kpasswd. Если используется AFS-модифицированная система регистрации, эта команда изменяет также системный пароль. Пароль для ячейки dims.prv можно сменить через веб-интерфейс: https://kompot.petrsu.ru.
Информационные команды AFS
Большинство команд AFS выполняется при помощи сервиса fs:
fs команда [параметры]
Чтобы получить список доступных команд и краткое их описание, следует выполнить fs help. Подсказку по конкретной команде можно получить одним из следующих способов:
fs help команда fs команда -help
Команда fs quota выводит информацию о проценте использованной квоты на томе, к которому относится указанный каталог (или текущий, если не указан).
$ fs quota /afs/dims.prv/p/pupkin 34% of quota used.
Более подробную информацию о томе можно получить при помощи команд fs listquota и fs examine.
$ fs listquota /afs/dims.prv/p/pupkin Volume Name Quota Used % Used Partition user.pupkin 10000 3400 34% 86% $ fs examine /afs/dims.prv/p/pupkin Volume status for vid = 536871122 named user.pupkin Current disk quota is 10000 Current blocks used are 5745 The partition has 1593 blocks available out of 99162
Приведенные команды сообщают имя тома, на котором расположен указанный каталог (или текущий, если не указан), величину квоты в Кбайтах, текущий размер файлового пространства в Кбайтах, а также информацию о разделе, на котором расположен этот том (общий размер и размер занятого файлового пространства).
Контроль доступа
Для управления доступом к файлам и папкам AFS использует списки контроля доступа (access control lists). Список контроля доступа (ACL) может содержать примерно до 20 элементов, разрешающих или запрещающих доступ для тех или иных пользователей или групп. Владелец каталога и системный администратор всегда имеют право на управление ACL данного каталога. Прочие пользователи могут менять ACL, только если для них в ACL специально определен такой тип доступа (a - administer). Следует иметь в виду, что каждая ячейка AFS определяет свои группы и своих пользователей. Если пользователь принадлежит какой-либо группе, которая указана в ACL, пользователь получает все указанные типы доступа, как если бы он сам непосредственно был указан в ACL. Все пользователи, которые имеют доступ к файловому пространству некоторой ячейки, вне зависимости от того, аутентифицированы они или нет, автоматически сопоставляются с предопределенной группой system:anyuser. Все аутентифицированные в данный момент в локальной ячейке пользователи сопоставляются в ней с предопределенной группой system:authuser.
AFS сопоставляет ACL каждому каталогу и применяет его ко всем файлам в данном каталоге. Обычные файлы не имеют отдельных ACL. При перемещении файла из одного каталога в другой изменяются атрибуты доступа к данному файлу. Таким образом, изменяя ACL каталога, пользователь изменяет атрибуты доступа ко всем файлам в данном каталоге. Создаваемый подкаталог наследует текущий ACL своего родительского каталога, но для этого подкаталога ACL может быть изменен позднее. Следует иметь в виду, что пользователь получит доступ к содержимому каталога, только если для этого каталога и всех его родительских каталогов установлен режим доступа l (lookup).
Режимы доступа, определенные в AFS:
Обозначение | Описание |
---|---|
l (lookup) | Право на поиск в каталоге. Позволяет пользователю просмотреть ACL данного каталога (fs listacl), информацию о данном каталоге (ls -ld), а также получить список файлов в данном каталоге (ls). |
i (insert) | Право на добавление новых файлов и подкаталогов в данном каталоге. Не распространяется на подкаталоги, т. к. они имеют собственные ACL. |
d (delete) | Право на удаление файлов и подкаталогов в данном каталоге. |
a (administer) | Право на администрирование, т. е. на изменение ACL данного каталога. |
r (read) | Право на чтение файлов и просмотр информации о них (ls -l). |
w (write) | Право на изменение самих файлов и изменение их UNIX-атрибутов доступа (chmod). |
k (lock) | Право на блокирование файлов (право на монопольный доступ). |
Кроме того, в команде изменения ACL (fs setacl) можно использовать следующие псевдонимы для групп режимов доступа:
Обозначение | Соответствие | Описание |
---|---|---|
all | rlidwka | Обозначает группу из всех семи режимов доступа. |
none | Используется для удаления записи из ACL, лишая пользователя или группу каких-либо полномочий. | |
read | rl | Право на чтение файлов. |
write | rlidwk | Право на полный доступ к каталогу, за исключением изменения ACL. |
ACL может содержать разрешающие элементы (normal rights) и запрещающие элементы (negative rights). Запрещающие элементы имеют больший приоритет и используются для явного запрещения того или иного типа доступа для пользователя или группы.
AFS лишь частично использует атрибуты доступа UNIX, а именно, AFS использует у обычных файлов биты, соответствующие классу доступа "владелец", игнорируя остальные биты прав доступа. Для каталогов AFS вообще не использует атрибуты доступа UNIX, контролируя доступ лишь с помощью ACL. Биты класса доступа "владелец" используются следующим образом:
- Если право r не установлено, никто (даже владелец) не имеет право читать файл вне зависимости от разрешений ACL. Если право r установлено, файл имеют право просматривать те, для кого в ACL заданы права r и l.
- Если право w не установлено, никто (даже владелец) не имеет право изменять файл вне зависимости от разрешений ACL. Если право w установлено, файл может изменяться теми, для кого в ACL заданы права w и l.
- Право x определяет, является ли файл исполняемым. Чтобы запустить файл на выполнение, пользователь должен иметь право читать его (r и l).
Чтобы просмотреть ACL того или иного каталога, используется команда fs listacl (без параметров - ACL текущего каталога).
$ fs listacl /afs/dims.prv/p/pupkin Access list for /afs/dims.prv/p/pupkin is Normal rights: system:anyuser rl ivanov rlw petrov rlidwka Negative rights: ivanov:other-dept rl sidorov rl
В данном примере всем пользователям, кроме sidorov и тех, кто входит в группу ivanov:other-dept, разрешен доступ на чтение. Кроме того, пользователю ivanov разрешен доступ на запись, а пользователю petrov - полный доступ, если только эти пользователи не входят в группу ivanov:other-dept.
Для изменения ACL используется команда:
fs setacl [[-dir] каталог] [[-acl] acl_spec] [-negative] [-clear]
Если указана опция -negative, acl_spec задает запрещающие элементы. Если не указана - разрешающие. В качестве acl_spec указываются пары пользователь/группа - атрибуты, разделенные пробелом. Внутри пары имя пользователя/группы отделяется от атрибутов также пробелом. Если указана опция -clear, то перед установкой заданных элементов ACL будет очищен (все элементы удалены).
$ pwd /afs/dims.prv/p/pupkin$ fs setacl . sidorov none -negative $ fs setacl -dir . -acl system:anyuser none ivanov:colleagues write \ system:authuser rl $ fs listacl Access list for /afs/dims.prv/p/pupkin is Normal rights: system:authuser rl ivanov rlw ivanov:colleagues rlidwk petrov rlidwka Negative rights: ivanov:other-dept rl
В данном примере для каталога /afs/dims.prv/p/pupkin удаляется запрещающий элемент ACL sidorov. Затем удаляется разрешающий элемент system:anyuser и добавляется доступ на запись для членов группы ivanov:colleagues, а также доступ на чтение для всех аутентифицированных пользователей (system:authuser).
AFS-клиент для Windows
Так же, как и в UNIX, в Windows возможна совмещенная или раздельная процедура аутентификации. При совмещенной процедуре аутентификации логин и пароль домена Microsoft Network передаются сервису AFS для получения токена. При раздельной аутентификации необходимо запустить специальную программу аутентификации (меню Пуск / Программы / OpenAFS / Client / Authentication), в которой указывается название AFS-ячейки, логин и пароль (рис.1).
Рис.1 - Диалоговое окно получения (обновления) токена AFS |
Если AFS-сервис запущен и пользователь аутентифицирован, системная панель содержит значок сервиса - замочек (рис.2а). В противном случае значок отсутствует или перечеркнут (рис.2б).
а) | б) |
Рис.2 - Значок сервиса AFS на системной панели и его контекстное меню |
Файловое пространство AFS представляется в Windows как сетевой диск. Подключение такого сетевого диска осуществляется через контекстное меню сервиса AFS (рис.2а) пункт Show Tokens. Открывающийся диалог содержит три вкладки: Tokens (рис.3), Drive Letters (рис.4) и Advanced (содержит различные настройки).
Рис.3 - Вкладка с информацией о токенах |
Первая вкладка диалогового окна AFS клиента содержит инфорцию о полученном токене. Кнопка Obtain New Tokens позволяет получить новый токен, если, например, время действия уже выданного токена подходит к концу или требуется произвести аутентификацию под другим именем или в другой ячейке. Кнопка Discard These Tokens уничтожает все токены.
Рис.4 - Вкладка управления сетевыми дисками AFS |
Вторая вкладка содержит список сетевых дисков с назначенными им ресурсами AFS. Кнопки Add (Добавить), Change (Изменить), Remove (Удалить) позволяют управлять назначением ресурсов AFS сетевым дискам Windows.
Чтобы начать работу с файловым пространством AFS надо назначить ресурс AFS хотя бы одному диску (кнопка Add), при этом открывается следующий диалог:
Рис.5 - Диалог назначения (изменения) буквы диска сетевому ресурсу AFS |
В этом диалоге следует выбрать букву диска (Drive Letter) и путь в AFS (AFS path). В качестве пути AFS можно указать каталог всей ячейки (/afs/dims.prv) или каталог пользователя (/afs/dims.prv/p/pupkin). Т.к. сервер AFS работает под управлением UNIX в AFS пути слудует использовать прямые слеши (/), а не предлагаемые Windows обратные слеши (\). Поле Submount можно оставить пустым. Флажок "Restore..." (восстанавливать подключение при входе в систему) следует использовать, только если для регистрации в Windows вы используете свой уникальный логин или дополнительный диск не помешает другим пользователям, использующим тот же Windows-логин, и не введет их в замешательство.
Для папок на таком сетевом диске в контектном меню Проводника существует специальный пункт AFS, содержащий реализацию различных команд AFS (просмотр / управление ACL, просмотр квоты и прочей информации).
Рис.6 - Контекстное меню Проводника для папки в файловом пространстве AFS |
Завершив работу с ресурсами AFS, следует удалить созданные сетевые диски и уничтожить токены.