On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru






 

Надежная SMB

Автор: Станислав Лапшанский

Более года назад я обсуждал поддержку FreeBSD файловой системы SMB. В то время она была реализована на экспериментальном уровне и ее часто 'заклинивало'.

С тех пор она была доведена до уровня, когда ее стабильность стала достаточной для использования ее в реальных задачах. Если вы ходите использовать разделяемые ресурсы Windows-машин на рабочих станциях FreeBSD, эта статья для вас. Для начала необходимо собрать некоторую информацию о вашей Windows-сети:

  • Имя рабочей группы или домена
  • Действующее сетевое имя и пароль
  • IP адрес WINS-сервера или DNS-имена всех узлов к которым предполагается организовать доступ (адрес WINS-сервера можно получить выполнив на Windows-машине команду ipconfig /all).

Первой проблемой при организации доступа FreeBSD в сеть Windows является поддержка Windows большого набора разнообразных кодовых страниц - пользователь Windows легко может использовать символы не встречающиеся в таблице ASCII. Ядро FreeBSD не включает в себя библиотек для поддержки таких символов. Поэтому установите порт libiconv из /usr/ports/converters/libiconv. Заметьте, что libiconv распространяется под лицензией LGPL, так что если вы заинтересованы в использовании SMBFS во встроенных системах, делайте это под руководством вашего юридический отдела.

Теперь перекомпилируйте ваше ядро с поддержкой SMB. Просто добавьте следующие опции в ядро:

options NETSMB
options NETSMBCRYPTO
options LIBMCHAIN
options LIBICONV
options SMBFS

SMBFS также доступен как модуль. Однако вам в любом случае придется перекомпилировать ядро - для того что бы включить в него поддержку сетей SMB, поэтому SMBFS очевидно будет разумным так же компилировать статически.

После компиляции ядра, установите утилиты для работы с SMB из /usr/ports/net/smbfs. SMB-утилиты обязательно должны быть синхронизированы с конфигурацией вашего ядра. Это делает невозможным использование скомпилированных пакетов, если вы конечно не обладаете машинами с одинаковой конфигурацией. Если вы производите обновление вашей инсталляции FreeBSD, вы должны перекомпилировать порт. Для того что бы жизнь не казалась вам медом, основное хранилище исходного кода SMBFS находится в Казахстане на очень медленном канале. Я рекомендую вам сохранить дистрибутив исходного кода где-нибудь в вашей сети, что бы вы всегда легко могли перекомпилировать утилиты без необходимости вытаскивать исходный код с другой стороны планеты.

Утилиты SMB используют конфигурационный файл, который находится или в $HOME/.nsmbrc или в /usr/local/etc/nsmb.conf. Любые настройки сделанные в nsmb.conf переписывают соответствующие настройки в директориях пользователей. Конфигурационный файл поделен на секции текстовыми метками, заключенными в квадратные скобки. Например, настройки применяемые к каждой SMB-сессии хранятся в секции [default]. Вы можете создавать собственные секции задавая серверы, пользователей и разделяемые ресурсы в одном из следующих форматов:

[servername]
[servername:username]
[servername:username:sharename]

Например информация применяемая ко всему серверу находится в секции [servername], применимая к определенному пользователю в [servername:username] и наконец к определенному ресурсу в [servername:username:sharename]. Однако вы можете заполнить информацию о всех разделенных ресурсах в секции [servername], если вам не нужны разные настройки для каждого отдельного ресурса.

Все эти значения являются SMB-параметрами, т.е. например мое регистрационное Windows-имя 'mlucas', а в UNIX - 'mwlucas', значит в nsmb.conf я должен использовать имя 'mlucas'.

Вам придется использовать ключевые слова для определения конфигурации секции. Некоторые ключевые слова могут быть использованы только в определенных секциях. Например конфигурационная секция сервера может иметь в своем составе определение IP-адреса, а пользователя - нет. Значения параметрам задаются с помощью знака равенства, типа "keyword=value". Теперь расскажем о ключевых словах.

workgroup=string

Задает имя NT-домена или название рабочей группы, к которой вы собираетесь получить доступ.

addr=a.b.c.d

Это IP-адрес сервера, имя которого задается в названии секции. Этот параметр может находиться только в секции описания сервера.

charsets local:remote

При помощи этого параметра обеспечивается поддержка прозрачного конвертирования между кодировками используемыми клиентом FreeBSD и Windows-сервером (в случае русскоязычного окружения таковыми обычно являются koi8-r и cp866 - прим. переводчика). Так как SMBFS была написана в Средней Азии, это было немаловажной задачей!

nbns=a.b.c.d

Параметр для указания IP-адреса WINS-сервера. Вы можете поместить этот параметр или в секции [default] или в секциях конфигурации конкретных серверов.

nbscope=string

Этот параметр задает область NetBIOS. Если вы не знаете, что такое область NetBIOS, то вероятнее всего вам не потребуется этот параметр.

  • retry_count - количество попыток, которые будет предпринимать SMB-клиент при обращении к SMB-серверу, перед тем, как связь с сервером будет считаться нарушенной. Значение 'по умолчанию' вероятно будет самым подходящим.
  • timeout - максимальное время ожидание ответа от сервера. Скорее всего вам следует оставить значение 'по умолчанию'.
  • password=string - пароль пользователя или ресурса, заданный открытым текстом. Если вы будете хранить пароли в файле nsmb.conf, убедитесь, что право на чтение имеет только пользователь root. Хранение паролей в файле $HOME/.nsmbrc является плохой мыслью, если системой пользуется несколько пользователей. Вы можете зашифровать ваши пароли используя утилиту smbutil с ключом -crypt. В начале зашифрованного пароля находятся два символа доллара ($$). Использование шифрования паролей может помочь предотвратить подглядывание вашего пароля случайным человеком, однако не может защитить его от взлома - хакер легко вскроет такой шифр.

Итак начнем писать основной конфигурационный файл nsmb.conf. Во-первых мы хотим иметь возможность находить узлы Windows-сети. Для этого необходимо задать имя рабочей группы (или домена - прим. переводчика) и WINS-сервера. Я также имею пользовательский аккаунт в домене, я укажу мое пользовательское имя в [default] секции.

[default]
workgroup=EXAMPLE
nbns=192.168.2.80
username=mlucas

Теперь вы можете выполнять основные запросы к WINS-серверу. При помощи smbutil можно проводить базовое разрешение NetBIOS-имен в IP-адреса.

# smbutil lookup fileserver4
Got response from 192.168.2.80
IP address of fileserv4: 192.168.1.202
#

Если ваш запрос был обработан подобным образом, значит все в порядке. Теперь мы хотим получить доступ к общим ресурсам этого сервера. Перед тем, как вы сможете обратиться к ресурсу, вы должны пройти процедуру авторизации. Только пользователь root может использовать функции авторизации утилиты smbutil.

# smbutil login //mlucas@fileserv4
Password:
Connected to MLUCAS
#

Итак наш пароль оказался верен. Попробуем посмотреть список доступных ресурсов, которые предоставляет этот сервер.

# smbutil view //mlucas@fileserv4
Password:
Share Type Comment
---------------------------------------------
jsmith$ disk
gdonner$ disk
mlucas$ disk

Вы получили список всех ресурсов на этом сервере. Когда вы завершите, закройте сеанс с сервером.

# smbutil logout //mlucas@fileserv4
Password:
Connection unmarked as permanent and will
be closed when possible
#

Теперь, кода мы закончили расследование, попробуем на самом деле смонтировать ресурс при помощи утилиты mount_smbfs. Синтаксис очень простой.

mount_smbfs //username@servername/share /mount/point

Для монтирования моего персонального ресурса на файловом сервере в каталог /home/mwlucas/smbmount, я пишу:

# mount_smbfs //mlucas@fileserver4/mlucas /home/mwlucas/smbmount

Проверьте ваши действия утилитой df.

# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 99183 49105 42144 54% /
/dev/ad0s1f 5186362 3091500 1679954 65% /usr
/dev/ad0s1e 198399 22816 159712 12% /var
procfs 4 4 0 100% /proc
//MLUCAS@FILESERV4/MLUCAS 128000 54320 73680 42% /usr/home/mwlucas/smbmount
#

Я могу выполнять основные операции с файлами, включая использование emacs и StarOffice-документов в этом каталоге. Жизнь стала немного лучше. mount_smbfs включает несколько опций для тонкой настройки процесса монтирования. Мы можем переделать nsmb.conf для использования различных паролей для доступа к различным ресурсам, или например для игнорирования разрешения NetBIOS-имен для некоторых узлов сети. Вот более сложный пример файла nsmb.conf с комментариями.

[default]
workgroup=EXAMPLE
nbns=192.168.2.80
username=mlucas

# У меня есть ресурс на моем рабочем столе с отдельным паролем
[desktop:mlucas]
password=$$1725a5038393e12ee

# Разработчики находятся в другом NT-домене с совместно используемым именем пользователя
[development]
workgroup=EXAMPLE2
username=support

Вопрос владения (ownership) файлами в смонтированном сетевом каталоге может доставить проблемы. Дело в том, что обычно ваши имена в Unix'е отличаются от ваших имен в Windows, к тому же Unix имеет совершенно другую систему контроля доступа к файлам. Поскольку при доступе к ресурсу вы используете Windows-имя пользователя, вы получаете к нему доступ который имеет этот пользователь к данному ресурсу в среде Windows. Поэтому вы должны установить правильные Unix-права для этого ресурса. По умолчанию mount_smbfs устанавливает права на ресурс такими же как у каталога в который он монтируется. Каталог /home/mwlucas/smbmount в нашем примере имеет владельцем пользователя 'mwlucas' и группу 'mwlucas', с правами 755. Следовательно только я могу редактировать файлы в этом каталоге. Вы можете изменить настройку 'по умолчанию' используя для задания режима доступа к файлам mount_smbfs -f, а для режима доступа к каталогам mount_smbfs -d. Например для того что бы только я мог пользоваться файлами этого каталога, я должен использовать mount_smbfs -d 700 (таким образом можно сделать Unix-права на ресурс более жесткими чем Windows-права, однако это не является моей целью в данный момент). Я могу сменить владельца при помощи ключа -u, и поменять группу владельца при помощи ключа -g.

Для отключения разрешения NetBIOS-имен и возможности использования вместо них DNS-имени узла или IP-адреса, необходимо при вызове mount_smbfs использовать ключ -I.

Ключ -N значит, что mount_smbfs должна читать пароль из конфигурационного файла, а не спрашивать его на терминале пользователя. Это значит что вы должны будете указать пароль открытым текстом в файле nsmb.conf.

Флаг -W позволяет указать новую рабочую группу (или домен). Этот флаг переопределяет любые настройки в файле nsmb.conf.

Windows нечувствительна к регистру, Unix, напротив, регистр учитывает. По умолчанию SMBFS оставляет регистр таким какой был введен пользователем, но это не всегда может быть тем что вы хотите. Флаг -c указывает mount_smbfs на необходимость смены регистра. -c l приводит все к нижнему регистру, а -c u - к верхнему.

При работе с mount_smbfs я оценил ее гибкость, вполне достаточную для использования ее в почти любой ситуации в Windows-сети. Таким образом SMBFS позволит вам прозрачно использовать вашу FreeBSD-рабочую станцию в любом офисе.




Литература по FreeBSD