Введение

Эта статья является логическим продолжением следующих статей:

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

Несколько допущений в модели сети:

  1. На Windows-машине, на диске C:\ установлена только операционная система и на нём же сохраняется профиль пользователя. На диске D:\ располагаются остальные данные: видео, музыка, игры и прочее.
  2. На Linux-машинах, системные каталоги отделены от пользовательских данных - т.е. каталоги: /home , /data/video , /data/music , /data/downloads , /data/tmp представляют собой отдельные разделы или диски большого объёма, примонтированные к корневой файловой системе. Можно даже сделать /data отдельным разделом, а в нём уже разместить физические каталоги video, music, tmp.
  3. Домашняя сеть работает внутри квартиры или домохозяйства и доступ к ресурсам по логинам и паролям не делается. Для случая, когда машины работают в локальной сети многоквартирного дома или домовой сети, следует применять доступ к ресурсам по логину\паролю - этот ариант не описывается в данной статье.

Схема домашней сети:

Схема модели домашней сети

План работ

Сперва настроим серверную часть.
Компьютер с Windows (comp4).

  • Открываем доступ "только на чтение" "для всех" в каталог видеоколлекции d:\Video
  • Открываем доступ "только на чтение" "для всех" в каталог музыкальной коллекции d:\Music
  • Открываем доступ на чтение и запись "для всех" в каталог d:\tmp

Компьютер с Linux (comp1).

  • Установка samba
  • Открываем доступ "только на чтение" "для всех" в каталог видеоколлекции /data/video
  • Открываем доступ "только на чтение" "для всех" в каталог музыкальной коллекции /data/music
  • Открываем доступ на "чтение" "для всех" в каталог торрент-загрузок /data/downloads
  • Открываем доступ на "чтение и запись" "для всех" в каталог /data/tmp

Компьютер с Linux (comp2).

  • Установка samba
  • Открываем доступ "только на чтение" "для всех" в каталог видеоколлекции /data/video
  • Открываем доступ "только на чтение" "для всех" в каталог музыкальной коллекции /data/music
  • Открываем доступ на "чтение и запись" "для всех" в каталог /data/tmp

Компьютер с MacOS (comp3).

  • Открываем доступ "только на чтение" "для всех" в каталог видеоколлекции /data/video
  • Открываем доступ "только на чтение" "для всех" в каталог музыкальной коллекции /data/video
  • Открываем доступ на "чтение и запись" "для всех" в каталог /data/tmp

После того, как серверная часть настроена и проверена, можно приступить к организации монтирования ресурсов. Для примера, будет рассмотрено несколько вариантов доступа к сетевым каталогам между разными операционными системами.

Настройка серверной части

Серверная часть отвечает за публикацию ресурсов в сети. В разных операционных системах, серверная часть реализована по-разному. В Windows - в виде сервиса "Сервер", Linux - в виде демона SAMBA, MacOS - в виде какой-то своей сборки SAMBA. Ниже будет рассмотрена настройка серверной части вышеперечисленных систем.

Настройка Windows (comp4)

Трудностей не представляет:

  1. Через "Мой компьютер" находим каталог, который будет открыт в сеть.
  2. Вызываем для этого каталога контекстное меню (правая кнопка мыши) - откроется окно свойств каталога (папки).
  3. Переходим на вкладку "Доступ".
  4. Cтавим галочку на "Открыть общий доступ к этой папке". В поле "Имя общего ресурса" вводим имя каталога, как оно будет отображаться в сети.
  5. Если есть желание разрешить изменение файлов в этом каталоге, можно поставить галочку на "Разрешить изменение файлов по сети". В этом случае все пользователи сети смогут читать\записывать\удалять файлы в этом каталоге. Как уже условились, эту галочку нужно поставить только для каталога tmp

Возможен вариант, что вышеописанные поля будут "затенены" (т.е. нельзя в них что-то изменить) - это значит, что возможно не запущена служба "Сервер". Возможно система спросит "а не хотители запустить службу сервер прежде чем открыть доступ?" На это отвечаем положительно. Если предложения не поступило и поля остаются затенёнными - пробуем запустить службу "Сервер" вручную:

  1. Переходим: Пуск --> Панель управления --> Администрирование --> Службы. Для удобства раскрываем список на весь экран и переходим ниже на вкладку "Стандартный";
  2. Ищем в списке строку с именем "Сервер" и кликаем по ней 2 раза. Откроется окно управления службой;
  3. Тип запуска ставим "Автоматически", жмём ниже кнопку "Пуск". Программа попробует запустить службу. Если ей это удастся, то строка "Состояние" сменится с "Остановлено" на "Работает". Если служба не запустилась, открываем в окне "Администрирование" - "Просмотр событий" и изучаем логи на предмет ошибок;
  4. Далее в окне управления службой жмём "Применить", затем "ОК" и закрываем окно.

Настройка Linux (comp1 и comp2)

Независимо от дистрибутива, через менеджер пакетов или команды установки, нужно установить пакеты samba, smbclient и cifs-utils с зависимостями.
В Debian и Ubuntu, из консоли, это делается так:

 # apt-get install samba smbclient cifs-utils

samba - это собственно сервер, smbclient и cifs-utils - клиентская часть, - компоненты и библиотеки для подключения к SMB-ресурсам (шарам).

Далее действуем по такому плану:

  1. Определяемся с местоположением ресурсов локального компьютера, которые будут публиковаться в сеть (планируем ресурсы).
  2. Находим конфигурационный файл.
  3. Редактируем его.
  4. Проверяем на наличие ошибок и если таковые обнаружились - исправляем их редактированием конфигурационного файла.
  5. Перезапускаем демон.
  6. Проверяем как это работает по сети и, в случае необходимости, корректируем конфиг.

Теперь рассмотрим подробнее:

1. По условию задачи, нужно публиковать в сеть 3 каталога: /data/video, /data/music, /data/tmp , причём последний каталог с правами на чтение и запись.

2. Конфигурационный файл обычно располагается в каталоге /etc/samba и обзывается smb.conf . Править его надо из под учётной записи root.
Логинимся под root`ом. На всякий случай делаем резервную копию smb.conf:

$ su -
  password:
# 
# cd /etc/samba
# cp smb.conf smb.conf.bak
# mcedit smb.conf

3. Можно убрать все строки из начального файла и добавлять нужные, а можно редактировать уже существующий конфиг. За основу можно взять этот минимальный пример:

[global]      
	dos charset = 866
	unix charset = UTF8
	display charset = 866
	workgroup = workgroup
	server string = %h smb server
	bind interfaces only = Yes
	security = SHARE
	obey pam restrictions = Yes
	pam password change = Yes
	passwd program = /usr/bin/passwd %u
	passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
	unix password sync = Yes
	syslog = 0
	log file = /var/log/samba/log.%m
	max log size = 1000
	name resolve order = host bcast wins
	dns proxy = No
	panic action = /usr/share/samba/panic-action %d
	load printers = No

[video]
	comment = cinema
	path = /data/video
	guest ok = Yes

[music]
	comment = music
	path = /data/music
	guest ok = Yes

[tmp]
	comment = rw dir
	path = /data/tmp
	force user = username
	force group = usergroup
	read only = No
	create mask = 0666
	directory mask = 0775
	guest ok = Yes

Данный конфиг настраивает сервер на публикацию трёх вышеописанных ресурсов. Несколько слов по опциям:

  • dos charset, unix charset, display charset - устанавливают корректное отображение имён файлов в кодировке utf-8 в Windows,
  • workgroup - задаёт имя рабочей группы. По условию задачи, все компы домашней сети находятся в группе workgroup,
  • comment - краткое описание каталога,
  • path - реальный путь к каталогу,
  • guest ok = Yes - разрешить гостевой вход в каталог (так если все пользователи смогут прочитать файлы из каталога).

Теперь отдельно разберём секцию tmp:

  • опции force user и force group задают группу и имя пользователя, с которым будут создаваться файлы в файловой системе при записи в каталог из сети. В качестве username нужно подставить реальное имя пользователя и имя группы, зарегистрированного в системе.
  • read only = No - задаёт что файлы в каталоге можно изменять,
  • create mask = 0666 и directory mask = 0775 задают права доступа к записываемым на диск файлам из сети.

Для каталога /data/tmp нужно изменить права доступа, чтобы и сервер samba мог записывать в него и локальный пользователь. Делаем:

 # chown username:usergroup /data/tmp
 # chmod 775 /data/tmp

Этими командами мы меняем хозяина каталога на текущего пользователя т.е себя username, который находится в usergroup. У Вас могут быть другие значения - смотрите свой логин\группу. Далее каталогу даются права на чтение и запись для этого пользователя, а для остальны - только чтение и просмотр каталога.

4. После правки конфига запускаем утилиту проверки синтаксиса:

# testparm

Если ошибок нет переходим к следующму шагу.

5. Перезапускаем сервер:

# /etc/init.d/samba restart

6. Далее проверяем как "видятся" каталоги по сети и правильно ли работают права доступа - с другой машины пробуем зайти в сетевые каталоги по имени компьютера и пробуем записать файлы.

Если пользователей на компьютере несколько

Здесь сделаем отступление и рассмотрим вариант, когда на компьютере зарегистрирован не один пользователь, а несколько. Как сделать так, чтобы файлы в каталоге /data/tmp были доступны для модификации всем пользователям? Это делается путём добавления в систему отдельной группы и пользователя, а затем в эту группу добавляются нужные пользователи. Такими образом права на чтениеи запись объединяются на уровне прав группы. Каталог tmp в Samb`е при этом настраивается на доступ именно под отдельной группой\пользователей. Делаем так:

# groupadd smbshare
# useradd -s /bin/false -d /home/smbshare -c smbowner -g smbshare smbshare

Этими командами мы создали группу, а затем создали как-бы виртуального пользователя, который будет объединять права и поместили его в эту группу.
Теперь редактируем файл /etc/group - открываем его в редакторе, находим последнюю строку и дописываем в конец, через запятую всех локальных пользователей, что будут работать с сетевым каталогом:

smbshare:x:2002:username1,username02, username03

Где username1, username02, username03 - это логины локальных пользователей в системе. Для вступления изменений в силу, нужно чтобы эти пользователи перелогинились.

Теперь редактируем секцию каталога tmp файла smb.conf и меняем параметры force user и force group на имя созданной группы и пользователя:

[tmp]
	comment = rw dir
	path = /data2/smb/tmp
	force user = smbshare
	force group = smbshare
	read only = No
	create mask = 0666
	directory mask = 0775
	guest ok = Yes

Не забываем, что нужно изменить ещё и права доступа на каталог /data/tmp , чтобы новый пользователь мог писать в него:

# chown smbowner:smbshare /data/tmp
# chmod 775 /data/tmp

После модификации конфига, не забудьте выполнить Шаги 4-6.

Настройка MacOS (comp3)

Открываем "Системные настройки" через меню со значком яблока в Finder и переходим на "Общий доступ".

Откроется окно управления сетевыми ресурсами.

  • Ставим галочку на "Общий доступ к файлам".
  • Ставим курсор в окно "Общие папки", после чего откроется окно выбора каталогов для публикации.

Выбираем нужные каталоги и жмём "Добавить".

Нажимаем на кнопку "Параметры…". Появится окно настроек типа доступа.
Убираем галочки со всех пунктов и оставляем только на "Предоставление общего доступа к файлам и папкам с помощью SMB"

Далее для каждого каталога перечисляем пользователя (должен быть зарегистрирован в системе) и права. Для гостевого (без пароля\логина) доступа к ресурсу, выбираем пользователя Everyone.

На этом настройка завершена. Осталось проверить работоспособность путём подключения к ресурсам с другого компьютера.

Организация доступа к сетевым каталогам (клиентская часть)

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

Компьютер с Windows

Статическое монтирование

В WindowsXP возможно только статическое монтирование ресурсов и только как дисков. В случае недоступности ресурсов, возможны некоторые недолгие "зависания" "Проводника" и других программ. Как и в остальных случаях, сперва определяем что и куда будет монтироваться.

Далее открываем "Проводник" и переходим в меню "Сервис" --> "Подключить сетевой диск…".

Откроется окно мастера подключения ресурсов. Вводим букву диска (самый удобный вариант, когда буква диска будет совпадать с первой буквой сетевого каталога), затем вводим полный адрес к ресурсу, например \\comp1\tmp и ставим галочку "Восстанавливать при входе в систему". Если ресурс запаролен, то нажимаем ссылку "Подключение под другим именем", откроется окно с полями для ввода логина\пароля, куда нужно будет ввести учётные данные. Далее жмём "Готово" и если ресурс доступен, в системе появится виртуальный диск сетевого ресурса.

Такую процедуру нужно выполнить на comp4 для всех ресурсов.

Временное подключение к ресурсу

Для временного подключения к ресурсу можно воспользоваться "Проводником" или файловыми менеджерами.

В "Проводнике", в адресной строке записывается полный адрес ресурса, например \\comp1\tmp и осуществляется переход. Также можно обратиться к ресурсу через обозреватель сети "Сетевое окружение".

Компьютер с Linux

Для начала определимся что и куда будет монтироваться. На мой взгляд, самый удачный вариант организации точек монтирования (куда будет монтироваться ресурс) такой:

 /mnt/имя_удалённой_машины/имя_ресурса

Настраиваем монтирование ресурсов к comp1. Предположим, что на компе нужно примонтировать следующие ресурсы таких компов с такими правами:

  • comp2
    1. /data/video r
    2. /data/music r
    3. /data/tmp rw
  • comp3
    1. /data/video r
    2. /data/music r
    3. /data/tmp rw

Создаём точки монтирования. Логинимся в системе как root и создаём инфраструктуру каталогов для comp2 :

  1. cd /mnt
  2. mkdir comp2
  3. mkdir video
  4. mkdir music
  5. mkdir tmp

Тоже самое для comp3:

  1. mkdir comp3
  2. mkdir video
  3. mkdir music
  4. mkdir tmp

Статическое монтирование

Теперь настраиваем непосредственно монтирование. Это делается в файле /etc/fstab . Для нашего случая, формат записей в файле будет примерно таков:

 что_монтируем   куда_монтируем   файловая_система   опции  0  0

С помощью любимого текстового редактора в конец файла /etc/fstab добавляем строки для comp2:

  //comp2/video   /mnt/comp2/video   cifs   ro,iocharset=utf8,gid=1000,uid=1000,_netdev  0  0
  //comp2/music   /mnt/comp2/music   cifs   ro,iocharset=utf8,gid=1000,uid=1000,_netdev  0  0
  //comp2/tmp     /mnt/comp2/tmp     cifs   rw,iocharset=utf8,gid=1000,uid=1000,_netdev  0  0

Для comp3:

  //comp3/video   /mnt/comp3/video   cifs   ro,iocharset=utf8,gid=1000,uid=1000,_netdev  0  0
  //comp3/music   /mnt/comp3/music   cifs   ro,iocharset=utf8,gid=1000,uid=1000,_netdev  0  0
  //comp3/tmp     /mnt/comp3/tmp     cifs   rw,iocharset=utf8,gid=1000,uid=1000,_netdev  0  0

В конце записи нужно обязательно оставить пустую строку. Вместо значения 1000, нужно подставить UID и GID того пользователя, кто работает на данном компьютере чаще всего. Эти цифры можно взять с помощью команды id. Пример:

 $ id
 uid=1000(user) gid=1000(user) группы=1000(user),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),115(scanner)

Опции:
ro - тип монтирования "только чтение",
rw - тип монтирования "чтение и запись",
iocharset=utf8 - преобразовывать имена файлов и каталогов в UTF8, если не поставить, не ASCII символы будут отображаться иероглифами,
uid и gid - права с которыми будут отображаться файлы и каталоги на локальной машине,
_netdev - указывает на то, что файловая система располагается в сети и если сеть не работает не делаются попытки монтирования. Данный параметр обрабатывается по-разному в разных системах,
0 0 - дамп и порядок проверки. В нашем случае эти цифры должны быть по нулям.

Для проверки монтирования, включаем остальные компьютеры и выполняем от имени root`а команду:

 # mount -a

- эта команда примонтирует ещё не монтированные ресурсы, описанные в /etc/fstab . В случае проблем, будут выведены сообщения об ошибках. Если всё прошло удачно, переходим в /mnt , проверяем доступность ресурсов и параметры чтения\записи.

Сразу следует напомнить, что возможны ситуации, когда не все компьютеры (описанные в fstab) будут доступны в сети при загрузке машины. В этом случае, при загрузке, делается несколько попыток примонтировать ресурс и если ничего не выходит, попытки прекращаются. Когда удалённый компьютер оказывается включенным, ресурс не будет смонтирован автоматически. Поэтому, при обнаружении что ресурс ещё не смонтирован, а удалённый компьютер включён, следует от имени root`а ввести команду mount -a и все ресурсы смонтируются.

Автоматическое монтирование при обращении (по требованию)

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

О варианте использования autofs, читайте в статье "Настройка монтирования ресурсов Samba по требованию в Debian".

Временное подключение в классическом GNOME

На "скорую руку" ресурс можно подключить в классической среде GNOME следующим образом:
1. Переходим через меню: "Переход" --> "Соединиться с сервером…"

2. Выбираем "Тип сервиса:" "Ресурс ОС Windows".
3. В поле "Сервер:" вводим имя компьютера, на котором открыт нужный нам сетевой каталог.
4. В поле "Папка:" вводим имя каталога.
5. Жмём "Соединиться".

Таким образом ресурс будет примонтирован к виртуальной файловой системе GNOME. Чтобы его отмонтировать, нужно открыть Nautilus, в колонке "Места" найти строку с именем сервера и нажать в этой же строке рядом кнопку типа "eject". Если какой-то из файлов используется, отмонтировать ресурс не удастся.

Компьютер с MacOS

Временное и статическое монтирование

Открываем "Finder" и переходим: "Переход" --> "Подключение к серверу…"

Откроется окно подключения к серверу. В строке "Адрес сервера:" вводим полный путь к ресурсу:

smb://comp1/video

Далее жмём "Подключиться". Если к ресурсу нужен логи или пароль, то откроется окно с приглашением ввода логина\пароля.

Если ресурс смонтировался, ярлык к нему будет в боковой панели Finder`а.

Чтобы настроить автоматическое монтирование, открываем "Системные настройки" через меню со значком яблока в Finder.

Далее переходим на "Учётные записи".

Теперь переходим на "Объекты входа", откроется список автоматически-загружаемых приложений при входе в систему. Нажимаем на "+" и выбираем примонтированный ресурс (уже должен быть смонтирован). Для того, чтобы скрыть приглашение на ввод логина\пароля, ставим галочку на "скрыть".

Смотрите также

Источники информации

Печать/экспорт