В типичной офисной сети стандартным протоколом совместного использования файлов в сети является общая межсетевая файловая система (Common Internet File Sharing), или CIFS. (Некогда CIFS была известна как блок сообщений сервера (Server Message Block), или SMB.) Это то самое «Сетевое окружение» («Network Neighborhood»), доступ к которому имеют пользователи Windows. Изначально этот протокол поддерживался только операционной системой Windows, но позднее он стал чем-то вроде стандарта. К счастью, в настоящее время имеется реализация сервера CIFS с открытыми исходными текстами под названием Samba.
Многие коммерческие продукты предоставляют свои услуги через этот протокол. Система FreeBSD также включает в себя модули ядра, обеспечивающие поддержку файловой системы и программ для поиска, монтирования и использования разделяемых ресурсов CIFS.
Подготовительные операции
Прежде чем использовать сетевую файловую систему компании Microsoft, необходимо собрать следующую информацию о сети Windows:
- Название рабочей группы или домена
- Имя пользователя Windows и пароль
- IP-адрес Windows-сервера DNS
Поддержка в ядре
Поддержка CIFS в операционной системе FreeBSD осуществляется несколькими модулями ядра. Базовые операции CIFS поддерживаются модулем smbfs.ko. Модули libmchain.ko и libiconv.ko предоставляют функции поддержки и загружаются автоматически вместе с модулем smbfs.ko. Вы можете скомпилировать эти модули в ядре статически:
options NETSMB options LIBMCHAIN options LIBICONV options SMBFS
Безусловно, эти модули можно загружать во время загрузки системы, поместив соответствующие записи в файл /boot/loader.conf.
Конфигурирование CIFS
Настройки CIFS могут находиться в конфигурационном файле $НОМЕ/.nsmbrc или /etc/nsmb.conf. Параметры настройки в файле /etc/nsmb.conf имеют приоритет перед настройками, которые размещаются в домашних каталогах. Конфигурационный файл делится на разделы с помощью меток, заключенных в квадратные скобки. Например, настройки, которые применяются к каждому соединению CIFS, находятся в разделе
[default]
. Создайте свои собственные разделы с указанием серверов, пользователей и разделяемых ресурсов в следующих форматах:
[servername] [servername:username] [servername:username:sharename]
Информация, которая применяется ко всему серверу, помещается в раздел, который следует сразу за именем сервера. Информация, которая применяется к конкретному пользователю, помещается в раздел с именем этого пользователя, а информация, применяемая к конкретному разделяемому ресурсу, вставляется в раздел, заголовок которого включает имя разделяемого ресурса. Если у вас нет информации, конкретной для каждого пользователя или разделяемого ресурса, тогда все сведения можно поместить в один большой раздел
[servername]
.
В конфигурационных записях используются значения из системы CIFS, например, моя учетная запись во FreeBSD имеет имя mwlucas, а в Windows — lucas_m, поэтому я использую имя lucas_m в файле nsmb.conf.
Ключевые слова в nsmb.conf
Параметры настройки в файле nsmb.conf определяются с помощью ключевых слов и значений в соответствующих разделах. Например, серверы имеют IP-адреса, а пользователи — нет, поэтому параметр, определяющий IP-адрес, должен находиться только в разделе описания сервера. Чтобы использовать ключевое слово, ему нужно присвоить значение через знак равенства: keyword=value. Далее перечисляются наиболее часто употребляемые — полный список можно найти в странице руководства nsmb.conf(5).
workgroup=string
Ключевое слово
workgroup
определяет имя домена Windows или рабочей группы, доступ к которой требуется получить. Это типичная настройка по умолчанию, используемая для всех серверов.
addr=a.b.c.d
Ключевое слово
addr
определяет IP-адрес сервера CIFS. Данное ключевое слово может находиться только в разделе с меткой
[servername]
.
nbns=a.b.c.d
Ключевое слово
nbns
определяет IP-адрес сервера имен NetBIOS (WINS). Вы можете добавить эту строку в раздел по умолчанию или в раздел с конкретным сервером. Если у вас имеется служба ActiveDirectory (которая основана на DNS), можно использовать имена хостов в DNS. Добавление сервера WINS не повредит вашей конфигурации и поможет проверить базовые настройки CIFS.
password=string
Ключевое слово
password
определяет пароль в открытом текстовом виде для пользователя или разделяемого ресурса. Если вам придется хранить пароли в /etc/nsmb.conf, вы должны обеспечить доступность этого файла на чтение только для пользователя root. Хранение паролей в многопользовательских системах в файле $НОМЕ/.nsmbrc вообще недопустимо.
Пароли Windows можно зашифровать с помощью команды
smbutil crypt
. Она сгенерирует строку, которую можно использовать как значение этого ключевого слова. Зашифрованная строка начинается с двух символов доллара ($$). Шифрование предотвращает случайное раскрытие пароля, но злонамеренный пользователь легко может расшифровать его.
Разрешение имен CIFS
Давайте создадим типичный файл nsmb.conf. Для начала нам необходимо как минимум иметь возможность находить хосты в сети, а это означает, что нам необходимо знать имя рабочей группы. У нас имеется контроллер домена в виде сервера WINS. Кроме того, у меня имеется учетная запись на серверах Windows, предоставляющих доступ к разделяемым ресурсам, поэтому я буду использовать их как настройки по умолчанию в nsmb.conf.
[default] workgroup=BIGLOSER nbns=192.168.1.66 username=unix
Взяв эту информацию на вооружение, мы сможем производить базовые запросы на получение имен SMB.
# smbutil lookup ntserv1
Got response from 192.168.1.66 IP address of ntserv1: 192.168.1.4
Если все получилось, значит в вашем распоряжении имеется базовая функциональность CIFS.
Прочие функции smbutil(1)
Прежде чем можно будет монтировать разделяемые ресурсы Windows, необходимо иметь возможность зарегистрироваться на компьютере Windows. Эта операция доступна только пользователю root.
# smbutil login //unix@ntserv1
Password:
Итак, наша конфигурация правильная. Давайте с помощью команды
smbutil view
посмотрим, какие ресурсы предлагает этот сервер.
# smbutil view //unix@ntserv1
Password: Share
Type
Comment
——————————-
IPC$
pipe
Remote IPC
ADMIN$
disk
Remote Admin
C$
disk
Default share
unix
disk
4 shares listed from 4 available
Вы получите список всех разделяемых ресурсов на сервере CIFS. Теперь предположим, что мы завершили работу с сервером, и выходим из него.
# smbutil logout //unix@ntserv1
Монтирование разделяемого ресурса
Теперь, закончив исследования, можно выполнить монтирование ресурса с помощью mount_smbfs(8). Эта команда имеет следующий синтаксис:
# mount_smbfs //username@servername/share /mount/point
У меня имеется разделяемый ресурс МРЗ на компьютере, работающем под управлением Windows, к которому я хочу получить доступ из системы FreeBSD. Чтобы смонтировать его в каталог /home/mwlucas/smbmount, я мог бы запустить следующую команду:
# mount_smbfs //unix@ntserv1/MP3 /home/mwlucas/smbmount
mount(8) и df(1) показывают, что этот ресурс подключен к системе и теперь можно обращаться к документам на этом сервере, как к файлам в любой другой файловой системе.
Другие параметры mount_smbfs
Утилита mount_smbfs поддерживает несколько ключей, влияющих на поведение монтируемых файловых систем CIFS. Ключ
-f
используется для выбора другого режима назначения прав доступа к файлам, а ключ
-d
— для выбора другого режима назначения прав доступа к каталогам. Например, чтобы определить права доступа к монтируемому каталогу, которые позволят обращаться к нему только мне, я мог бы запустить команду
mount_smbfs -d 700
. Это позволило бы сделать права доступа из системы FreeBSD более строгими, чем привилегии в Windows, и в моем случае это было бы именно то, что нужно. Владельца файла можно изменить с помощью ключа
-u
, а группу — с помощью ключа
-g
Имена файлов в файловых системах корпорации Microsoft не чувствительны к регистру символов, а в системах UNIX — наоборот. Файловая система CIFS по умолчанию оставляет регистр символов в именах файлов без изменений, но это может оказаться нежелательно. Ключ
-c
вынуждает mount_smbfs(8) менять регистр символов в именах файлов и каталогов:
-c l
изменяет регистр всех символов на нижний, а
-c u
на верхний.
Примеры записей в nsmb.conf
Ниже приводятся примеры записей в файле nsmb.conf для различных ситуаций. В этих примерах предполагается, что все представленные записи являются частью конфигурации, в которой уже определены рабочая группа, сервер имен NetBIOS и имя пользователя с привилегиями доступа к разделяемым ресурсам CIFS.
Уникальный пароль на отдельной системе
Если предположить, что имеется некоторый компьютер с сетевым именем desktop, на котором открыт разделяемый ресурс, защищенный паролем, то можно использовать запись, аналогичную приведенной ниже. Многие системы Windows 9x используют такую возможность.
[desktop:shareusername] password=$$1789324874ea87
Доступ ко второму домену
В этом примере описывается доступ ко второму домену с именем development. В этом домене используются имя пользователя и пароль, которые отличаются от тех, что используются в домене по умолчанию.
[development] workgroup=development username=support
Принадлежность файлов в CIFS
Различия в определении принадлежности файлов в UNIX-подобных операционных системах и в Windows могут порождать проблемы. Начнем с того, что имена пользователей FreeBSD, возможно, не получится отобразить в имена пользователей Windows, а кроме того, в UNIX и в Windows используются совершенно непохожие схемы назначения прав доступа.
Если в Windows вы используете отдельную учетную запись для доступа к разделяемому ресурсу, вы обладаете теми правами доступа, которые имеет эта учетная запись в Windows, однако в FreeBSD для этого монтируемого ресурса вам необходимо назначить права доступа, используемые системой FreeBSD. По умолчанию утилита mount_smbfs(8) определяет те же самые права доступа для нового разделяемого ресурса, какие указаны для точки монтирования. В предыдущем примере владельцем каталога /home/mwlucas/smbmount был пользователь mwlucas, а для каталога были определены права 755. Эти права доступа говорят, что пользователь mwlucas обладает возможностью редактировать все, что находится в этом каталоге, но все остальные лишены такого права. Но даже когда FreeBSD позволяет данному пользователю редактирование указанных файлов, Windows может не позволить ему изменять файлы, находящиеся на разделяемом ресурсе.