UnixMountainSkiFun

Unix Горы Лыжи

02-06-2008 14:41

Доступ к ресурсам с помощью smbsh и smbfs


Программа 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
 # df
 Filesystem   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=0775
   password:

Чтобы завершить соединение потребуется ввести пароль. Остальные опции используются для указания пользователя, группы и прав, которые будут видны в примонтированном ресурсе. В этом примере файловая система SMB будет в режиме read-only для любого пользователя и этого компьютера, исключая root и пользователей группы staff.

<< Доступ к ресурсам с помощью smbclient | Multi Tool Linux | Доступ к принтерам с помощью smbprint >>


edit RightSideBar