Автор: Станислав Лапшанский
Более года назад я обсуждал поддержку 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
Для монтирования моего персонального ресурса на
файловом сервере в каталог /var/www/mwlucas/smbmount, я пишу: # mount_smbfs //mlucas@fileserver4/mlucas /var/www/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/var/www/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 устанавливает права на ресурс такими же как у каталога в который он
монтируется. Каталог /var/www/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
|