1

Статья уже давно висит недописанная, но т.к. никто не хочет её дописывать, решил выложить, вдруг кому пригодится, или помощники найдутся.

Автор: Кузнецов Константин

[size=7]Сетевой диск (samba)[/size]

План:
1. Введение
2. Сведения о пакете SAMBA
3. Настройка анонимного samba-сервера
4. Настройка samba для авторизованного доступа
5. Дополнительные возможности
6. Используемые и рекомендуемые источники

----------------------------------------------------------------------------------------

[size=6]1. Введение[/size]

Многие сталкивались с работой с данными по сети через "сетевое окружение". Сразу же вспоминаются такие термины, как "расшарить каталог" и "сетевой принтер". Все это относится к протоколу SMB

Материал из Википедии — свободной энциклопедии
SMB (сокр. от англ. Server Message Block) — сетевой протокол прикладного уровня для удалённого доступа к файлам, принтерам и другим сетевым ресурсам, а также для межпроцессного взаимодействия. Первая версия протокола была разработана компаниями IBM, Microsoft, Intel и 3Com в 1980-х годах; вторая (SMB 2.0) была создана Microsoft и появилась в Windows Vista. В настоящее время, SMB связан главным образом с операционными системами Microsoft Windows где используется для реализации «Сети Microsoft Windows» (англ. Microsoft Windows Network) и «Совместного использования файлов и принтеров» (англ. File and Printer Sharing).

Для реализации этого протокола (как серверной его части, так и клиентской) в операционной системе Linux присутствует программное обеспечение SAMBA

Материал из Википедии — свободной энциклопедии
Samba — программа, которая позволяет обращаться к сетевым дискам на различных операционных системах по протоколу SMB/CIFS. Имеет клиентскую и серверную части. Является свободным программным обеспечением, выпущена под лицензией GPL.
Начиная с третьей версии Samba предоставляет службы файлов и печати для различных клиентов Microsoft Windows, и может интегрироваться с операционной системой Windows Server, либо как основной контроллер домена (PDC), либо как член домена. Она также может быть частью домена Active Directory.
Samba работает на большинстве Unix-подобных систем, таких как GNU/Linux, POSIX-совместимых Solaris и Mac OS X Server, на различных вариантах BSD; в OS/2 портирован samba-клиент, являющийся плагином к виртуальной файловой системе NetDrive. Samba включена практически во все дистрибутивы GNU/Linux.

О настройке данного инструмента мы поговорим в этой статье.

----------------------------------------------------------------------------------------

[size=6]2. Сведения о пакете SAMBA[/size]

Пакет SAMBA дает нам возможность выступать в локальной сети в качестве smb-сервера, т.е. предоставлять доступ к некоторым данным. Конфигурационный файл /etc/samba/smb.conf имеет следующий синтаксис:

[секция1]
опция1 = значение
опция2 = значение
[секция2]
опция1 = значение
опция2 = значение

При этом, согласно man smb.conf, имеются три зарезервированные секции: [global] , [homes] и [printers]
Секция [global] определяет некоторые опции, значения которых будут распространяться на все остальные секции, если в них явно не указано обратное.
Секция [homes] позволяет предоставить удаленным пользователям доступ к своим (и только своим) домашним директориям. Так что, если пользователи попытаются подключиться к этому сетевому ресурсу (адрес smb://server/username/ или \\server\username), то они будут подключены к персональным домашним директориям, закрепленным как "домашний каталог" за пользователем, под учетной записью которого они зарегистрировались на samba-сервере. Заметим, что для того чтобы удаленный пользователь мог авторизоваться на samba-сервере, мало добавить соответствующего пользователя в систему (useradd), необходимо еще создать samba-пароль для этого пользователя (smbpasswd), который может отличаться от системного (passwd).
Секция [printers] отвечает за определение опций доступа к принтеру по сети, но это мы рассматривать не будем, уж больно сложно там для меня все.
С помощью SAMBA можно настроить наш сервер как PDC (Primary Domain Controller) (ссылка), в этом случае добавляются еще две зарезервированные секции: [netlogons] и [Profiles]
Остальные секции, например [somesection] будут соответствовать шарам, т.е. клиент на данном компьютере увидет шару somesection с правами, описанными в данной секции.
При всем при этом обращаю внимание на то, что все опции делятся на 3 типа:
1) употребляемые исключительно в секции [global], они в мане отмечены (G)
2) употребляемые исключительно в шаровых секциях (S)
3) употребляемые везде (никак не помечены).

Так же упомяну одну интересную опцию, смысл которой необходимо понять и запомнить - security (G). Она может принимать следующие значения:
1) security = share
В этом случае доступ к нашему серверу будет открыт как для зарегистрированных, так и для анонимных пользователей
2) security = user
Доступ только зарегистрированным пользователям - при подключении к серверу или к шаре будет сразу же появляться приглашение авторизоваться.
3) security = server не рассматривается в данной статье
4) security = domain не рассматривается в данной статье
С этим понятно. Приступим к настройке.

----------------------------------------------------------------------------------------

[size=6]3. Настройка анонимного samba-сервера[/size]

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

[global]
# рабочая группа, в которой будет виден наш сервер
workgroup = WORKGROUP
# сетевое имя компьютера
netbios name = SERVER
# тип предоставления доступа
security = share

После чего можно нормально (анонимно) зайти на сервер, но шар все еще нет. Добавляем:

# имя сетевого ресурса, под которым он будет виден по сети
[share]
# комментарий, его можно не писать
comment = share
# путь к каталогу, содержимое которого будет отображаться в данной шаре
path = /home/ftp/upload

После перезапуска сервиса мы анонимно сможем зайти на сервер и увидеть там шару "share", но зайти в неё не сможем, так как согласно man smb.conf по умолчанию у нас guest ok = no и guest only = no, что запрещает доступ анонимным пользователям к шаре.

Как же так, вы же сами сказали

Секция [global] определяет некоторые опции, значения которых будут распространяться на все остальные секции, если в них явно не указано обратное.

Мы в неё записали security = share, и явно обратное у нас не указано.

Так то оно так, но опция security определяет тип авторизации при подключении к серверу, а guest ok и guest only - к шаре, и в данном случае они друг к другу никак не относятся и отменять друг друга не могут. Продолжим.
Подключиться к такой шаре сможет только авторизованный пользователь, но т.к. у нас security = share, то у нас при подключении к серверу не спрашивают логин и пароль. Для анонимного доступа к шаре необходимо добавить опцию "guest ok = yes" в глобальную секцию либо в секцию шары. Название опции говорит само за себя - разрешить подключаться гостям (анонимным пользователям). Значит теперь к этой шаре могут подключаться пользователи и гости. Если мы хотим, чтоб подключались ТОЛЬКО гости, добавляем "guest only = yes".

[global]
workgroup = WORKGROUP
netbios name = SERVER
security = share

[share]
comment = share
path = /home/ftp/upload
guest ok = yes
guest only = yes

Отлично, теперь для анонимного подключения к ресурсу smb://server/share нам ничто не мешает (не забудьте проверить права на каталог /home/ftp/upload !!!)

----------------------------------------------------------------------------------------

[size=6]4. Настройка samba для авторизованного доступа[/size]

Для запрета анонимного подключения к серверу можно пойти разными путями:
1) оставить все как есть, но установить права на папки, к которым ведут шары, так, чтобы подключались только определенные пользователи.
2) оставить security = share, но в шарах убрать guest ok = yes и guest only = yes, таким образом анонимные пользователи смогут видеть список шар, но зайти в них - нет;
3) установить security = user, и в этом случае не зависимо ни от каких других опций будет запрашиваться авторизация пользователя еще при подключении к серверу.

Путь №1 мы рассматривать не будем, т.к. во-первых это топорное (глупое) решение, а во-вторых, потому что это решение никак не связано с темой данной статьи.
Рассмотрим подробнее путь №2
Итак, анонимный пользователь подключился к серверу, увидел шары, но зайти не сможет. Для решения данной проблемы необходимо подключать удаленный ресурс с принудительной авторизацией (под другим именем). Такая возможность присутствует у smb-клиентов даже в windows-like операционных системах. Но сначала необходимо добавить пользователя в систему

useradd test

а потом назначить ему samba-пароль

smbpasswd -a test

Системный пароль пользователю test можно даже не задавать, если под его именем будут подключаться только удаленные smb-клиенты.
Путь №3 отличается от второго лишь тем, что логин и пароль у нас будут спрашивать еще на момент подключения к серверу и никаких дополнительных танцев плясать не нужно.
Стоит заметить, что доступ к шаре можно ограничить определенным пользователям или группе пользователей с помощью опции valid users

valid users = user1,user2,@group1

----------------------------------------------------------------------------------------

[size=6]5. Дополнительные возможности[/size]

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



[size=4]Оптимальная конфигурация для предоставления доступа к базам 1С:Бухгалтерии[/size]

Вот как рекомендуют настроить samba для предоставления доступа к базам 1С наши соотечественники - разработчики из компании etersoft:
http://www.etersoft.ru/content/view/56/ … samba-cifs

Настройка совместной работы по протоколу CIFS
WINE@Etersoft позволяет настроить совместное использование файловой базы данных в гетерогенной среде. В качестве файлового сервера при этом может быть использован SAMBA 3.0.14 и выше, Windows 2000 и выше, или другой файловый сервер, работающий по протоколу CIFS. При этом используется специальный модуль ядра Linux (CIFS@Etersoft), модифицированный для корректной работы WINE. Поставляется он в пакете etercifs.
Настройка Linux/Samba-сервера для совместной работы по протоколу CIFS
Никаких особенных настроек делать не требуется. Если у вас сервер уже настроен и работает с Windows-клиентами, то он будет работать и с WINE@Etersoft.
Замечание: При использовании одной и той же машины в качестве файлового и терминального сервера одновременно, следует устроить так, чтобы терминальные клиенты также работали с общим ресурсом посредством протокола CIFS, иначе взаимодействия не получится.
Советы по настройке SAMBA-сервера
Как правило, SAMBA-сервер поставяется с настройками по умолчанию, которые подходят для работы WINE, но следует проверить настройки, запустив на сервере команду:

testparam -v

Будет выведены все текущие значения параметров. Изменить их можно в конфигурационном файле smb.conf, который обычно находится в каталоге /etc/samba.
Рекомендуется, чтобы oplocks были включены (включены по умолчанию)- это улучшит производительность в монопольном режиме. kernel oplocks (включены по умолчанию) можно выключить, это немного снизит загрузку на систему. Включенные логи (log level в значении больше 0) могут в несколько раз замедлить производительность. Проверьте, что указано use sendfile = yes (ускоряет передачу больших блоков файлов).
Какие-либо другие параметры, особенно связанные с доступом к файлам и блокировкам, использовать не рекомендуется.
Таким образом пример оптимальных настроек может быть таким:

; oplocks = yes
kernel oplocks = no
use sendfile = yes
log level = 0

Остальные параметры по поводу locks/oplocks должны быть установлены по умолчанию. Параметр strict sync включает выполнение команд по сбросу буфера на диск (flush). По умолчанию он выключен, и это ускоряет работу.Частой проблемой является несоответствие прав, под которым обращается самба-сервер, с правами на файлы, к которым он обращается. Например, при использовании security = share и обращении к серверу без указания пользователя/пароля он может обращаться к файлам от имени пользователя nobody или pcguest, которые вряд ли имеют права на изменение разделяемых файлов.В примере ниже Самба с ресурсом sharewine всегда будет обращаться от имени wine: winetester к файлам в каталоге/var/local/share

[sharewine]
   path = /var/local/share
   public = yes
   force user = wine
   force group = winetester
   writable = yes
   guest ok = yes



[size=4]Настройка корзины[/size]

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

Добавляем в секцию шары следующие строки:

vfs objects = recycle
# куда бедет перемещаться удаляемые файлы
recycle:repository = /mnt/hdd2/lost_n_found
# сохранять структуру каталогов
recycle:keeptree = yes
# при дублировании имен файлов делать разные версии
recycle:versions = yes
# исключить из перемещения в корзину файлы, подходящие под шаблоны
recycle:exclude = *.tmp | *.TMP | ~$* | ~WRL*
# исключить из перемещения в корзину директории
recycle:excludedir = /mnt/hdd1/temp
# размер корзины
recycle:maxsize = 104805760
# FIXME - не знаю
recycle:touch = yes



[size=4]Аудит действий пользователей[/size]

FIXME вставить воду о том, что такое аудит действий пользователей

vfs object              = full_audit                                 
        full_audit:prefix       = share=%S; id=%U; ip=%I -->                         
        full_audit:success  = unlink rmdir mkdir write rename write aio_write pwrite
        full_audit:failure  = unlink rmdir mkdir write rename write aio_write pwrite
        full_audit:priority     = INFO



[size=4]Антивирусная проверка данных[/size]

FIXME проверить, как это работает

vfs objects = vscan-clamav
vscan-clamav: config-file = /etc/samba/vscan-clamav.conf

#
# /etc/samba/vscan-clamav.conf
#

[samba-vscan]
; run-time configuration for vscan-samba using
; clamd
; all options are set to default values

; do not scan files larger than X bytes. If set to 0 (default),
; this feature is disable (i.e. all files are scanned)
max file size = 10485760

; log all file access (yes/no). If set to yes, every access will
; be logged. If set to no (default), only access to infected files
; will be logged
verbose file logging = no

; if set to yes (default), a file will be scanned while opening
scan on open = yes
; if set to yes, a file will be scanned while closing (default is yes)
scan on close = yes

; if communication to clamd fails, should access to file denied?
; (default: yes)
deny access on error = no

; if daemon failes with a minor error (corruption, etc.),
; should access to file denied?
; (default: yes)
deny access on minor error = no

; send a warning message via Windows Messenger service
; when virus is found?
; (default: yes)
send warning message = yes

; what to do with an infected file
; quarantine: try to move to quantine directory
; delete:     delete infected file
; nothing:    do nothing (default)
infected file action = quarantine

; where to put infected files - you really want to change this!
quarantine directory  = /opt/clamav/quarantine
; prefix for files in quarantine
quarantine prefix = vir-

; as Windows tries to open a file multiple time in a (very) short time
; of period, samba-vscan use a last recently used file mechanism to avoid
; multiple scans of a file. This setting specified the maximum number of
; elements of the last recently used file list. (default: 100)
max lru files entries = 100

; an entry is invalidad after lru file entry lifetime (in seconds).
; (Default: 5)
lru file entry lifetime = 5

; exclude files from being scanned based on the MIME-type! Semi-colon
; seperated list (default: empty list). Use this with care!
exclude file types =

; socket name of clamd (default: /var/run/clamd). Setting will be ignored if
; libclamav is used
clamd socket name = /tmp/clamd

; limits, if vscan-clamav was build for using the clamav library (libclamav)
; instead of clamd

; maximum number of files in archive (default: 1000)
libclamav max files in archive = 1000

; maximum archived file size, in bytes (default: 10 MB)
libclamav max archived file size = 5242880

; maximum recursion level (default: 5)
libclamav max recursion level = 5

----------------------------------------------------------------------------------------

[size=6]6. Используемые и рекомендуемые источники[/size]

http://ru.wikipedia.org/wiki/SMB
http://ru.wikipedia.org/wiki/Samba
http://linux.yaroslavl.ru/docs/altlinux … 12s03.html
Samba за 5 минут
http://us5.samba.org/samba/docs/man/Sam … #id2617818
http://www.nixp.ru/articles/Использован … Linux.html
http://rus-linux net/lib.php?name=/MyLD … ity-1.html
http://www.opennet.ru/base/net/samba_fu … t.txt.html

2 (18.05.2010 07:17:08 отредактировано Nigelist)

forkostya пишет:

3) установить security = user, и в этом случае не зависимо ни от каких других опций будет запрашиваться авторизация пользователя еще при подключении к серверу.

forkostya, неплохо было бы рассмотреть этот вид настройки подробнее, в частности:

  • Добавление групп и пользователей для samba

  • Назначение прав для папок

  • Доступ к расшаренным папкам только определенному пользователю по паролю

3

познавательно

4

Спасибо.

5

спасибу всё просто супер понятно

Каменск-Шахтинский

6

Спасибо, очень помогло!!!  ag
Постарайтесь не убирать статью, многим она будет полезна!
Я делал сетевой диск на самбе с авторизацией доменных пользователей в LDAP для этого надо обязательно вводить в этот же домен сервак на котором поднимаем этот самый сетевой диск.

7

Спасибо. Отличная статья. Все розжовано достаточно понятно