Боремся с вирусами и инфраструктурой, или отключение SMB v1.

Изучаем Linux, 302 (смешанные среды)

Интеграция с протоколом CIFS

Использование Linux в качестве клиента серверов SMB/CIFS

Серия контента:

Об этой серии

Эта серия статьей поможет вам освоить задачи администрирования операционной системы Linux. Вы можете использовать материалы этих статей для подготовки к экзаменам программы LPIC третьего уровня (LPIC-3) .

Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему . Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит текущие (по состоянию на ноябрь 2010 года) цели экзаменов сертификации LPIC-3.

В этой статье рассматриваются следующие темы:

  • Протоколы Server Message Block (SMB) и Common Internet File System (CIFS).
  • Возможности и преимущества использования CIFS.
  • Монтирование общих файловых ресурсов CIFS на клиентах Linux.

Эта статья поможет вам подготовиться к сдаче экзамена LPI 302 (специализация "Смешанные среды") и содержит материалы цели 314.1 темы 314. Цель имеет вес 3.

Предварительные требования

Чтобы извлечь наибольшую пользу из наших статей, необходимо обладать продвинутыми знаниями о Linux и иметь работоспособный компьютер с Linux, на котором можно будет выполнять все встречающиеся команды. В частности, предполагается, что читатель умеет работать с командной строкой Linux, знает основы конфигурирования Samba и имеет общее представление о структуре конфигурационного файла smb.conf. Необходимо также знать основы монтирования локальных и удаленных файловых систем (с помощью команды mount и файла /etc/fstab). Знания о команде ftp , входящий в стандартный набор текстовых команд Linux приветствуются, хотя не являются обязательными.

Что такое SMB/CIFS

О факультативном экзамене LPI-302

Как и многие другие программы, программа сертификации Linux Professional Institute (LPIC) предусматривает различные уровни сертификации, где для получения каждого последующего уровня необходимо обладать более глубокими знаниями и практическим опытом. Экзамен LPI-302 – это факультативный экзамен третьего уровня программы LPIC, требующий продвинутых знаний в области системного администрирования Linux.

Для получения сертификата LPIC третьего уровня (LPIC-3) необходимо успешно сдать два экзамена первого уровня (101 и 102), два экзамена второго уровня (201 и 202), а также базовый экзамен 301 третьего уровня (LPIC-3). Если вы получили сертификат третьего уровня, вы можете сдавать факультативные экзамены по определенным специализациям, например, экзамен LPI-302.

Прежде чем переходить к рассказу о том, как использовать Linux в качестве клиента сервера SMB/CIFS, полезно рассказать об особенностях этих протоколов и выяснить, насколько полно они обеспечивают использование файловой системы при работе с Linux . Мы объясним, как работает изучение оригинальный протокол SMB и какие новые функции реализованы в его модификации CIFS . Вы можете обратиться к статье developerWorks, содержащей материалы цели 310.1 экзамена LPI, в которой рассматриваются некоторые основные принципы SMB/CIFS (см. ссылку в разделе ).

Основные возможности SMB

SMB обладает несколькими уникальными возможностями с точки зрения работы в сети, включая собственную систему именования компьютеров (Network Basic Input/Output System, NetBIOS), рабочие группы и протоколы аутентификации. Для того чтобы понять, как SMB и CIFS работают с Linux-клиентами общих файловых ресурсов, нужно рассказать о наиболее важной функции этих протоколов, а именно, о наборе предоставляемых ими метаданных.

Метаданные – это данные, связанные с файлом, но не являющиеся его частью. Примером метаданных являются метка времени, владелец, права доступа и даже имя файла. Несомненно, вы знаете о некоторых способах использования метаданных на компьютерах Linux и, возможно, об их некоторых отличиях в Linux и других операционных системах, например, Windows. Поскольку протокол SMB был разработан для DOS, Windows и IBM Operating System/2® (OS/2), то он содержит много метаданных, специфичных для этих операционных систем. Однако более важно то, что SMB не поддерживает такие метаданные UNIX® и Linux, как владельцы, группы и большинство прав доступа. Кроме того, SMB не поддерживает символические и жесткие ссылки, а также другие специальные типы файлов, такие как файлы устройств. SMB содержит несколько типов метаданных, не распознаваемых Linux в обычном режиме, например, биты hidden (скрытый) , archive (архивный) и system (системный). Бит Read-only (только чтение) можно сопоставить биту разрешений Write (запись) в Linux.

Создайте ваш собственный канал

Вы можете создать ваш собственный RSS, Atom или HTML канал обновлений и получать уведомления о новых или обновленных статьях нашего сайта. Для этого перейдите на страницу , выберите зону Linux , установите флажок Статьи и введите в качестве ключевой фразы Linux Professional Institute , после чего выберите требуемый тип канала.

Другим ограничением SMB является максимальный размер файла, равный двум гигабайтам. Это ограничение является очевидной проблемой в сегодняшнем мире многогигабайтовых архивов, мультимедиа-файлов и т. д.

Для того чтобы клиенты Linux могли работать с SMB с учетом вышеперечисленных особенностей, они должны либо игнорировать их, либо иметь возможность использовать "поддельные" данные. Эти возможности похожи на те, что используются при монтировании в Linux файловых систем NTFS или FAT. К счастью, протокол CIFS предоставляет более широкий набор инструментов, позволяющих обходить некоторые из этих ограничений.

Необходимо также знать и о сетевых портах, используемых протоколом SMB. Это UDP-порты (User Datagram Protocol) 137 и 138, а также TCP-порт 139 (службы сеансов – другими словами, передача файлов). Эта информация потребуется при отладке SMB с помощью низкоуровневых утилит диагностики сети.

Расширения CIFS для протокола SMB

В середине 1990-х годов компания Microsoft® изменила название протокола SMB на CIFS и одновременно добавила в него ряд новых возможностей, включая поддержку символических и жестких ссылок, а также файлов большого объема. Также CIFS поддерживает доступ к серверу по защищенному TCP-порту 445 в дополнение к стандартному порту 139.

Не менее важными, чем собственные расширения Microsoft для SMB, оказались и другие расширения CIFS. В частности, ряд функциональных возможностей, известный как UNIX extensions (расширения UNIX), обеспечивает поддержку владельцев и прав доступа к файлам наряду с другими типами метаданных UNIX. Если и клиенты, и сервер поддерживают эти расширения, то использование протокола CIFS вместо протокола SMB может обеспечить намного более эффективную работу клиентов под управлением Linux. Как и можно было ожидать, эти расширения не поддерживаются операционными системами семейства Windows Server®, поэтому полезны они только тогда, когда клиенты Linux подключаются к серверу Samba. Сервер должен быть настроен с помощью следующего глобального параметра:

unix extensions = Yes

По умолчанию этот параметр был установлен в No во всех версиях Samba, меньше 3.0, но в Samba 3.0 по умолчанию он установлен в Yes , что избавляет от необходимости настраивать его вручную.

Использование smbclient

Возможно, самый простой способ получить доступ к серверу SMB/CIFS с клиента Linux – это использовать утилиту командной строки smbclient . Эта утилита похожа на классическую команду ftp , поэтому если вы знакомы с ftp , то вы легко освоите и smbclient . Если вы не знакомы с ftp , то достаточно знать, что эта программа обеспечивает соединение с сервером без стандартного монтирования общих файловых ресурсов. Вместо этого для просмотра, удаления, загрузки или передачи файлов пользователь выполняет различные команды.

Для использования smbclient необходимо набрать в командной строке имя этой команды и имя службы в следующем формате: // СЕРВЕР / СЛУЖБА . Например, если необходимо получить доступ к общему ресурсу GORDON на сервере TANGO, то следует указать имя //TANGO/GORDON . В зависимости от конфигурации сервера может потребоваться ввести пароль. Если введен правильный пароль, то можно вводить различные команды для доступа к файлам, хранящимся на сервере. В таблице 1 перечислены некоторые наиболее важные команды smbclient ; для получения информации о других более экзотических командах обратитесь к man-странице этой утилиты.

Таблица 1. Наиболее важные команды smbclient
Команда Действие
? или help Выводит список всех команд
cd Изменяет рабочую директорию на удаленном сервере
del Удаляет файл
dir или ls Выводит список файлов в текущей (или указанной) директории
exit или quit Завершает сеанс работы
get Передает файл с сервера клиенту
lcd Изменяет рабочую директорию на локальном компьютере
md или mkdir Создает директорию на удаленном сервере
mget Передает несколько файлов с сервера клиенту
more Выводит список удаленных файлов с помощью локальной команды постраничного вывода
mput Передает несколько файлов с клиента на удаленный сервер
put Передает файл с клиента на удаленный сервер
rd или rmdir Удаляет директорию
rename Переименовывает файл на удаленном сервере
rm Удаляет один или несколько файлов на удаленном сервере

По умолчанию для подключения к серверу smbclient использует текущее имя пользователя, однако можно указать имя явно с помощью опции -U . На самом деле, можно использовать несколько опций командной строки, включая опции, позволяющие передавать файлы без входа в интерактивный режим smbclient . Таким образом, smbclient можно использовать в сценариях для выполнения автоматической передачи файлов. За дополнительной информацией обратитесь к man-странице этой утилиты.

Сеанс работы с smbclient выглядит примерно следующим образом:

Листинг 1. Пример сеанса работы с smbclient
$ smbclient //TANGO/GORDON/ Enter gordon"s password: Domain= OS= Server= smb: \> cd mystuff smb: \mystuff\> ls . D 0 Mon May 16 19:20:08 2011 .. D 0 Mon May 16 19:18:12 2011 xv-3.10a-1228.1.src.rpm 3441259 Tue May 18 19:09:26 2010 License.txt 27898 Mon May 16 19:17:15 2011 xorg.conf 1210 Fri Jan 21 04:18:13 2011 51198 blocks of size 2097152. 2666 blocks available smb: \mystuff\> get xorg.conf getting file \mystuff\xorg.conf of size 1210 as xorg.conf (9.4 KiloBytes/sec) (average 9.4 KiloBytes/sec) smb: \mystuff\> exit

Совет. Утилита smbclient является превосходным инструментом отладки. Не смотря на свою простоту, она позволяет получить доступ к сетевому окружению без монтирования ресурсов, что может упрощает поиск и устранение проблем.

Монтирование файловых ресурсов SMB/CIFS

Не смотря на всю свою эффективность, smbclient не позволяет получить такой же прозрачный доступ к серверу, как при работе с Windows-клиентом. Если вам необходим именно такой доступ, то необходимо использовать другие средства, позволяющие монтировать общие ресурсы SMB/CIFS. Это можно сделать с помощью стандартной команды Linux mount или редактируя файл /etc/fstab для автоматического монтирования ресурсов SMB/CIFS при загрузке компьютера.

Временное монтирование общих ресурсов

Файловый ресурс SMB/CIFS можно смонтировать с помощью команды mount , которая также используется для монтирования локальных томов или совместно используемых ресурсов NFS. Можно указать тип файловой системы cifs или в большинстве случаев mount определит необходимость использования того или иного драйвера на основе синтаксиса команды. Кроме того, можно напрямую вызвать вспомогательную программу mount.cifs . По сути, монтирование локальной и удаленной файловой системы отличается лишь типом монтируемого устройства; таким образом, для монтирования ресурса GORDON, расположенного на сервере TANGO, достаточно выполнить от имени пользователя root следующую команду:

# mount //TANGO/GORDON /mnt

На практике такая команда может создать проблему: в качестве имени пользователя она передает на сервер имя root , и если этому пользователю не разрешено подключаться к серверу, то монтирование завершится с ошибкой. Эту проблему можно исправить, используя опцию -o user=имя для передачи имени пользователя на сервер.

# mount -o user=gordon //TANGO/GORDON /mnt Password:

Можно использовать несколько других опций монтирования, передаваемых команде mount с помощью опции -o . Наиболее полезные из них перечислены в таблице 2. За дополнительной информацией об остальных опциях обратитесь man-странице mount.cifs .

Таблица 2. Наиболее важные опции mount.cifs
Опция Действие
user=name or username=name Определяет имя пользователя, передаваемое на сервер.
password=pass Определяет пароль для передачи на сервер. Если пароль не указан, то mount.cifs использует значение переменной окружения PASSWD; если значение PASSWD не задано, то программа запрашивает пароль у пользователя.
credentials=filename Определяет файл, содержащий имя пользователя, пароль и необязательное имя рабочей группы. Каждое значение указывается в отдельной строке, начинающейся с username= , password= и workgroup= , соответственно.
uid=UID Определяет идентификатор (ID) пользователя, который будет являться владельцем файлов смонтированного ресурса.
gid=GID Аналогична опции uid= UID , но применяется к идентификаторам групп (GID), а не к идентификаторам пользователей (UID).
file_mode=mode Устанавливает режим файлов (разрешения) в числовой форме, который будет назначен файлам на сервере.
dir_mode=mode Аналогична опции file_mode=mode , но применяется не к файлам, а к директориям.
guest Предотвращает запросы на ввод пароля. Обычно эта опция работает только в том случае, если для ресурса поддерживается гостевой доступ.
hard Если сервер становится недоступен, то процессы, пытающиеся получить доступ к расположенным на нем файлам, остаются в зависшем состоянии до тех пор, пока доступ к серверу не будет возобновлен.
soft Если сервер становится недоступен, то процессы, пытающиеся получить доступ к расположенным на нем файлам, получают сообщения об ошибках. Это действие используется по умолчанию.

Параметры uid , gid , file_mode и dir_mode обычно не являются обязательными при подключении к серверу с поддержкой расширений UNIX, реализованных в CIFS. Тем не менее, эти параметры можно использовать для переопределения значений, установленных на сервере. Также отметим, что все эти параметры влияют на то, как файлы видны клиенту ; они не влияют на разрешения и права владения файлами на сервере.

После того, как общий ресурс SMB/CIFS смонтирован, можно получить к нему доступ точно так же, как и к локальному диску или тому NFS. Можно копировать и удалять файлы командами cp и rm , редактировать их в текстовых редакторах или других программах и т. д. Однако помните о том, что если сервер не поддерживает определенные возможности, то вы не сможете их использовать. Например, невозможно изменить режим файла с помощью chmod , если сервер не поддерживает расширения UNIX (частным исключением в случае с chmod является возможность изменения разрешений на запись – эти разрешения инверсно сопоставлены биту "только чтение" протокола SMB).

Когда работа с общим ресурсом закончена, его можно размонтировать с помощью команды umount , как обычную локальную файловую систему:

# umount /mnt
Монтирование файловых ресурсов с помощью SMB

Ядра Linux до версии 2.6.37 содержали отдельные драйверы SMB и CIFS и позволяли смонтировать общий ресурс с использованием оригинальных протоколов SMB; для этого нужно было либо указать в качестве типа файловой системы smbfs , либо использовать команду smbmount . При этом все работало почти так же, как и при использовании типа файловой системы cifs или команды mount.cifs , хотя имелись некоторые отличия в деталях. Использование протокола SMB делало невозможным использование функций, присущих только CIFS, например, расширений UNIX.

Раньше иногда имело смысл использовать SMB; например, можно было монтировать файловые ресурсы очень старых компьютеров под управлением Windows 9x/Me, используя драйвер Linux smbfs , но не используя cifs . Сегодня такие ситуации встречаются очень редко, поскольку в современной реализации cifs была устранена бо льшая часть его когда-то существовавших ограничений. Тем не менее, если вы столкнулись с подобной проблемой, то попробуйте инсталлировать ядро Linux с версией до 2.6.37 и проверить, поможет ли драйвер smbfs решить ее.

Постоянное монтирование общих ресурсов

Если необходимо смонтировать файловый ресурс SMB/CIFS на постоянной основе, то для этого нужно добавить запись в файл /etc/fstab. Эти изменения похожи на все другие изменения файла /etc/fstab, которые возникают в процессе работы команды mount . Однако в есть одна опция, которая заслуживает особого внимания в данной ситуации, а именно credentials . Поскольку большинство SMB/CIFS серверов используют для аутентификации пароли, то для монтирования файловых ресурсов с помощью /etc/fstab необходимо хранить постоянный пароль. Хотя пароль можно хранить непосредственно в файле /etc/fstab (используя опцию password), делать этого не рекомендуется – поскольку файл /etc/fstab должен быть доступен для чтения всем пользователям, то любой пользователь может также увидеть и пароль. Использование опции credentials позволяет хранить пароли в файле, доступном для чтения только пользователю root, что повышает их защищенность.

Рабочая запись в файле /etc/password для общего ресурса SMB/CIFS может выглядеть следующим образом:

//TANGO/BACKUPS /saveit cifs credentials=/etc/samba/creds.txt 0 0

Связанные с ней учетные данные могут выглядеть так:

username=buuser password=Iw2bUmS}

Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: