12. Передача файлов по сети

В этой главе рассмотрены возможности передачи и совместного использования файлов компьютерами одной сети. Мы начнем со способов копирования, которые отличаются от утилит scp и sftp, уже известных вам. Затем мы кратко рассмотрим подлинное совместное применение файлов, при котором какой-либо каталог компьютера включается в число каталогов другого компьютера.

Эта глава описывает некоторые альтернативные способы передачи файлов, поскольку не все задачи переноса файлов одинаковы. Иногда необходимо обеспечить быстрый временный доступ к компьютерам, о которых вы знаете совсем немного, или, например, эффективно поддерживать копии больших структур каталогов. Временами требуется более продолжительный доступ.


12.1. Быстрое копирование

Допустим, вы желаете скопировать файл (или файлы) с вашего компьютера на другой компьютер вашей сети и при этом вам не обязательно возвращать его обратно или предпринимать какие-либо особые действия. Вы просто хотите выполнить это быстро. Существует удобный способ осуществить желаемое с помощью модуля Python. Просто перейдите в каталог с необходимыми файлами и запустите такую команду:

$ python — m SimpleHTTPServer

При этом запускается базовый веб-сервер, который делает данный каталог доступным для любого браузера в сети. Обычно он работает с портом 8000, поэтому, если адрес компьютера, на котором вы запустили эту команду, равен 10.1.2.4, наберите адрес http://10.1.2.4:8000 на компьютере назначения, и у вас появится возможность забрать необходимые файлы.


12.2. Команда rsync

Если вы желаете переместить всю структуру каталогов, это можно выполнить с помощью команды scp — r или, если необходима дополнительная функциональность, с помощью «конвейерной» команды tar:

$ tar cBvf—directory | ssh remote_host tar xBvpf -

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

Если вам необходимо выполнять подобные задачи регулярно (в особенности если вы планируете автоматизировать этот процесс), используйте выделенную систему синхронизации. В Linux команда rsync является стандартным синхронизатором, который обладает хорошей производительностью и многими полезными функциями для выполнения передачи. Мы рассмотрим несколько основных режимов работы команды rsync, а также отметим их особенности.


12.2.1. Основы команды rsync

Чтобы команда rsync работала между двумя хостами, она должна быть установлена как на хосте-источнике, так и на хосте-назначении и у вас должен быть способ доступа к одному компьютеру с другого компьютера. Проще всего передавать файлы с использованием удаленной учетной записи оболочки, и мы будем предполагать, что вам необходимо передавать файлы с помощью SSH-доступа. Тем не менее помните также о том, что команда rsync может принести пользу даже при копировании файлов и каталогов в пределах одного компьютера, например из одной файловой системы в другую.

На первый взгляд команда rsync незначительно отличается от команды scp. На самом деле команду rsync можно запускать с теми же аргументами. Например, чтобы скопировать группу файлов в домашний каталог вашего хоста, введите такую команду:

$ rsync file1 file2host:

В любой современной системе команда rsync подразумевает, что вы используете протокол SSH для соединения с удаленным хостом.

Опасайтесь такого сообщения об ошибке:

rsync not found

rsync: connection unexpectedly closed (0 bytes read so far)

rsync error: error in rsync protocol data stream (code 12) at io.c(165)

Оно говорит о том, что удаленная оболочка не может отыскать команду rsync в своей системе. Если команды rsync нет в удаленном пути, но в системе она есть, используйте команду — rsync-path=path, чтобы вручную указать ее местоположение.

Если на удаленном хосте у вас другое имя пользователя, добавьте к имени хоста параметр user@, в котором user является вашим именем пользователя для этого хоста:

$ rsync file1 file2user@host:

Если вы не укажете дополнительные параметры, команда rsync скопирует только файлы. В действительности, если вы укажете только те параметры, которые были описаны к настоящему моменту, и попытаетесь указать параметр dir как аргумент, вы получите такое сообщение:

skipping directory dir

Чтобы передать всю иерархию каталога — со всеми символическими ссылками, правами доступа, режимами файлов и устройствами, — используйте параметр — a. Более того, если вы желаете выполнить копирование в какое-либо место, не являющееся вашим домашним каталогом на удаленном хосте, укажите это назначение после названия удаленного хоста:

$ rsync — a dir host: destination_dir

Копирование каталогов может оказаться довольно хитрым занятием, поэтому, если вы не вполне уверены в том, что в итоге произойдет после переноса файлов, используйте комбинацию параметров — nv. Параметр — n дает команде rsync указание о работе в режиме «пробного прогона», то есть выполнить проверку, не копируя в действительности никаких файлов. Параметр — v означает подробный режим, при котором отображаются детали передачи всех вовлеченных файлов:

$ rsync — nva dir host: destination_dir

Отчет будет выглядеть так:

building file list… done

ml/nftrans/nftrans.html

[more files]

wrote 2183 bytes read 24 bytes 401.27 bytes/sec


12.2.2. Создание точной копии структуры каталога

По умолчанию команда rsync копирует файлы и каталоги, не принимая во внимание уже имеющееся содержимое каталога назначения. Например, если вы передали каталог d, который содержит файлы a и b, компьютеру, на котором уже есть файл d/c, то после выполнения команды rsync этот компьютер будет содержать файлы d/a, d/b и d/c.

Чтобы создать точную копию каталога источника, необходимо удалить те файлы в каталоге назначения, которых нет в исходном каталоге (вроде файла d/c в нашем примере). Чтобы выполнить это, используйте параметр — delete:

$ rsync — a — delete dir host: destination_dir


Внимание

Это может оказаться опасным, так как обычно следует проверить каталог назначения на наличие файлов, которые вы можете ненароком удалить. Помните: если вы не уверены в результатах переноса, используйте параметр — n, чтобы выполнить пробный прогон и точно узнать о том, когда команде rsync потребуется удалить файлы.


12.2.3. Использование завершающей косой черты

Будьте особо внимательны при указании кого-либо каталога в качестве источника для команды rsync. Рассмотрим основную команду, с которой мы до сих пор работали:

$ rsync — a dir host: dest_dir

По ее выполнении у вас на хосте будет каталог dir внутри каталога dest_dir. На рис. 12.1 приведен пример того, как команда rsync обычно обрабатывает каталог с файлами a и b. Однако при добавлении косой черты (/) ее поведение радикально меняется:

$ rsync — a dir/ host: dest_dir

В этом случае команда rsync копирует все, что находится внутри каталога dir, в каталог dest_dir хоста, не создавая в действительности каталог dir на хосте назначения. Следовательно, можно рассматривать передачу каталога dir/ как операцию, подобную операции cp dir/* dest_dir в локальной файловой системе.

Допустим, что у вас есть каталог dir, который содержит файлы a и b (dir/a и dir/b). Вы запускаете версию команды с косой чертой, чтобы передать их в каталог dest_dir на хосте:

$ rsync — a dir/ host: dest_dir

По окончании передачи каталог dest_dir будет содержать копии файлов a и b, но не каталога dir. Если же вы опустите конечную косую черту после dir, в каталоге dest_dir окажется копия каталога dir с файлами a и b внутри него. Итак, в результате передачи на удаленном хосте появились бы файлы и каталоги с именами dest_dir/dir/a и dest_dir/dir/b. На рис. 12.2 показано, как команда rsync обрабатывает структуру каталога, приведенную на рис. 12.1, если используется завершающая косая черта.

При передаче файлов и каталогов на удаленный хост случайное добавление символа / в конце пути вызвало бы лишь некоторое неудобство; вам пришлось бы перейти на удаленный хост, добавить каталог dir и поместить в него все переданные файлы. К сожалению, следует быть осторожными, чтобы избежать катастрофы, если соединить завершающую косую черту с параметром — delete, поскольку так можно легко удалить не относящиеся к делу файлы.

Рис. 12.1. Нормальное копирование с помощью команды rsync

Рис. 12.2. Результат использования завершающего слеша в команде rsync


примечание

Будьте осторожны при использовании в оболочке функции автоматического завершения имени файла. Библиотека readline графического интерфейса пользователя и многие другие функции завершения преобразуют завершающие слеши в полные названия каталогов.


12.2.4. Исключение файлов и каталогов

Одной из важнейших функций команды rsync является возможность исключения файлов и каталогов из операции переноса. Допустим, что вы желаете переместить локальный каталог src на хост host, исключив при этом все, что называется. git. Это можно выполнить так:

$ rsync — a — exclude=.git src host:

Обратите внимание на то, что эта команда исключает все файлы и каталоги с именем. git, поскольку параметр — exclude учитывает шаблон, а не абсолютное имя файла. Чтобы исключить конкретный элемент, укажите абсолютный путь, который начинается с символа /, как показано здесь:

$ rsync — a — exclude=/src/.git src host:


примечание

Первый символ / в записи /src/.git данной команды является не корневым каталогом системы, а базовым каталогом для переноса.

Приведу еще несколько советов по использованию шаблонов исключения.

• Можно использовать столько параметров — exclude, сколько необходимо.

• Если вы применяете одни и те же шаблоны регулярно, поместите их в обычный текстовый файл (по одному шаблону в строке) и используйте параметр — exclude-from=file.

• Чтобы исключить каталоги с именем item, но включить расположенные в них файлы, применяйте завершающий слеш: —exclude=item/.

• Шаблон исключения основан на полном имени файла или каталога и может содержать простые джокерные символы. Например, шаблону t*s соответствует имя this, но не имя ethers.

• Если вы исключили каталог или файл, а потом обнаружили, что ваш шаблон является слишком строгим, используйте параметр — include, чтобы специальным образом включить еще один файл или каталог.


12.2.5. Целостность переноса, меры предосторожности и подробные режимы

Для ускорения работы команда rsync выполняет быструю проверку того, нет ли в пункте назначения каких-либо файлов источника. Эта проверка использует комбинацию из размера файла и даты его последнего изменения. Когда вы в первый раз передаете полную иерархию каталогов на удаленный хост, команда rsync видит, что в пункте назначения нет ни одного из передаваемых файлов, поэтому она переносит все. Убедиться в этом позволит вам команда rsync — n.

После первого выполнения команды rsync запустите ее еще раз в таком варианте: rsync — v. Теперь вы должны увидеть, что список файлов для переноса пуст, поскольку данный набор файлов присутствует на обоих компьютерах и с теми же датами изменения.

Когда файлы на стороне источника не идентичны файлам на стороне назначения, команда rsync переносит файлы источника и перезаписывает все существующие файлы на удаленной стороне. Однако такое поведение может оказаться неадекватным, поскольку необходимо дополнительное подтверждение того, что эти файлы действительно такие же, прежде чем пропускать их при переносе.

Вам могут также понадобиться некоторые дополнительные меры предосторожности. Вот несколько параметров, которые бывают удобны.

• —checksum (сокращенно — c) — вычисляет контрольные суммы (обычно это уникальные сигнатуры) файлов, чтобы убедиться в их одинаковости. Для этого во время переноса потребуются дополнительные ресурсы ввода/вывода и процессора, но, если вы работаете с важными данными или ваши файлы часто обладают одинаковым размером, этот параметр обязателен.

• —ignore-existing — не затирает файлы, которые уже присутствуют на целевой стороне.

• —backup (сокращенно — b) — не затирает файлы, которые уже есть на целевой стороне, а переименовывает их, добавляя к именам суффикс ~ до начала передачи новых файлов.

• —suffix=s — изменяет суффикс, использованный в параметре — backup, c ~ на s.

• —update (сокращенно — u) — не затирает на целевой стороне никаких файлов, которые обладают более поздней датой изменения по сравнению с соответствующими файлами источника.

Если не указывать специальные параметры, команда rsync работает, не привлекая внимания, и выводит сообщения только в случае возникновения проблем. Тем не менее можно использовать команду rsync — v для подробного режима или rsync — vv, чтобы выводилось еще больше подробностей. Можно указать столько флагов v, сколько пожелаете, но двух, вероятно, будет более чем достаточно.

Чтобы получить всеобъемлющий отчет после переноса файлов, используйте команду rsync — stats.


12.2.6. Сжатие

Многим пользователям нравится применять параметр — z в сочетании с параметром — a, чтобы выполнить сжатие данных перед передачей:

$ rsync — az dir host: destination_dir

Сжатие может улучшить производительность в некоторых ситуациях, например при выгрузке большого объема данных через медленное соединение (такое как поток, противоположный основному трафику, или многие DSL-соединения) или когда время ожидания между двумя хостами велико. Тем не менее в быстрых локальных сетях передача между двумя компьютерами может сдерживаться временем, которое процессор затрачивает на сжатие и распаковку данных, поэтому несжатая передача может оказаться быстрее.


12.2.7. Ограничение ширины полосы пропускания

Очень легко «засорить» интернет-подключение, выгружая на удаленный хост большие объемы данных. Даже если вы не станете использовать (обычно большую) скорость скачивания во время такой передачи, ваше соединение все же станет довольно медленным, если вы позволите команде rsync работать максимально быстро, поскольку исходящие TCP-пакеты, вроде запросов HTTP, будут соперничать с вашими передачами за ширину полосы.

Чтобы разобраться с этим, применяйте параметр — bwlimit, который даст вашей выгрузке больше пространства для маневра. Чтобы, например, ограничить ширину пропускания значением 10 000 Кбит в секунду, следует выполнить такую команду:

$ rsync — bwlimit=10000 — a dir host: destination_dir


12.2.8. Перенос файлов на ваш компьютер

Команда rsync предназначена не только для копирования файлов с локального компьютера на удаленный хост. Можно также переносить файлы с удаленного компьютера на локальный хост, указав удаленный хост и путь к удаленному источнику в качестве первого аргумента в командной строке. Следовательно, чтобы перенести каталог src_dir удаленного хоста в каталог dest_dir локального хоста, запустите следующую команду:

$ rsync — a host: src_dir dest_dir


примечание

Как отмечалось выше, можно использовать команду rsync для дублирования каталогов на локальном компьютере, если полностью опустить параметр host:.


12.2.9. Дальнейшие темы, относящиеся к команде rsync

Когда вам необходимо скопировать большое количество файлов, команда rsync должна прийти на ум одной из первых. Запуск этой команды в пакетном режиме чрезвычайно удобен, вы обнаружите множество параметров, позволяющих использовать вспомогательные файлы, связанные с параметрами команды, отчетами и состоянием передачи. В частности, файлы состояния позволяют ускорить продолжительные передачи и легко возобновить их в случае прерывания.

Команда rsync окажется также полезной для создания резервных копий. Можно, например, подключить к Linux интернет-хранилище вроде S3 от компании Amazon, а затем использовать команду rsync — delete, чтобы периодически синхронизировать файлы с этим хранилищем, организовав тем самым весьма эффективную систему резервного копирования.

Существует намного больше параметров командной строки, чем упомянуто здесь. Чтобы получить краткий обзор, запустите команду rsync — help. Более подробную информацию можно найти на странице руководства rsync(1), а также на домашней странице, посвященной команде rsync (http://rsync.samba.org/).


12.3. Введение в совместное использование файлов

Ваш компьютер с Linux, вероятно, не один в вашей сети, а когда в сети несколько компьютеров, практически всегда возникают поводы для совместного использования их файлов. Оставшаяся часть главы будет посвящена главным образом совместному использованию файлов на компьютерах с Windows и Mac OS X, поскольку будет интересно увидеть, каким образом Linux приспосабливается к совершенно другому окружению. Для совместного применения файлов на компьютерах с Linux или для доступа к файлам на устройстве сетевого хранения данных (NAS, Network Area Storage) нужно знать об использовании сетевой файловой системы (NFS, Network File System) в качестве клиента.


12.4. Совместное использование файлов с помощью пакета Samba

Если у вас есть компьютеры с Windows, то, вероятно, потребуется разрешить доступ к файлам и принтерам системы Linux с таких компьютеров, применяя стандартный сетевой протокол Windows — SMB (Server Message Block, блок сообщений сервера). Совместное использование файлов с помощью протокола SMB поддерживается также в Mac OS X.

Стандартный пакет ПО для совместного использования файлов в Linux называется Samba. Он не только позволяет Windows-компьютерам вашей сети получать доступ к системе Linux, но также работает в обратном направлении: можно получать доступ к файлам на серверах Windows c Linux-компьютера с помощью клиента Samba.

Чтобы настроить сервер Samba, выполните следующие действия.

1. Создайте файл smb.conf.

2. Добавьте в него разделы о совместном использовании файлов.

3. Добавьте в него разделы о совместном использовании принтеров.

4. Запустите демоны Samba: nmbd и smbd.

При установке сервера Samba из пакета дистрибутива ваша система должна выполнить перечисленные выше шаги, применив для сервера некоторые разумные параметры по умолчанию. Тем не менее ей, по-видимому, не удастся определить, какие именно ресурсы вашего Linux-компьютера вы предоставляете клиентам.


примечание

Обсуждение сервера Samba в этой главе краткое и сводится к тому, как добиться того, чтобы Windows-компьютеры внутри одной подсети видели автономный Linux-компьютер с помощью браузера Windows Network Places. Конфигурировать сервер Samba можно бесчисленным количеством способов, поскольку существует множество возможностей контроля доступа и разная топология сети. Чтобы узнать подробности о конфигурировании широкомасштабного сервера, обратитесь к книге Using Samba («Применение Samba», 3-е издание, O’Reilly, 2007), которая является намного более полным руководством, а также посетите сайт проекта Samba по адресу http://www.samba.org/.


12.4.1. Конфигурирование сервера Samba

Главным файлом конфигурации Samba является файл smb.conf, который в большинстве версий ОС помещается внутри каталога etc, например в каталоге /etc/samba. Тем не менее вам может потребоваться поискать его, поскольку он может также располагаться внутри каталога lib, например в каталоге /usr/local/samba/lib.

Формат файла smb.conf подобен стилю XDG, который вы уже встречали всюду (например, в конфигурации службы systemd): файл разбит на несколько секций, отмеченных с помощью квадратных скобок (например, так: [global] и [printers]). Секция [global] содержит общие параметры, которые применяются к серверу в целом и ко всем совместно используемым ресурсам. Эти параметры относятся главным образом к сетевой конфигурации и к контролю доступа. Приведенный ниже пример секции [global] демонстрирует, как настроить имя сервера, описание и рабочую группу:

[global]

# server name

netbios name = name

# server description

server string = My server via Samba

# workgroup

workgroup = MYNETWORK

Эти параметры означают следующее:

• netbios name — имя сервера. Если опустить этот параметр, сервер Samba использует имя хоста Unix;

• server string — краткое описание сервера. По умолчанию это номер версии пакета Samba;

• workgroup — имя рабочей группы SMB. Если вы находитесь в домене Windows, укажите для этого параметра имя вашего домена.


12.4.2. Контроль доступа к серверу

Можно добавить в файл smb.conf параметры, позволяющие ограничить круг компьютеров и пользователей, которые имеют доступ к серверу Samba. Следующий перечень содержит многие из параметров, которые можно указать в секции [global], а также в секциях, контролирующих отдельные ресурсы (как объяснено далее в этой главе).

• interfaces. Настройте этот параметр, чтобы сервер Samba прослушивал только указанные сети или интерфейсы. Например:

interfaces = 10.23.2.0/255.255.255.0

interfaces = eth0

• bind interfaces only. Установите значение yes, если используете параметр interfaces, чтобы ограничить доступ к компьютерам только этими интерфейсами.

• valid users. Укажите только тех пользователей, которым разрешается доступ. Например:

valid users = jruser, bill

• guest ok. Установите для этого параметра значение true, чтобы сделать совместно используемые ресурсы доступными для анонимных пользователей сети.

• guest only. Установите для этого параметра значение true, чтобы разрешить только анонимный доступ.

• browseable. Установите этот параметр, чтобы совместно используемые ресурсы можно было видеть с помощью сетевых браузеров. Если для этого параметра установить значение no для всех совместных ресурсов, то у вас по-прежнему останется возможность доступа к ним на сервере Samba, но для этого вам потребуется точно знать их имена.


12.4.3. Пароли

Следует позволять доступ к серверу Samba только с использованием аутентификации с помощью пароля. К сожалению, базовая система паролей в Unix отличается от такой системы в Windows, поэтому, если вы не укажете сетевые пароли в виде простого текста или пароли аутентификации на сервере Windows, вам придется устанавливать альтернативную систему паролей. Данный раздел рассказывает о том, как настроить такую систему с помощью серверного приложения Trivial Database (TDB), которое подходит для небольших сетей.

Для начала используйте такие записи в секции [global] файла smb.conf, чтобы определить характеристики базы данных паролей Samba:

# use the tdb for Samba to enable encrypted passwords

security = user

passdb backend = tdbsam

obey pam restrictions = yes

smb passwd file = /etc/samba/passwd_smb

Они позволяют работать с этой базой данных с помощью команды smbpasswd. Параметр obey pam restrictions дает гарантию того, что каждый пользователь, который будет менять свой пароль с помощью команды smbpasswd, должен будет соблюсти все правила, предусмотренные модулем PAM (Pluggable Authentication Module, подключаемый модуль аутентификации) при обычной смене пароля. Для параметра passdb backend можно добавить после двоеточия необязательное имя пути к файлу TDB, например так: tdbsam:/etc/samba/private/passwd.tdb.


примечание

Если у вас есть доступ к домену Windows, можно установить параметр security = domain, чтобы сервер Samba использовал доменные имена пользователей и не нуждался в базе данных паролей. Однако, чтобы пользователи домена имели доступ к компьютеру с сервером Samba, у каждого пользователя домена должна быть локальная учетная запись с таким же именем пользователя и на компьютере с сервером Samba.


Добавление и удаление пользователей

Первое, что вам потребуется для предоставления доступа Windows-пользователю к вашему серверу Samba, — добавить этого пользователя в базу данных паролей с помощью команды smbpasswd — a:

# smbpasswd — a username

Параметр username в команде smbpasswd должен быть действительным именем пользователя в вашей системе Linux.

Подобно обычной системной команде passwd, команда smbpasswd дважды запрашивает у вас ввод нового пароля пользователя. Если пароль проходит все необходимые проверки надежности, команда smbpasswd подтверждает создание нового пользователя.

Чтобы удалить пользователя, используйте параметр — x в команде smbpasswd:

# smbpasswd — x username

Чтобы временно деактивизировать пользователя, применяйте параметр — d; параметр — e заново активизирует такого пользователя:

# smbpasswd — d username

# smbpasswd — e username


Изменение паролей

Можно изменить пароль Samba, если с правами пользователя superuser запустить команду smbpasswd без каких-либо параметров или ключевых слов, кроме имени пользователя:

# smbpasswd username

Однако, если сервер Samba запущен, любой пользователь может изменить собственный пароль Samba, введя в командной строке команду smbpasswd.

Наконец, следует предупредить вас об одном месте в конфигурации, которого следует остерегаться. Если вы увидите в файле smb.conf строку, подобную приведенной, будьте осторожны:

unix password sync = yes

Эта строка приводит к тому, что команда smbpasswd изменяет обычный пароль пользователя вместе с паролем Samba. Результат может внести путаницу, особенно тогда, когда пользователь меняет свой пароль Samba на что-либо, не являющееся паролем Linux, а потом обнаруживает, что не может войти в систему. В некоторых версиях ОС этот параметр по умолчанию установлен в пакете сервера Samba!


12.4.4. Запуск сервера

Вам может потребоваться запустить сервер, если вы не устанавливали сервер Samba из пакета дистрибутива. Чтобы это выполнить, запустите команды nmbd и smbd со следующими аргументами (здесь параметр smb_config_file определяет полный путь для вашего файла smb.conf):

# nmbd — D -s smb_config_file

# smbd — D -s smb_config_file

Демон nmbd является сервером имен NetBIOS, а демон smbd выполняет реальную обработку запросов на совместное использование. Параметр — D определяет режим демона. Если вы измените файл smb.conf во время работы демона smbd, вы сможете уведомить демон об изменениях с помощью сигнала HUP или использовать команду перезапуска службы (такую как systemctl или initctl).


12.4.5. Диагностические файлы и журналы

Если что-либо происходит не так при запуске одного из серверов Samba, в командной строке появляется сообщение об ошибке. В то же время диагностические сообщения времени исполнения записываются в файлы журналов log.nmbd и log.smbd, которые обычно находятся в подкаталоге /var/log, таком как /var/log/samba. Здесь вы найдете также другие файлы журналов, например отдельные журналы для каждого клиента.


12.4.6. Конфигурирование совместного использования файлов

Чтобы экспортировать каталог клиентам SMB (то есть чтобы совместно с клиентом использовать какой-либо каталог), добавьте в файл smb.conf секцию, подобную приведенной ниже (здесь параметр label задает название для совместно используемого ресурса, а параметр path — полный путь к этому каталогу):

[label]

path = path

comment = share description

guest ok = no

writable = yes

printable = no

При совместном использовании каталогов полезны следующие параметры.

• guest ok. Разрешает гостевой доступ к совместному ресурсу. Синонимом является параметр public.

• writable. Значение yes или true делает ресурс доступным для чтения и записи. Не разрешайте гостевой доступ к совместному ресурсу, позволяющему чтение и запись.

• printable. Определяет выводимый на печать совместный ресурс. Этот параметр должен быть равен no или false для совместно используемого каталога.

• veto files. Предотвращает экспорт всех файлов, которые соответствуют указанным шаблонам. Каждый шаблон следует поместить между слешами (чтобы он выглядел как /pattern/). Следующий пример запрещает экспорт объектных файлов, а также любых файлов или каталогов с именем bin:

veto files = /*.o/bin/


12.4.7. Домашние каталоги

Можно добавить в файл smb.conf секцию [homes], если вы желаете экспортировать домашние каталоги пользователям. Такая секция должна выглядеть следующим образом:

[homes]

comment = home directories

browseable = no

writable = yes

По умолчанию сервер Samba считывает из файла /etc/passwd запись, которая относится к вошедшему в систему пользователю, чтобы определить его домашний каталог для секции [homes]. Однако, если вы не хотите, чтобы сервер Samba так поступал (то есть вам необходимо хранить домашние каталоги Windows в месте, которое отличается от обычных домашних каталогов Linux), можно использовать подстановку %S в параметре path. Вот как, например, можно переключить для пользователя каталог [homes] на каталог /u/user:

path = /u/%S

Сервер Samba подставит текущее имя пользователя вместо %S.


12.4.8. Совместное использование принтеров

Можно экспортировать все принтеры клиентам Windows, добавив секцию [printers] в файл smb.conf. Вот как выглядит эта секция, если вы применяете стандартную для Unix систему печати CUPS:

[printers]

comment = Printers

browseable = yes

printing = CUPS

path = cups

printable = yes

writable = no

Чтобы использовать параметр printing = CUPS, ваша версия сервера Samba должна быть настроена на применение библиотеки CUPS и связана с ней.


примечание

В зависимости от конфигурации вам может также потребоваться разрешить гостевой доступ к принтерам с помощью параметра guest ok = yes, вместо того чтобы предоставлять пароль или учетную запись каждому, кому необходим доступ к принтерам. Например, легко ограничить доступ к принтерам в пределах одной подсети, использовав правила брандмауэра.


12.4.9. Использование клиента Samba

Клиент Samba — команда smbclient — может осуществлять вывод и на совместно используемые ресурсы Windows или пользоваться ими. Эта команда удобна, когда вы оказываетесь в среде, в которой необходимо взаимодействовать с серверами Windows, не предлагающими дружественные к Unix средства коммуникации.

Чтобы начать работу с командой smbclient, применяйте параметр — L для получения списка совместно используемых ресурсов на удаленном сервере с именем SERVER:

$ smbclient — L -U username SERVER

Не обязательно указывать параметр — U username, если ваше имя пользователя в Linux совпадает с именем пользователя на сервере SERVER.

После запуска команды smbclient она запросит у вас пароль. Чтобы попытаться получить гостевой доступ к ресурсу, нажмите клавишу Enter; в противном случае введите ваш пароль для сервера SERVER. При успешном подключении вы должны получить перечень совместно используемых ресурсов, подобный приведенному:

Sharename Type Comment

——- — ——

Software Disk Software distribution

Scratch Disk Scratch space

IPC$ IPC IPC Service

ADMIN$ IPC IPC Service

Printer1 Printer Printer in room 231A

Printer2 Printer Printer in basement

Поле Type поможет вам определить назначение каждого из ресурсов. Обращайте внимание только на ресурсы с типами Disk и Printer (ресурсы IPC предназначены для удаленного управления). В данном списке есть два дисковых ресурса и два принтера. Используйте имя из столбца Sharename, чтобы получить доступ к каждому ресурсу.


12.4.10. Доступ к файлам в качестве клиента

Если вам необходим лишь нерегулярный доступ к файлам на совместно используемом дисковом ресурсе, используйте следующую команду. Опять-таки можно опустить параметр —U username, если ваше имя пользователя в Linux совпадает с именем пользователя на сервере.

$ smbclient — U username '\\SERVER\sharename'

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

smb: \>

В таком режиме передачи файлов команда smbclient подобна команде ftp Unix, и вы можете запускать такие команды:

• get file — копирует файл file с удаленного сервера в текущий локальный каталог;

• put file — копирует файл file с локального компьютера на удаленный сервер;

• cd dir — переходит в каталог dir на удаленном сервере;

• lcd localdir — переходит в каталог localdir на локальном компьютере;

• pwd — выводит текущий каталог на удаленном сервере, включая имя сервера и названия совместно используемых ресурсов;

•!command — запускает команду command на локальном хосте. Очень удобны следующие две команды:!pwd и!ls, которые позволяют определить статус каталога и файла на локальной стороне;

• help — показывает полный список команд.


Использование файловой системы CIFS

Если вам необходим регулярный и частый доступ к файлам на сервере Windows, можно напрямую подключить совместно используемый ресурс с помощью монтирования. Синтаксис команды приведен ниже. Обратите внимание на применение формата SERVER: sharename вместо обычного \\SERVER\sharename.

# mount — t cifs SERVER: sharename mountpoint — o user=username,pass=password

Чтобы использовать команду mount подобным образом, у вас на сервере Samba должны быть доступны утилиты CIFS (Common Internet File System, общая межсетевая файловая система). В большинстве дистрибутивов они предлагаются в виде отдельного пакета.


12.5. Клиенты NFS

Стандартной системой для совместного использования файлов в системах Unix является NFS (Network File System, сетевая файловая система); существует много разных версий NFS для различных вариантов действий. Можно применять систему NFS в протоколах TCP и UDP с большим количеством способов аутентификации и шифрования. Поскольку параметров так много, рассмотрение системы NFS может вылиться в большую тему, поэтому мы затронем лишь основы клиентов NFS.

Чтобы смонтировать удаленный каталог на сервере с помощью системы NFS, используйте такой же базовый синтаксис, как и для монтирования каталога CIFS:

# mount — t nfs server: directory mountpoint

Технически параметр — t nfs не нужен, так как команда mount определит его сама, но вам может потребоваться изучение параметров, описанных на странице руководства nfs(5). Вы найдете несколько различных вариантов для настройки безопасности с помощью параметра sec. Многие администраторы небольших закрытых сетей используют контроль доступа на основе хоста. Однако более сложные методы, такие как аутентификация на основе технологии Kerberos, требуют дополнительной конфигурации других частей вашей системы.

Когда вы обнаружите, что используете файловые системы в сети довольно интенсивно, настройте автоматическое монтирование, чтобы ваша система монтировала файловые системы лишь тогда, когда вы действительно пытаетесь применять их. Это позволит предотвратить проблемы с зависимостями при загрузке системы. Традиционный инструмент для автоматического монтирования называется automount, его новая версия — amd, но сейчас оба они вытесняются модулем с типом automount в команде systemd.


12.6. Добавочные параметры и ограничения сетевой файловой системы

Настройка сервера NFS для совместного использования файлов другими Linux-компьютерами является более сложной, чем использование простого клиента NFS. Необходимо запускать серверные демоны (mountd и nfsd) и настраивать файл /etc/exports, чтобы отразить в нем каталоги, которые применяются совместно. Тем не менее мы не будем рассматривать серверы NFS, в основном потому, что создать совместно используемое сетевое хранилище зачастую намного удобнее, если приобрести устройство NAS, которое справится с задачей за вас. Многие из таких устройств основаны на Linux, поэтому в них изначально присутствует поддержка сервера NFS. Производители устройств NAS делают их еще более полезными, предоставляя собственные инструменты администрирования, которые избавляют от таких утомительных задач, как настройка конфигурации RAID или облачного резервного копирования.

Раз речь зашла об облачном резервном копировании, следует сказать о другом варианте сетевой файловой службы — облачном хранилище. Оно может быть удобно, когда вам необходимо дополнительное пространство для автоматических резервных копий и вас не сильно огорчит снижение быстродействия. Такое хранилище особенно полезно, если этот сервис не требуется вам в течение продолжительного времени или слишком часто. Обычно можно смонтировать и интернет-хранилище, во многом подобное системе NFS.

Хотя система NFS и другие варианты совместного использования файлов работают хорошо при нерегулярном применении, не рассчитывайте на отменную производительность. Доступ к большим файлам в режиме «только чтение» должен работать хорошо, например, при передаче аудио или видео, поскольку данные считываются в виде больших предсказуемых фрагментов, для которых не требуется интенсивное взаимодействие между файловым сервером и его клиентом. Если сеть достаточно быстрая, а у клиента достаточно памяти, сервер может поставлять данные, как требуется.

Локальное хранилище намного быстрее для задач, вовлекающих множество маленьких файлов, например при компиляции пакетов ПО или при запуске среды рабочего стола. Картина усложняется для большой сети, в которой множество пользователей имеют доступ ко многим различным компьютерам, поскольку в этом случае необходим компромисс между удобством, производительностью и простотой администрирования.

Загрузка...