Данную статью можно рассматривать как дополнение к публикации: Xubuntu 20.04 для бухгалтера 1С.
Цель: настроить сервер SAMBA на UBUNTU для файловых баз 1С.
Задачи:
1. установить SAMBA,
2. настроить SAMBA для работы баз 1С,
3. протестировать и сравнить работу 1С в Windows и Linux с общим ресурсом на Samba и на Windows.
1. Установка SAMBA
Samba - это пакет программ, которые предоставляют общий доступ к файлам и принтерам сетей Microsoft по протоколу SMB/CIFS. Для его установки необходимо выполнить следующую команду:
sudo apt install samba
На вопрос «Хотите продолжить? [Д/н]» нажимаем Д или Y .
Дальше продолжается скачивание и установка всех необходимых пакетов программ.
В итоге должна быть установлена клиентская и серверная части Samba.
Если не устанавлен Midnight Commander , то
sudo apt install mc
В Ubuntu следует изменить лимит на количество одновременно открытых файлов, в Linux это 1024, а в Windows - 16384. Для этого в файле /etc/security/limits.conf
нужно добавить две строки в конец:
* - nofile 16384
root - nofile 16384
После нажатия [Esc], сохраняем файл:
Файловая система должна быть ext4, btrfs или xfs. Будем использовать по умолчанию в Ubuntu - ext4 с размером блока не менее 4096 байт (4кб), а лучше 8192 байта для платформ 1С выше 8.3.8.
Чтобы просмотреть размер блока для файловой системы ext4 раздела /home нужно выполнить команду:
stat -f /home
Получим следующий результат, который показывает размер блока 4096 байт:
Перезагружаемся:
sudo reboot
2. Настройка анонимного SAMBA для работы баз 1С
Чтобы настроить нужно отредактировать файл /etc/samba/smb.conf.
Для нормальной работы сервера SAMBA не стоить менять большинство дефолтных настроек в этом файле. Изменим лишь небольшую часть.
Есть два вида комментариев:
если используется символ # - то указанное значение применяется по умолчанию,
символ ; обозначает предлагаемый вариант настройки.
smb.conf имеет три зарезервированные секции:
[global] - определяет опции, которые распространяются на все остальные секции, если в них явно не указано обратное.
[homes] - предоставляет удаленным пользователям доступ к своим (и только своим) домашним директориям. Если пользователи подключаются к сетевому ресурсу (адрес smb://server/username/ или \\server\username), то будут подключены к персональным домашним директориям, закрепленным как "домашний каталог" за пользователем, под учетной записью которого они зарегистрировались на samba-сервере. Чтобы удаленный пользователь мог авторизоваться на samba-сервере, необходимо добавить соответствующего пользователя в систему (useradd) и создать samba-пароль для этого пользователя (smbpasswd), который может отличаться от системного (passwd).
[printers] - отвечает за определение опций доступа к принтеру по сети.
Остальные секции, например [1CBases] будут соответствовать общим папкам, т.е. клиент на данном компьютере увидит общую папку 1CBases с правами, описанными в данной секции.
Начнем с глобальной секции [global], параметры которой применяются для всех сервисов.
Сначала следует указать версии протокола smb, с которыми будут работать Samba-сервер (Windows7 - Windows10) и клиенты:
sever min protocol = SMB2
server max protocol = SMB3
client min protocol = SMB2
client max protocol = SMB3
Задать имя рабочей группы Windows, по умолчанию WORKGROUP.
workgroup = WORKGROUP
Следующая опция определяет интерфейсы или подсети, с которыми будет работать Samba. Допускается смешанная запись либо можно указать только интерфейсы:
Само по себе указание интерфейсов не ограничивает Samba, для ограничений нужно включить следующую опцию:
Не будем менять дефолтные настройки.
Следующая опция
server role = standalone server
обозначает простой файловый сервер, не требующий подключения к домену.
Такая опция
map to guest = bad user
определяет способ гостевого доступа. При указанном значении гостем будет любой пользователь, который отсутствует в базе Samba. Также могут использоваться значения never - не использовать гостевой доступ и bad password - гостем будет считаться в том числе и существующий пользователь, если он неправильно введет пароль. Данное значение использовать не рекомендуют, так как при ошибке в пароле пользователь все равно получит доступ с гостевыми правами.
Чтобы создать общий ресурс, доступ к которому может иметь любой пользователь, нужно добавить в конец файла /etc/samba/smb.conf следующие строки:
[1CBases]
;locking = no
;oplocks = false
;level2 oplocks = false
comment = Shared for all
path = /home/user0/1CBases
read only = no
guest ok = yes
force create mode = 0777
force directory mode = 0777
В квадратных скобках имя ресурса, все что ниже скобок - секции этого ресурса.
locking = no - сервер не будет удовлетворять запросы блокировок от клиентов: все запросы на блокирование и разблокирование будут казаться клиенту прошедшими успешно;
oplocks = false - не генерировать блокировки oplocks (гибкие блокировки) в ответ на запрос открытия файла в открытой для доступа директории, отключает беспощадную буферизацию файлов на клиентах и повышает надежность, но снижает скорость;
level2 oplocks = false - рекомендуется, чтобы этот параметр был выключен при выключенном предыдущем параметре;
comment - описание ресурса, необязательный параметр;
path - путь к директории;
read only - режим только чтения, указываем no;
guest ok - разрешен ли гостевой доступ, указываем yes;
force create mode — чтение и запуск файлов разрешены без учета прав доступа DOS;
force directory mode — то же самое для папок.
Locking, oplocks, level2 oplocks - закомментированы, чтобы быстрее работала 1С, если будут проблемы с блокировками при многопользовательской работе, то нужно убрать комментарии.
Создадим саму директорию:
mkdir /home/user0/1CBases
установим на нее необходимые права - для гостевого ресурса это 777:
chmod 777 /home/user0/1CBases
Если нужна "расшаренная" папка на отдельном диске, то следует примонтировать этот диск, например, к папке 1CBases. В большинстве случаев достаточно упрощенной команды:
sudo mount /dev/sda1 /home/user0/1CBases
Посмотреть названия дисков и uuid для разделов можно так:
blkid
Далее необходимо установить права для гостевого доступа:
chmod 777 -R /home/user0/1CBases
Если в дальнейшем 1С не будет запускаться с базой из этой папки, то нужно будет отредактировать файл /etc/fstab для автомонтирования диска к папке /home/user0/1CBases. В опциях монтирования нужно указать user - что разрешает монтирование от лица обычного пользователя:
По умолчанию (если не указано иное) Samba для записи на общий ресурс использует 0744 для файлов и 0755 для директорий. Т.е. полный доступ остается только у владельца файла, остальные получают права только на чтение. Чтобы исправить это следует явно указать режим для новых файлов и папок, для этого используются строки:
create mode = 0777
directory mode = 0777
В этом случае итоговые права с учетом отображения прав доступа DOS в разрешения UNIX имеют особенности, в частности права на файлы устанавливаются как 766 или rwx-rw-rw. Поэтому запустить исполняемый файл сможет только тот, кто является его владельцем. Остальные получат сообщение об отсутствии прав доступа:
На неисполняемые файлы это никак не влияет. Если необходимо разрешить запуск, то вместо create mode следует использовать опцию force create mode, которая будет устанавливать разрешения без учета прав доступа DOS:
force create mode = 0777
Для полного запрета запускать файлы с общего ресурса необходимо использовать:
create mode = 0666
Данная опция полностью снимет права на выполнение для всех, но оставит полный доступ к исполняемым файлам.
Для тестирования настроек нужно набрать в командной строке, находясь в директории /etc/samba:
testparm
Если все нормально, то будет выдано ok.
Далее следует перезагрузить Samba-сервер:
sudo service smbd restart
Чтобы доступ к общей папке был по имени узла и в дальнейшем не было замедлений работы с файлами из общей папки, необходимо в файл на Windows 7 (для другой версии Windows путь может отличаться)
c:\Windows\System32\drivers\etc\hosts
добавить строчку:
192.168.254.253 lubx64
где lubx64 — сетевое имя нашего файлового сервера.
В linux файл находится обычно в /etc/hosts. Там добавляется строка такого же формата, как и в Windows.
Для ускорения работы не должно быть файервола и антивируса на Samba-сервере.
Перед началом работы желательно протестировать сеть с сервером Samba. В Windows нужно выполнить команду в терминале:
ping lubx64 -l 4096
а в linux:
ping lubx64 -S 4096
В ответ не должно быть получено что-то вроде:
Request time out
В итоге имеем настроенный Samba-сервер на компьютере lubx64 без авторизации с доступной всем для чтения и записи в сети общей папкой 1CBases.
3. Тестирование работы файловых баз 1С на Samba
Для проверки работы баз 1С в файловом режиме на Samba-сервере используем тест Гилёва для платформы 8.3 http://www.gilev.ru/1c/tpc/GILV_TPC_G1C_83.dt.
Характеристики Samba-сервера:
процессор — Intel Core i5 2700 МГц, оперативка — 16 Gb, HDD — WD800AAJS 80Gb (2007 год выпуска), сеть — Realtek 1Гбит/с, ОС — Lubuntu 20.04 x64.
Характеристики клиента:
VirtualBox6.0, процессор — Intel Pentium 4415U 2300 МГц, оперативка — 3 Gb, виртуальный SSD — WD Blue 3D NAND 1 Tb, сеть — Intel Pro/1000 MT 1Гбит/с, ОС — Windows 7 x32.
Тест с локальной базой на клиенте показал результат 34.01, что хорошо:
Тест с базой на Samba-сервере выдал результат 30.86, что на 3.15 меньше предыдущего, что тоже хорошо:
Далее выполним тест на хостовой машине-клиенте Linux Ubuntu 16.04 с характеристиками:
процессор — Intel Pentium 4415U 2300 МГц, оперативка — 8 Gb, виртуальный SSD — WD Blue 3D NAND 1 Tb, сеть — Realtek 1Гбит/с, ОС — Ubuntu 16.04 x64.
Тест с локальной базой на клиенте linux показал результат 45.45, что ближе к «замечательно»:
Для подключения сетевой папки Samba-сервера на linux-клиент надо установить пакет cifs-utils:
sudo apt-get install cifs-utils
и выполнить команду подключения:
sudo mount -t cifs //lubx64/1CBases /home/user0/Samba -o username=guest,password=,iocharset=utf8,file_mode=0777,dir_mode=0777
Таким образом подключается папка /1CBases с сервера lubx64 в каталог пользователя локальной системы /home/user0/Samba.
При использовании данной команды без явного указания протокола используется версия протокола smb1, если в smb.conf указано
sever min protocol = NT1 и client min protocol = NT1 .
Естественно ip-адрес для lubx64 должен быть прописан в /etc/hosts.
В 1С примонтированную "расшаренную" папку подключаем стандартным образом:
Тест с сетевой базой на Samba-сервере выдал результат 4.51, что почти в 10 раз хуже предыдущего и это недопустимо — работа с типовыми конфигурациями, например, Бухгалтерия 3.0 будет мучительной.
Такие же неутешительные результаты показала работа с «расшаренной» на Windows папкой из клиента Linux. При этом скорости копирования файлов с клиента на сервер и обратно находятся в пределах 1Гбит/с для гигабитной сетки, т. е. работа с файлами на сетевом ресурсе на «отлично». Только 1С «тормозит».
Значит причина не в самом Samba-сервере, с которым отлично работает 1С из Windows. Причиной, на мой взгляд, является пакет cifs-utils, выполняющий подключение к «расшаренным» Windows-ресурсам, и сама платформа 1С.
Действительно, при подключении с использованием cifs-utils нужно явно указывать версию протокола SMB, желательно третью версию. Например, SMB3:
sudo mount -t cifs //comp1/1CBases /home/user0/Samba -o username=guest,password=,iocharset=utf8,file_mode=0777,dir_mode=0777,vers=3.0
Монтировать можно и проще, но лучше использовать предыдущую команду для избежания ограничений прав доступа:
sudo mount.cifs //lubx64/1CBases /home/user0/Samba -o guest,vers=3.0
Для размонтировния следует набрать:
sudo umount /home/user0/Samba
Результат теста Гилева при использовании smb3 - 44.64 ("замечательно"):
В итоге получили отличную работу 1С в файловом режиме из Windows 7 с базами на Samba-сервере (Lubuntu 20.04) и «расшаренными» папками на Windows 7, но «плохую с минусом» из Linux с теми же сетевыми ресурсами по протоколу smb1, но отличную по протоколу smb3.
Общие выводы
В linux общий доступ к сетевой папке организуется с помощью пакета samba и настройкой конфигурационного файла smb.conf.
Чтобы иметь доступ по имени сетевого узла, необходимо отредактировать файл hosts как в windows-клиенте, так и в linux-клиенте.
Работа 1С в linux-клиенте (со стандартным пакетом cifs-utils) с файловой базой на общем ресурсе «почти неудовлетворительная» по протоколу smb1, но «замечательная» на windows-клиенте и по протоколу smb3.