Надежная SMB опубликовано admin числа 30/09/02

Статья является переводом текста Майкла Лукаса (Michael Lucas), опубликованного по адресу http://www.onlamp.com/pub/a/bsd/2001/11/15/Big_Scary_Daemons.html.

Более года назад я обсуждал поддержку FreeBSD файловой системы SMB (см. http://www.onlamp.com/pub/a/bsd/2000/07/13/Big_Scary_Daemons.html). В то время она была реализована на экспериментальном уровне и ее часто «заклинивало».
С тех пор она была доведена до уровня, когда ее стабильность стала достаточной для использования ее в реальных задачах. Если вы ходите использовать разделяемые ресурсы 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-рабочую станцию в любом офисе.


Комментарии: 0
Отправить другу

Домашняя страничка Станислава Лапшанского

RusHelp.com - вся компьютерная документация на русском!