02-06-2008 14:41
Программа smbclient не единственный способ получить доступ к Windows-ресурсам. Linux обеспечивает две другие возможности: командную оболочку smbsh и на удивление полезную файловую систему smbfs.
Первой нами названа smbsh, которая в действительности всего лишь командная оболочка bash, вызванная изнутри Samba "wrapper"-а. Wrapper это разделяемая библиотека, которая перехватывает системные вызовы, которые обращаются к файловой системе, с тем, чтобы создать виртуальный каталог в /smb. Любая динамически слинкованная программа, запущенная в таком окружении, будет способна обращаться к Windows-сети точно так же, как если бы эта сеть была бы частью локальной файловой системы.
Виртуальный каталог организуется как /smb/<server>/<share>/<path:>/<file>. Например,
$ ls /smb
будет перечислять все компьютеры, доступные в рабочей группе, а команда
$ cp /smb/HOMER/site-local/sql/tables.sql ./
будет копировать файл находящийся на ресурсе //HOMER/site-local в текущий каталог. Помните, что smbsh не будет работать со статически слинкованными программами, и даже в документации Samba о SMB-"wrapper"-е говорят как о "hack".
К счастью имеется более удобное решение: Windows-овские ресурсы могут быть примонтированы к файловой системе Linux-а, точно так же как если б это была локальная партиция! Это эквивалент операции "подключить сетевой диск" (mapping a network volume) в Windows и Netware. Отличие в том, что вместо добавления сетевого ресурса в виде отдельного диска с назначенной ему буквой, ресурс может быть примонтирован в любом месте файловой системы Linux-а. За эти чудеса ответственны модуль ядра smbfs и утилита smbmount. Поддержка файловой системы Samba включена в дистрибутив исходных текстов ядра, однако возможно Вам потребуется включить эту поддержку в ядре и перекомпилировать его. Данная конфигурационная опция находится в меню Filesystems/Network filesystems. Перекомпиляция ядра рассматривается в Главе 1.
# insmod smbfs# smbmount //KEARNEY/C$ /mnt/remote-cdrom# dfFilesystem 1k-blocks Used Available Use% Mounted on/dev/hdc1 101075 40254 55602 42% //dev/hdc5 147740 32032 108079 23% /var/dev/hdc6 147740 2039 138072 1% /tmp/dev/hdc7 1981000 1251183 627405 67% /usr/dev/hdc4 5723816 3859608 1567809 71% /home//kearney/c$ 101075 40254 55602 42% /mnt/kearney-cdrive
Команда insmod для того, чтобы быть уверенным, что модуль ядра smbfs загружен. Конечно же этот шаг не обязателен, если поддержка файловой системы SMB "вкомпилирована" в ядро. Стандартная команда mount не может построить необходимые для модуля smbfs структуры данных, поэтому Samba предоставляет команду smbmout. Синтаксис этой команды сходен, однако первым аргументом, вместо имени устройства должно быть имя общедоступного ресурса. Имя общедоступного ресурса, оканчивающееся на знак доллара ($), не отображается в Windows Explorer-е. Это особый способ Microsoft-а, с помощью которого они реализуют "скрытые" ресурсы. Однако Samba всегда показывает такие ресурсы.
В случае ресурсов с аутентификацией (вряд ли ваши ресурсы используют анонимный login, так ведь?), требуемые для соединения имя пользователя и домен указываются с помощью опции -o:
# smbmount //KEARNEY/C$ /mnt -o username=pcurtis,workgroup=WORKGROUP, uid=root,gid=staff,fmask=0664,dmask=0775password:
Чтобы завершить соединение потребуется ввести пароль. Остальные опции используются для указания пользователя, группы и прав, которые будут видны в примонтированном ресурсе. В этом примере файловая система SMB будет в режиме read-only для любого пользователя и этого компьютера, исключая root и пользователей группы staff.
<< Доступ к ресурсам с помощью smbclient | Multi Tool Linux | Доступ к принтерам с помощью smbprint >>