Как настроить права доступа при сохранении отчетов из 1С в Linux, чтобы их видели другие пользователи?

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При работе с 1С:Предприятие на платформе Linux (в связке с Ubuntu, Xubuntu или Calculate Linux) системные администраторы часто сталкиваются со специфической проблемой: файлы, сохраненные непосредственно из интерфейса 1С в сетевые папки, оказываются недоступны для чтения или редактирования другим пользователям. В то же время файлы из LibreOffice сохраняются с корректными правами. Проанализируем ситуацию: 1С сохраняет файл с правами 640 (чтение/запись для владельца, чтение для группы, ничего для остальных), в то время как бизнес-процессы требуют как минимум 664 или 666.

Рассмотрим подробно причины такого поведения и разберем по шагам все способы решения этой задачи — от настройки прав на уровне сервера 1С до манипуляций с параметрами Samba и файловой системы Linux.

Выясним причину: почему 1С и LibreOffice ведут себя по-разному

Когда приложение создает файл в Linux, итоговые права доступа определяются системным вызовом создания файла и текущим значением umask (user file-creation mode mask) процесса. Выясним причину разницы: LibreOffice часто использует стандартные библиотеки рабочего окружения (GTK/Qt), которые учитывают пользовательские настройки сессии. Тонкий клиент 1С или серверный процесс 1С могут иметь собственный жестко заданный umask или специфическим образом вызывать функции ядра. В результате файл создается с правами -rw-r-----, что блокирует доступ коллегам по группе. Разберем способы исправления этой ситуации.

Решение 1: Изменение UMask в системной службе 1С (для серверных сохранений)

Если отчеты формируются на стороне сервера (например, в фоновых заданиях или при использовании веб-клиента), права файла зависят от окружения пользователя usr1cv8. По умолчанию в Ubuntu 20.04 служба запускается с маской, ограничивающей доступ посторонним.

Проанализируем шаги по изменению настроек службы:

  1. Откроем файл конфигурации службы 1С. Обычно он находится по пути /lib/systemd/system/srv1cv83.service.
  2. Найдем секцию [Service].
  3. Добавим параметр UMask. Если мы хотим права 664, ставим маску 0002. Если нужны полные права 666, ставим 0000.

Пример модифицированного блока конфигурации:


[Service]
Type=simple
User=usr1cv8
Group=grp1cv8
UMask=0002
ExecStart=/opt/1cv8/x86_64/8.3.x.x/ragent -daemon

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


systemctl daemon-reload
systemctl restart srv1cv83

Решение 2: Настройка принудительного наследования прав в Samba

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

Рассмотрим параметры в файле smb.conf для конкретной папки:

Пример настройки секции в /etc/samba/smb.conf:


[Reports]
path = /srv/samba/reports
writable = yes
browseable = yes
force create mode = 0664
force directory mode = 0775
force group = sambashare
inherit permissions = yes

Параметр force group гарантирует, что владельцем группы файла всегда будет $sambashare, что в сочетании с 0664 даст всем участникам этой группы право на чтение и запись, независимо от того, что "попросила" 1С при создании файла.

Решение 3: Использование механизма SGID на уровне файловой системы

Посмотрим на ситуацию со стороны файловой системы Linux. Существует специальный бит — SGID (Set Group ID). Если он установлен на папку, то все новые файлы, создаваемые внутри неё, автоматически наследуют группу этой папки, а не основную группу пользователя, создавшего файл.

Разберем реализацию этого метода:

  1. Установим нужную группу на папку: chgrp -R sambashare /path/to/reports
  2. Установим SGID бит: chmod g+s /path/to/reports

Теперь любой файл, который сохранит 1С, будет принадлежать группе sambashare. Однако, если 1С продолжает ставить маску 640, группа все равно не сможет записывать (только читать). Поэтому данный метод часто комбинируют с ACL.

Решение 4: Применение Default ACL (Access Control Lists)

Это наиболее современный и гибкий способ решения проблем с правами в Linux. Механизм Default ACL позволяет задать правила именования прав, которые будут применяться ко всем новым объектам в директории "по умолчанию", перекрывая стандартный umask процесса.

Проанализируем команды для настройки:

  1. Установим права по умолчанию для группы на чтение, запись и выполнение (выполнение нужно для входа в папки): setfacl -d -m g:sambashare:rwx /path/to/folder
  2. Установим аналогичные права для уже существующих файлов: setfacl -R -m g:sambashare:rwx /path/to/folder

После этого, даже если 1С создаст файл с правами владельца 600, эффективные права для группы, заданные через ACL, позволят другим пользователям работать с отчетом.

Решение 5: Настройка монтирования CIFS на клиенте

Если сетевая папка примонтирована к клиентской машине (Xubuntu) через mount или /etc/fstab, проверьте параметры монтирования. Часто именно там задаются маски, которые "режут" права доступа.

Посмотрим на правильную строку в /etc/fstab:


//server/share /mnt/1c_reports cifs credentials=/home/user/.smbcreds,iocharset=utf8,file_mode=0666,dir_mode=0777 0 0

Использование file_mode=0666 заставляет систему монтирования представлять все файлы как доступные всем на чтение и запись, что часто решает проблему визуального отсутствия прав в интерфейсе ОС.

Резюме и рекомендации

Для гарантированного результата рекомендуем комбинированный подход: настройку Samba (force create mode) совместно с Default ACL на сервере, где хранятся файлы. Это исключит влияние настроек конкретных клиентских машин и версий платформы 1С на доступность важных финансовых отчетов. Если же файлы сохраняются на локальный диск сервера под управлением 1С, то основным инструментом настройки будет правка srv1cv83.service с установкой корректного UMask.

← На главную