Неофициальное Samba HOWTO

//форматировать пока что некогда, если кому не влом, делайте.


Первоисточник The Unofficial Samba HOWTO, by David Lechnyr.
Перевод на русский язык выполнил Айзятуллен Рамиль.

Краткая история…

Когда-то давно модным была DCE/RPC. Распределенная Вычислительная Среда/Удаленный Вызов Процедур – концептуально хорошая идея. Она была разработана компанией Apollo/НР в качестве NCA 1.0 (Сетевой Компьютерной Среды) и работала только по UDP. В последствии она была доработана Open Group для совместимости с DECnet 3.0 (возможность работы поверх протокола TCP), и официально стала известна как DCE/RPC. Компания Microsoft не захотела платить $ 20 за лицензирование рабочего места технологии DCE/RPC и назвала свою реализацию MS-RPC. Развитие получила концепция SMB (Server Message Block), использующая NetBIOS (Network Basic Input/Output System) совместимый слой, стало возможно запустить SMB (транспорт), используя несколько различных протоколов. В результате возникло много различных реализаций, в том числе NBIPX (NetBIOS поверх IPX, NwLnkNb или NWNBLink) и NBT (NetBIOS поверх TCP / IP, или NetBT). Шли годы, NBT стала наиболее распространенной формой реализации.

Пожалуй, лучше всего о происхождении SMB высказываются в 1997 году в статье, CIFS: Common Insecurities Fail Scrutiny :

“Несколько мегабайт архивов NT-безопасности, случайные технические описания, RFC, CIFS спецификации, материалы Samba, несколько статей базы знаний Microsoft, строки, извлеченные из исполняемых файлов и пакетов дампов были получены в ходе сбора информации для этого проекта, и есть еще много недостающих частей […] хлопая рукой по лбу и бормоча “боже мой, о чем они думали?!”

При всем прочем Microsoft сохраняет свою реализацию NBT в тайне (в основном). Если у вас нет компьютера с Windows, вам не повезло и вы не сможете совместно использовать файлы и принтеры с другими компьютерами с Windows. Таким образом появился проект Samba, позволяющий объединить Windows и Linux компьютеры вместе, при этом не требуя отдельного сервера Windows.

Что же такое Samba?

Samba является файловым TCP/IP сервером и сервером печати для клиентов Microsoft Windows. Она поддерживает любые реализации клиентов SMB/CIFS. Огромным плюсом Samba является то, что она позволяет использовать смешанные сети из Windows и Linux компьютеров вместе, не требуя при этом отдельного сервера Windows. Samba включает в себя поддержку Active Directory, Unicode, новые проверки подлинности и искажения имен файлов в системах, поддержка печати, доверительных отношений, LDAP интеграция и загружаемые модули RPC.

Какие протоколы поддерживаются?

Сейчас Samba использует TCP/IP. Она реализует API NetBIOS поверх TCP/IP, который более известен как “NBT”. Частым является вопрос, почему в Samba не работает NetBEUI? Ответ, в настоящее время нет. NetBEUI является устаревшим протоколом от Microsoft, и не является родным протоколом Linux.

Из старой переписки Кристофер Hertel из Samba Team:

“NetBEUI соответствует NetBIOS API для своего протокола (который очень близок к формату NetBIOS). Чтобы сделать работу по NetBEUI на Linux, потребуется создать слой NetBEUI. Это не слишком сложно, но потом придется написать smbclient для работы с интерфейсом NetBEUI. Сейчас в Samba реализовано TCP/ UDP/IP “.

Установка Samba

“Части кода должны работать вместе как часы. Помните что код написанный вами, вам же потом и разбирать. Должны быть веские причины, если вы не можете заставить части кода снова работать слажено. Старайтесь не использовать молоток в своей работе.”

IBM инструкция для разработчиков, 1975

Весомый аргумент в установке Samba на свой компьютер, это ответить на некоторые вопросы, которые вероятно возникают в вашей голове: Какие настройки сети были использованы во время сборки Samba, которые могут повлиять на ее работу? Где она будет искать свои файлы конфигурации? Были ли внесены какие-либо изменения в исходный код вашим поставщиком Linux? Вы получите ответы на эти вопросы.

Сначала мы должны скачать последний архив Samba с исходными кодами:

$ curl -LO http://samba.org/samba/ftp/stable/samba-3.3.3.tar.gz

Проверка

В большинстве случаев нужно проверить архив с исходными файлами на наличие GPG signed key. Однако, в случае с Samba, все немного иначе (Это, по сути, моя вина. Команда Samba предоставляет как gzip так и bzip2 версии своего программного обеспечения, каждая из которых имеет свой уникальный GPG ключ. Давным, давно я предложил, что будет проще, если делать одну GPG подписанную версию архива, а не две GZIP или bzip2 версии. К сожалению, они приняли мои советы на этот счет, и теперь все менее стандартизировано, чем прежде):

$ gunzip samba-3.3.3.tar.gz
$ curl -LO http://samba.org/samba/ftp/stable/samba-3.3.3.tar.asc
$ gpg –keyserver-options auto-key-retrieve –verify samba-3.3.3.tar.asc

Распаковка

Распакуем исходные коды дистрибутива Samba и перейдем в директорию с распакованным архивом:

$ tar –no-same-owner –no-same-permissions -xvf samba-3.3.3.tar
$ cd samba-3.3.3/source

Стоит отметить что директория с исходными файлами Samba содержит следующие полезные файлы и папки:

* WHATSNEW.txt – Изменения произошедшие в последней версии. Все важные документы и файлы находятся в.
* docs/ – Документация Samba, включая старую и новую
* examples/ – Примеры файлов конфигурации Samba
* source/ – Текушие исходные коды

Кроме того вы обалдеете (извините за жаргон Прим. переводчика), когда узнаете что в архиве абсолютно бесплатно для вас находится полная версия книги Using Samba издательства O’Reilly (на английском языке :-p Прим. переводчика). Она находится в docs/htmldocs/using_samba/.

Если вам уже скучно, давайте быстро покончим с этим, выполните простую команду:

$ ./configure

А вот вариант для тех кто хочет понять что, куда и зачем собственно мы устанавливаем:

$ ./configure
–prefix=/usr/local/samba-3.3.3
–with-configdir=/etc/samba
–with-privatedir=/etc/samba/private
–disable-cups
–with-cifsmount
$ make
# make install

Примечание: при указании опций конфигурации необходимо прислушиваться к голосу здравого смысла. Ну например, указав -enable-cups=yes, вы можете попасть в затруднительное положение, если в системе не установлен CUPS.

Хоть в большинстве дистрибутивов Linux уже все и определено, не лишним будет убедиться что в вашей системе в файле /etc/services определены порты, которые использует Samba. Не удивляйтесь, если вы увидите неожиданные записи “137/tcp” и т. д.; IANA обычно включает в себя как TCP так и UDP записи, независимо от того, требует ли этого протокол.

netbios-ns      137/udp         # NETBIOS Name Service
netbios-dgm     138/udp         # NETBIOS Datagram Service
netbios-ssn     139/tcp         # NETBIOS Session Service
microsoft-ds    445/tcp         # Microsoft-DS

Для запуска Samba, просто запустите демонов вручную или с помощью стартовых скриптов:

# /usr/local/samba-3.3.3/sbin/smbd -D
# /usr/local/samba-3.3.3/sbin/nmbd -D

Для остановки Samba не рекомендуется использовать команду SIGKILL (-9), используйте ее только в крайнем случае. Согласно документации Samba, “это может оставить область общей памяти в неустойчивом состоянии”. Давайте договоримся, что будем использовать:

# killall -15 smbd nmbd

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

# killall -HUP smbd nmbd

Если вы хотите упростить себе жизнь (что не всегда хорошая идея), вы можете создать старт/стоп сценарий:

#!/bin/sh
# chkconfig: 2345 91 35
# description: Initialization script for Samba

# Make sure the configuration file exists
[ -f /etc/samba/smb.conf ] || exit 1

samba_start() {
echo “Starting SMB services”
/usr/local/samba/sbin/smbd -D
echo “Starting NMB services”
/usr/local/samba/sbin/nmbd -D
}

samba_stop() {
echo -n “Stopping smbd”

kill -15 $(
while [[ -f /usr/local/samba/var/locks/smbd.pid ]]; do echo -n .; sleep 1; done ; echo
echo -n “Stopping nmbd”
kill -15 $(
while [[ -f /usr/local/samba/var/locks/nmbd.pid ]]; do echo -n .; sleep 1; done ; echo
}

samba_reload() {
echo “Re-reading Samba configuration files”
kill -HUP $(
}

# See how we were called
case “$1” in
‘start’)
samba_start
;;
‘stop’)
samba_stop
;;
‘restart’)
samba_stop
sleep 1
samba_start
;;
‘reload’)
samba_reload
;;
*)
echo “Usage: $0 {start|stop|restart|reload}”

;;
esac

Настройка Samba

Настройка Samba довольно запутанный процесс, это сродни чтению книг на чужом языке. Надеемся, что следующий бит будет вами получен и достаточно быстро (Юмор видимо такой. Прим. переводчика), хотя и небезопасно (читай: None). То что мы сделаем идеально подходит для настройки быстрой передачи файлов с вашего компьютера с установленной Samba и обратно на него через интерфейс Windows , если вы не слишком озабочены дополнительными компьютерами в сети (например, домашней сети). По умолчанию, Samba не устанавливает никаких Файлов конфигурации. Итак, первое, что нам нужно сделать, это запустить наш любимый текстовый редактор (vim, pico и т.д.) и создать файл /etc/samba/smb.conf со следующим содержимым. Пока не беспокойтесь о содержимом.

Создание основы

Для упрощения работы с документом объявим некоторые настройки нашего сервера тсзт:

* IP адрес сервера: 192.168.1.1
* URI сервера: fluffygerbil.example.com

Естественно работать ничего не будет, если корректно не сделать базовые настройки. С рабочей станции той же подсети запустите следующие команды (в примере ниже используется приложение терминал в Mac OS X):

$ ping 192.168.1.1

PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=2.010 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.329 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=2.296 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=2.950 ms
^C
— 192.168.1.1 ping statistics —
4 packets transmitted, 4 packets received, 0% packet loss

$ ping fluffygerbil.example.com

PING fluffygerbil.example.com (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=2.010 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.329 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=2.296 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=2.950 ms
^C
— fluffygerbil.example.com ping statistics —
4 packets transmitted, 4 packets received, 0% packet loss

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

Наш пример конфигурации мы будем использовать по всему оставшемуся документу:

[global]
guest account = smbguest
netbios name = FLUFFYGERBIL
security = share
socket options = TCP_NODELAY IPTOS_LOWDELAY
workgroup = WORKGROUP

[public]
guest ok = yes
guest only = yes
path = /cifs/pub
read only = no

[cdrom]
fake oplocks = yes
guest ok = yes
guest only = yes
path = /mnt/cdrom
read only = yes

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

# groupadd smbguest
# useradd -g smbguest -d /dev/null -s /bin/false smbguest

Подключение к Samba

Для подключения к нашему новому и сияющему серверу Samba, мы используем два клиента: компьютер с Windows и рабочую станцию с Linux.

Microsoft Windows

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

C:> net view \192.168.1.1
Shared resources at \192.168.1.1
Share name Type Used as Comment
———————————————————–
pub             Disk
private Disk
The command completed successfully.

C:> net use j: \192.168.1.1pub

The command completed successfully.

Теперь откройте значок Мой компьютер в верхней части панели инструментов, затем выберите Сервис, Подключить сетевой диск. В новом всплывающем окне, вы можете заполнить необходимую информацию:

Linux

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

Вам также необходимо установить Samba на этом компьютере с Linux, даже если Samba не будет работать как сервер. Убедитесь в том, что при компиляции Samba выбран параметр -with-smbmount (для доступа к Windows ресурсам старых версий) и с параметром -cifsmount. По существу, это создаст mount.cifs и umount.cifs исполняемые файлы, которые вам понадобятся.

При использовании Linux 2.4 или 2.6 на другом компьютере, вы можете набрать команды указанные ниже, чтобы подключиться к вашему серверу Samba (соответственно):

# mount -t smbfs -o username=smbguest //192.168.1.1/pub /mnt
# mount -t cifs -o user=smbguest //192.168.1.1/pub /mnt

Если на компьютере к которому вы подключаетесь нет поддержки SMB в ядре, ни одна из этих команд выполнена не будет:

# mount -t cifs -o user=smbguest //192.168.1.1/pub /mnt
mount: fs type cifs not supported by kernel

# mount -t smbfs -o username=smbguest //192.168.1.1/pub /mnt
mount: fs type smbfs not supported by kernel

Samba как первичный контроллер домена

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

[global]
domain logons = yes
domain master = Yes
netbios name = fluffygerbil
os level = 255
preferred master = yes
security = user
wins support = yes
workgroup = fluffygroup

[homes]
valid users = %S
read only = no
browseable = no
create mode = 0600
directory mode = 0700

После перезагрузки служб Samba daemons, необходимо создать файл паролей Samba, конечно если вы этого уже не сделали:

# umask 077
# mkdir -p /etc/samba/private
# touch /etc/samba/private/smbpasswd

Теперь мы можем добавить в него учетные записи. Предположим, что нам необходимо создать пользователя fred и рабочую станцию FLUFFBOX. На сервере Samba необходимо добавить учетные записи в систему:

# groupadd smbuser
# useradd -d /home/fred -g smbuser -s /bin/false -m fred
# smbpasswd -a fred
# smbpasswd -a root
# groupadd workstation
# useradd -d /dev/null -g workstation -s /bin/false fluffbox$
# smbpasswd -a -m fluffbox

Вот теперь у нас появилась возможность добавить рабочую станцию в домен. Обратите внимание что при выводе приглашения ввести имя пользователя и пароля при вводе компьютера в домен следует вводить пароль пользователя с правами root в домене Samba а не пароль root пользователя системы:

Предупреждение о формате конца строки

Есть проблема в логин скриптах с переводом строки. Если вы работаете в смешанном окружении Linux/Windows компьютеров, то наверняка встречали файлы в конце каждой строки у которых есть символ ‘^M’. Этот команда Windows для ‘начала новой строки’, используется в комбинации CR/LF, тогда как в Linux используется только LF. Для преобразования текста из формата DOS в Linux, то есть для удаления символа новой строки ‘^M’ из файла используется команда fromdos:

fromdos linuxfile

Для обратного преобразования текстового файла из Linux в DOS, то есть добавления символа новой строки ‘^M’ а так же для того чтобы файл могли прочитать клиенты Windows используется команда todos:

todos dosfile

Если же у вас нет утилит fromdos/todos, можно воспользоваться простым трюком:

cat dosfile | col -b > linuxfile

Хочу заметить, что, если вы сталкиваетесь с этой проблемой, то это означает, что вы работаете с файлом, который редактируется как в Linux так и Windows среде. Рекомендую вам прочитать раздел об Oplocks блокировках для предотвращения потери данных …

Если вы работаете с файлами только в Windows, можно просто использовать текстовый редактор, умеющий конвертировать между DOS/Linux. Для Windows, вы можете попробовать Editeur. Для Macintosh, попробуйте BBEdit или TextMate.

Перемещаемые профили

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

К сожалению, это как решает, так и создает дополнительные проблемы. Профили пользователей увеличиваются в размерах, они могут вырасти до 20, 50, 100, 1000 мегабайт или даже больше. Это увеличение размеров приводит к задержкам при входе, так как требуется дополнительное время для копирования профиля пользователя с сервера на локальный компьютер и обратно при выходе из системы. Кроме того, при входе пользователя в систему на нескольких компьютерах одновременно, последний компьютер “выигрывает”, насколько это то, что должно быть по умолчанию.

Вам все это уже очень нравится? Ну тогда начнем.

Измените ваш файл конфигурации к в примере ниже:

[global]
domain logons = yes
domain master = Yes
logon drive = P:
logon home = \%L%U
logon path = \%Lprofile%U
netbios name = fluffygerbil
os level = 255
preferred master = yes
security = user
wins support = yes
workgroup = fluffygroup

[profile]
path = /cifs/profile
read only = no
profile acls = yes
create mode = 0600
directory mode = 0700
browseable = no

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

# mkdir -p /cifs/profile
# chmod 1755 /cifs/profile

Просто перезапустите сервер Samba, и получите перемещаемые профили пользователей.

Если что то не работает, у вас одна из двух возможных проблем в настройке групповых политик (gpedit.msc) на клиенте Windows:

1. Включите «Не проверять права пользователя Директорий Перемещаемого Профиля» и перезагрузите компьютер. Из описания Windows для этого параметра: “Для операционных систем Windows 2000 Professional без SP4 и Windows XP без SP1, права доступа по умолчанию на вновь созданный профиль – полный контроль доступа для пользователя и отсутствие доступа к файлам для группы администраторов. Вышеописанный параметр задаст корректные права, если папка профиля уже существует. Для семейства серверов Windows Server 2003, Windows 2000 Professional SP4 и Windows XP SP1, если профиль существует, поведением по умолчанию является проверка директории на корректность прав и запрет на копирование файлов из/в перемещаемый профиль если права доступа заданы некорректно. При включении этого параметра вы можете изменить поведение Windows. При включении параметра Windows перестанет проверять права доступа к папке, если она существует. При отключении параметра или неиспользовании этой настройки И при условии что папка перемещаемого профиля существует И пользователь или группа администраторов не являются владельцами этой папки, Windows НЕ будет копировать файлы из/в перемещаемый профиль. Пользователю будет выведено сообщение об ошибке, также информация о ней будет зафиксирована в журнал ошибок. Будет использован закешированный профиль пользователя, или если таковой не существует создастся временный профиль пользователя. Заметьте, что настройки должны быть сделаны на клиентском компьютере, а не на сервере, так как клиентский компьютер устанавливает права доступа на папку перемещаемого профиля в момент его создания. Заметьте также, что если параметр включен поведение будет таким же как в Windows 2000 Professional без SP4 и Windows XP Professional.”

– или –

2. Включите настройку разрешать только локальные профили пользователей (при этом совершенно забыв о Перемещаемых Профилях Пользователей) и перезагрузите компьютер. Из описания Windows для этого варианта: “Этот параметр определяет, будут ли перемещаемые профили пользователей доступны на данном компьютере. По умолчанию, когда пользователь с перемещаемым профилем пользователя входит в систему на компьютере, его перемещаемый профиль записывается на локальный компьютер. Если он уже входил в систему на этом компьютере и раньше, перемещаемый профиль объединяется с локальным профилем. Аналогичным образом, когда пользователь завершает сеанс работы, локальная копия его профиля, включая любые изменения, которые он сделал, объединяется с серверной копией его профиля. Использованием этого параметра можно запретить пользователям использование перемещаемых профилей на конкретном компьютере. Если вы включите этот параметр, происходит следующее на целевом компьютере: При первом входе в систему, пользователь получает новый локальный профиль, а не перемещаемый профиль. При выходе из системы изменения сохраняются в новом локальном профиле. При всех последующих входах будет использоваться локальный профиль. Если вы отключите этот параметр или не настроите его, то по умолчанию все будет происходить , как описано выше. Если вы включите параметры “Запретить перемещаемому профилю изменения на сервере” и “Разрешить только локальные профили пользователей”, перемещаемые профили будут отключены. Примечание: Этот параметр влияет только на перемещаемые профили пользователей “.

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

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

Примечание: Windows клиенты ожидают следующие права доступа к файлам для всех перемещаемых профилей, независимо от того, Windows сервер или Samba сервер (Таким образом, мы должны попытаться установить необходимые разрешения командой CHMOD).

Таблица 1. NTFS разрешения для директории перемещаемого профиля. Учетная запись пользователя Windows     Минимальные требуемые разрешения
Создатель/Владелец     Полный доступ, только поддиректории и файлы
Администратор     Нет
Группа безопасности пользователей, которым необходимо копировать данные на общий ресурс     Чтение папки/Чтение данных, Создание папки/Добавление данных – Только для папки
Все     Нет прав
Локальная система     Полный доступ, Эта папка, Поддиректории и файлы

Таблица 2. Уровень прав доступа к общему ресурсу (SMB) для папки Перемещаемого Профиля Учетная запись пользователя Windows     Права доступа по умолчанию     Минимально требуемые права доступа
Все     Полный доступ     Нет доступа
Группа безопасности пользователей, которым необходимо копировать данные на общий ресурс     N/A     Полный доступ

Таблица 3. NTFS Разрешения для каждого Перемещаемого профиля пользователя Учетная запись пользователя Windows     Права доступа по умолчанию     Минимально требуемые права доступа
%Username%     Полный доступ, Владелец директории     Полный доступ, Владелец директории
Локальная система     Полный доступ     Полный доступ
Администратор     Нет доступа     Нет доступа
Все     Нет доступа     Нет доступа

Безопасность Samba

Microsoft Windows не хранит и не передает пароли в виде открытого текста. Вместо этого он использует хеш пароля пользователя для проверки подлинности. Суть алгоритмяа хеширования в том, что часть данных (пароль) преобразуется математической формулой (алгоритм хэширования). В Microsoft Windows реализованы три из этих алгоритмов:

* LAN Manager ( “LM”, “LAN MAN”) (самый безопасный, самый совместимый). Пароль делится на две 7-символьных строки в верхнем регистре, затем каждая строка шифруется 56-битный DES ключом со строкой ”KGS!@#$%” (без кавычек), потом результаты объединяются.
* NT LAN Manager версии 2 ( “NTLMv2”) (самый безопасный и наименее совместимый)

Windows NT и более поздние версии не используют первый алгоритм (LM), но хранят локально эти небезопасные хэши паролей в дополнение к безопасной версии, для обратной совместимости. Стоит отметить, что так как хранятся как LMHash так и NTLM хэши, то это ослабляет безопасность. Даже самый сложный пароль сводится к простому семизначному одно регистровому паролю. Если ваша сеть не включает компьютеров с Windows 9x/ME, настоятельно рекомендуется отключить аутентификацию LM на сервере Samba, и увеличить минимальный протокол, используя следующую глобальную конфигурацию в файле smb.conf. Обратите внимание, что это только адреса запросов паролей на сервер, ничего не хранится локально на клиентской стороне.

lanman auth = no
lm announce = no
min protocol = NT1

Фильтрация TCP/IP

Во первых, не запускайте Samba небезопасно, с публичным доступом к интернету. Это способ нарваться на неприятности. Мы можем конечно сделать ограничения как ниже:

# Разрешить подключения с IP Адресов
hosts allow = 192.168.0.0/16 127.0.0.1
# Все остальные отклоняем
hosts deny = ALL
# Если на компьютере более одного Интернет адреса можно ограничить
# подсеть которую будет прослушивать Samba.
interfaces = 192.168.0.0/24 127.0.0.1
bind interfaces only = Yes

Дополнительно можно отфильтровать трафик, например используя iptables:

# Разрешить доступ к Samba из определенной подсети
iptables -A INPUT -p icmp -s 192.168.0.0/16 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.0/16 –dport 137:138 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.0/16 -m multiport –dports 139,445 -j ACCEPT
# Регистрировать попытки несанкционированного доступа…
iptables -A INPUT -p udp –dport 137:138 -m limit -j LOG
iptables -A INPUT -p tcp -m multiport –dports 139,445 -m limit -j LOG
# …пресечь попытки несанкционированного доступа
iptables -A INPUT -p udp –dport 137:138 -j REJECT –reject-with icmp-port-unreachable
iptables -A INPUT -p tcp -m multiport –dports 139,445 -j REJECT –reject-with tcp-reset

Шифрование SSL

Хорошо это или плохо, но поддержка SSL прошла свой путь dodo и была удалена из Samba версии 3. Разработчики Samba пришли к соглашению, что поддержку SSL в Samba лучше осуществлять внешними утилитами. Добавление неподдерживаемого и в основном неиспользуемого кода привело в итоге к удалению SSL из Samba. Последнее сообщение об удалении SSL Шифрования датируется маем 2002 года:

Предупреждаем: –with-ssl умер.

Хорошо, как это не печально, но общее мнение разработчиков samba по опции –with-ssl что это была не очень хорошая идея, и лучше использовать внешние утилиты. Так что же с опцией –with-ssl? И кто ее убил? Опция –with-ssl позволяет серверу Samba туннелировать протокол SMB внутри соединения SSL. К сожалению для реализации этого существует только два клиента: smbclient и sharity. Клиенты Windows просто не знают как использовать SSL. Так почему убили? Поддержка SSL была бы полезна комунибудь? Некоторое маленькое количество пользователей могло бы воспользоваться поддержкой SSL, но большинство дистрибьютеров Samba она только смущает.А пользователи использующие данную возможность могут достичь того же результата, воспользовавшись программой ’stunnel’ запускаемой из как ‘LIBSMB_PROG’ программа. Ну и наконец, код был громозкий и уродливый с большими #ifdef вставками там где должен быть простой код.

Шифрование SSH

Желание работать с сервисами SMB/CIFS через WAN и глобальную сеть несколько выше моего понимания. Одним из методов шифрования SMB трафика по сети является “tunnel” SMB через SSH, используя метод известный как перенаправление портов. Это один из частых вопросов, задаваемых системными администраторами, желающими безопасно передавать SMB трафик. Хотя это и возможно, но не лишено недостатков, которые мы рассмотрим. Нужно понимать что использование SMB без SSH через линию диалап со скоростью 56k — это очень медленно и может привести вас к разочарованию. При отсутствии более скоростного подключения, даже имея терпение вы вероятно не захотите использовать туннелирование через SSH. Есть еще разочарования, из за ограничений в GUI API Windows 9x/ME, вы не сможете туннелировать окно MS-DOS. Как только вы захотите взаимодействовать с удаленным сервером через GUI, компьютер зависнет на 30-60 секунд, а потом получите ошибку что путь не найден или недоступен. Одна извозможных причин такого поведения это16/32 разрядный тип ОС Windows, однако подтверждения об этом нет ни от Microsoft, ни от сообщества Samba. В 32 разрядных системах Windows нет таких проблем. Это как говорится хорошая новость, тунелирование SMB поверх SSH возможно. Сервис имен или другие сервисы использующие протокол UDP не могут быть перенаправлены через SSH, ограничение перенаправляемых портов в SSH (только TCP). Поэтому сосредоточимся только на перенаправлении TCP/port 139. Так как тунелирование невозможно придется сначала настроить разрешение имен с помощью WINS/broadcast.

Windows содержит два различных файла, HOSTS и LMHOSTS. Первый для преобразования Имени хоста в IP адрес (по аналогии с DNS), и второй для преобразования NetBIOS имени в IP адрес(по аналогии с WINS). LMHOSTS изначально заменял “LAN Manager”. Эти файлы испоьзуются как резерв при недоступности служб DNS или WINS. Так как запрос на разрешение имен NetBIOS выполняется по протоколу UDP, и не может быть туннелирован через SSH, первым делом отредактируем файл LMHOSTS:

REM This is c:windowssystem32driversetcLMHOSTS
127.0.0.1       FAKENAME        #PRE

FAKENAME это фиктивное NetBIOS имя которое мы будем использовать для нашего сервера Samba. Поле #PRE вынудит Windows закешировать имя в памяти, иначе оно не всегда будет доступно. Файл LMHOSTS не будет обработан Windows до перезагрузки или пока вы не выполните команду, которая обновит NetBIOS кеш имен (-R должно быть в верхнем регистре):

NBTSTAT -R

Настройте своего клиента SSH для перенаправления порта 139/TCP на порт localhost 139/TCP сервера, и установите соединение через SSH. После этого в командной строке введите следующие команды:

NET VIEW \127.0.0.1
NET VIEW \FAKENAME

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

Samba, производительность и оптимизация

Можно ускорить работу Samba в зависимости от требуемой ситуации. В нашем распоряжении несколько вариантов конфигурации.

Параметры Socket

Одним из полезных параметров является изменение настроек sockets в файле конфигурации Samba. Стоит отметить что все сети различны (тип соединений, коммутаторы, шумы, и т. д.), поэтому не существует универсальной магической формулы для всех сетей. Поэтому если вы хотите оптимизировать производительность Samba для своей сети, вам придется экспериментировать. Для особо упертых рекомендую прочитать страницу man для socket(7). Остальным же нужно просто добавить в конфигурацию Samba следующее SO_KEEPALIVE, SO_RCVBUF=8192, and SO_SNDBUF=8192.

Последние два параметра определяют максимально возможны размер буферов приема и передачи Samba. Уменьшение размера буферов приводит к увеличению фрагментации пакетов, увеличение размера ( вплоть до максимального значения) к уменьшению фрагментации. Лучшим решением будет поставить эксперимент по созданию одного тестового файла размером 100 MB и 100 тестовых файлов по 1 MB, и оценить время копирования их с сервера и на него. На всякий случай рекомендую каждый раз останавливать и запускать сервер Samba для предотвращения кеширования данных. По результатам тестирования времени копирования для разных значений SO_RCVBUF и SO_SNDBUF вы можете определить оптимальное значение для вашей локальной сети. Чтобы создать тестовы файл выполните:

$ dd if=/dev/zero of=testfile count=10240 bs=10240

Для создания 100 файлов размером 1MB выполните:

#!/bin/sh
for ((counter=1; counter<=100; counter++)); do
dd if=/dev/zero of=test${counter} count=1024 bs=1024
done

После сбора данных, добавьте их в график для определения наиболее оптимальных значений параметров socket. На основании этих значений измените параметры socket в файле конфигурации Samba для вашей локальной сети.

Гибкие блокировки (oplocks)

Что вы получаете в Карнеги Холле? Практику, практику, практику. Чего не хватает в классическом подходе, так это то что можно получить на практике. Каждый человек имеет свой метод или подход, будь то музыка или артистическая деятельность. Так и гибкие блокировки — это один методов из множества возможных сделать что-то (в нашем случае получить доступ к файлам по сети). Конечно сейчас они модны и имеют спрос как на Священный Грааль, и их можно настроить. Загвоздка в том что: они являются ароматом эпохи, при этом имея свои преимущества и свои недостатки (смотрите: базы данных Microsoft Access).

Понятие гибкие блокировки лучше всего описано в старой статье 129202 базы знаний Microsoft

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

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

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

Посмотрим как работают гибкие блокировки второго уровня:

1. Станция 1 открывает файл, создавая запрос гибкой блокировки.
2. Поскольку другие рабочие станции не открывают этот файл, сервер выдает станции 1 монопольную гибкую блокировку.
3. Станция 2 открывает файл, создавая запрос гибкой блокировки.
4. Поскольку станция 1 пока ничего не пишет в файл, сервер запрашивает у 1 станции перерыв до второго уровня гибкой блокировки.
5. Станция 1 подчиняется, сбрасывая локально сбуферизированую информацию блокировки на сервер.
6. Станция 1 сообщает серверу что она перешла на второй уровень гибкой блокировки (альтернативно, станция 1 может закрыть файл).
7. Сервер отвечает второй станции на запрос открытия, предоставляя второй уровень гибкой блокировки. Другие рабочие станции так же могут открыть файл, получив при этом второй уровень гибкой блокировки.
8. Станция 2 (или любая другая станция открывшая файл) отправляет запрос записи SMB. Сервер возвращает ответ писать.
9. Сервер запрашивает все станции открывшие файл на полное отключение, с намерением отключить гибкие блокировки на файле. Поскольку рабочие станции могут в этот момент иметь незакешированую запись или блокировки, они не должны отвечать на сообщение о полном отключении; все что они должны сделать это отключить данные, локально закешированные в режиме упреждающего чтения.

А теперь кратко, отдельно от основной части статьи перечислим жемчужины мудрости (поражает язык повествования 🙂 , прим. переводчика)

* Монопольные блокировки необходимо отключать только для изоляции проблем.
* Гибкие блокировки повышают производительность, но потенциально могут приводить к потере закешированых данных в некоторых сетях, особенно в глобальных сетях
* Отключайте непосредственные и монопольные блокировки в сетях с низкой пропускной способностью.
* Отключайте непосредственные I/O и монопольные блокировки в сетях с большими задержками.
* Уменьшение времени ожидания для клиента для предотвращения нарушения монопольной блокировки, может позволить определять зависших клиентов, но потенциально может привести к потере кэшированных данных.

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

Второй уровень монопольной блокировки это просто фантастический способ сказать, что вы обеспечиваете гибкую блокировку на файл, который будет рассматриваться как “только для чтения”. Обычно используется для файлов, которые открываются только для чтения, или только для файлов в которые клиент не имеет намерения осуществлять запись (по крайней мере, на начальном этапе).

Ядро монопольных блокировок по существу это метод, позволяющий ядру Linux сосуществовать с гибкими блокировками файлов Samba, хотя это сильно утрировано. SGI IRIX и Linux являются единственными двумя Unix’s, которые на данный момент поддерживают монопольные блокировки.

Если ваша система не поддерживает монопольные блокировка ядра, вы должны отключить монопольную блокировку при доступе к одним и тем же файлам из обеих Unix/Linux и Smb клиентов. Несмотря на это, монопольная блокировка всегда должна быть отключена, если вы используете файл базы данных (например, Microsoft Access) между несколькими клиентами, так как при запросе на прерывание первого клиента придется синхронизировать весь файл (а не одну запись) , что приведет к заметной задержке выполнения программы, и, что более вероятно, в первую очередь к проблемам с доступом к базе данных. Замечено, что файлы личных папок Microsoft Outlook (*. PST) очень плохо реагируют на монопольные блокировки. Если сомневаетесь, отключите монопольные блокировка и заново настройте вашу систему. Выигрыш от включения монопольных блокировок будет, если кэширование на стороне клиента является желательным и надежным в вашей сети. Если ваша сеть медленная и/или ненадежна, или вы обмениваетесь файлами при помощи других механизмов совместного использования файлов (например, NFS), либо через глобальную сеть или несколько человек, будут получать доступ к файлам часто, вы, вероятно, не получите выигрыша от применения монопольной блокировки, лучше отключите монопольную блокировку на общем ресурсе. Еще необходимо учитывать скорость доступа к файлам. Если монопольная блокировка не предоставляет существенного увеличения скорости при работе с файлами для вашей сети, может и не стоит с ними связываться. Также вы можете отключить монопольную блокировку на отдельный файл на общем ресурсе:” veto oplock files = /*.MDB/*.MDB/”.

Если у вас возникли проблемы с монопольной блокировкой, о чем свидетельствуют записи в логах Samba, вы можете играть безопасно и отключите обе монопольную гибкую блокировку и level2oplocks

Вы можете отключить блокировки на общем ресурсе добавив файл конфигурации в секцию общего ресурса строку:

oplocks = False
level2oplocks = False

Альтернативно можно отключить блокировки на отдельные файлы:

veto oplock files = /*.mdb/*.MDB/

Эпилог

Эти два высказывания наверно наиболее подходят, для того чтобы подытожить работу с Samba и Windows.

Linus Torvalds, BOOT Magazine (Сентябрь 1998):

«В корне неправильно то, что они не имели никакого представления о вкусе, когда создавали операционную систему. Microsoft создала очень хорошо выглядящий пользовательский интерфейс, но внутренне это просто полный беспорядок. И даже люди, которые пишут программы для Microsoft, и которые обладают многолетним опытом работы, просто не знаю, как это работает внутри. Хуже того, никто не осмеливается изменить этого. Никто не смеет исправлять ошибки, потому что там такой беспорядок, что устранение одной ошибки, возможно, просто уничтожит сотни программ, которые зависят от этой ошибки. А Microsoft не заинтересована в любом устранении ошибок, корпорация заинтересована в зарабатывании денег. Нет никого кто бы гордился Windows 95 как операционной системой»

«Люди внутри Microsoft знают что это плохая операционная система, и они продолжают над ней работать, потому что хотят добавить в нее новые возможности, выпуская новые версии, и все это для того чтобы продать больше копий операционной системы»

«Проблема в том, что в течение долгого времени при таком подходе, когда никто ДЕЙСТВИТЕЛЬНО не исправляет ошибки (кроме того, когда они действительно очевидны), исход ужасен. Вы не можете доверять операционной системе, потому что при определенных обстоятельствах она спонтанно перезагружается, или зависает в процессе работы, что и не странно. Обычно она работает прекрасно и затем очень редко по некоторым полностью неизвестным причинам виснет намертво, и никто не знает почему. Ни Microsoft, ни опытный пользователь и конечно же ни полностью невежественный пользователь, который вероятно сидит, дрожа, и думая, ‘Что я делал неправильно?’ не делали при это ничего не правильного вообще»

«Это то что меня действительно раздражает»

Neal Stephenson, В начале… была командная строка:

«Мы предпочитаем простые деловые отношения и прямые сделки в Америке. Если Вы едете в Египет и, скажем, берете такси где-нибудь, Вы становитесь частью жизни таксиста; он отказывается взять Ваши деньги, потому что они унизили бы Вашу дружбу, он следует за Вами вокруг города, и проливает горячие слезы, когда Вы садитесь в такси другого парня. Все заканчивается тем, что вы встретили его детей и должны использовать всю свою смекалку что бы дать ему денег, не оскорбляя его чести. Это – exhausing. Иногда Вам нужно просто такси в манхэттенском стиле. Для получения американского стиля, где Вы можете только выйти, поймать такси и поехать куда вам нужно, должен существовать целый скрытый аппарат инспекторов, комиссий, и т.д — который прекрасен, пока такси дешевы, и Вы можете всегда им воспользоваться. Если система не в состоянии работать четко, это по крайней мере странно, приводит в бешенство и превращает разумных людей в заговорщиков. Но когда египетская система ломается, она ломается прозрачно. Вы не можете получить такси, но племянник Вашего водителя найдет вас пешком, чтобы объяснить проблему и принести извинения»

«Microsoft и Apple идут Манхеттенским путем, с проблемами скрытыми за стеной интерфейса. Linux идет Египетским путем, с проблемами на всем протяжении пейзажа»

Эта работа Oregon Tech Support, Inc. лицензируется Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License. Документ создавался в надежде оказаться быть полезным, однако предоставляется КАК ЕСТЬ БЕЗ ГАРАНТИЙ ЛЮБОГО ВИДА. OREGON TECH SUPPORT, INC. ЯВНО, ОТКАЗЫВАЕТСЯ ОТ ВСЕХ ДРУГИХ ГАРАНТИЙ.

Неофициальное Samba HOWTO: 1 комментарий

  1. Уведомление: Samba паролизация — Опусы

Добавить комментарий

Войти с помощью: