
Сетевая файловая система (NFS) 281
Итак, отдельные узлы получают доступ в режиме чтения/записи к некото-
рым из каталогов, однако доступ конкретных пользователей этих узлов рег-
ламентируется стандартными для Unix правами уровня пользователя, груп-
пы и глобального доступа, вычисляемыми на основе идентификатора поль-
зователя (UID) и группы (GID). NFS считает, что удаленный узел выполнил
проверку подлинности пользователей и назначил им корректные идентифи-
каторы UID и GID. Экспортирование файлов дает пользователям системы-
клиента такой же доступ к этим файлам, как если бы они регистрировались
напрямую на сервере. Разумеется, предполагается, что клиент и сервер на-
значили одинаковые идентификаторы UID и GID каждому из пользовате-
лей. Но это далеко не всегда так. Если клиент и сервер назначили один и тот
же идентификатор UID определенному пользователю, например идентифи-
катор пользователя Craig равен 501 на обеих системах, тогда обе системы
корректно определят пользователя Craig, и он в результате получит доступ к
своим файлам. Если же клиентская система назначила пользователю Craig
идентификатор UID, равный 501, а сервер назначил тот же UID пользовате-
лю Michael, сервер предоставит пользователю Craig доступ к файлам пользо-
вателя Michael - так, словно они принадлежат пользователю Craig. В NFS
существует ряд механизмов, позволяющих справляться с проблемами, воз-
никающими вследствие такого несовпадения идентификаторов UID и GID.
Первая из очевидных проблем - работа с учетной записью администратора.
Маловероятно, что администратор разрешит доступ на сервер пользовате-
лям, обладающим root-полномочиями на клиентских системах. По умолча-
нию NFS блокирует такой доступ параметром
root_squash,
который выполня-
ет отображение UID и GID пользователя root в соответствующие идентифи-
каторы пользователя nobody. Таким образом, пользователь root с системы-
клиента может получить только общие полномочия на сервере. Чтобы изме-
нить это поведение, можно воспользоваться установкой
no_root_squash,
одна-
ко no_root_squash делает сервер потенциально уязвимым.
Отображение прочих идентификаторов UID и GID в идентификаторы поль-
зователя nobody достигается при помощи параметров
squash_uids,
squash_gids
и all_squash. all_squash выполняет такое отображение для всех пользовате-
лей клиентской системы. squash_uids и squash_gids выполняют отображение
конкретных идентификаторов UID и GID. Пример:
Первая запись экспортирует каталог /pub и делает его доступным только
для чтения всем клиентам. Все пользователи клиентских систем получают
общие полномочия, присущие пользователю nobody, то есть могут читать
только те файлы, которые доступны для чтения всем пользователям, а не
только владельцу или группе.
Вторая запись экспортирует каталог /usr/local/pub и делает его доступным
для чтения/записи (режим по умолчанию) всем клиентам. Параметры squ-
ash_uid и squash_gid в данном примере показывают, что для некоторых пара-