Bug 4560

Summary: Права доступа к базам 1с с помощью acl
Product: WINE@Etersoft Reporter: mlof <admin>
Component: Файловые операцииAssignee: Devaev Maxim <mdevaev>
Status: CLOSED FIXED QA Contact: Vitaly Lipatov <lav>
Severity: normal    
Priority: P3 CC: kondratyuk, lav
Version: 1.0.10   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 5032    
Deadline: 2009-03-08   

Description mlof 2009-11-26 13:00:26 MSK
Система: 
Терминальный сервер на базе Ubuntu 8.10 server; xfce4;
WINE@Etersoft version: 1.0.10-eter25/18

Каждая база 1с находится в своем каталоге. Для обеспечения безопасности доступа к базам задаю права пользователей на соответсвующие каталоги с помощью функции setfacl.
Сначала права на чтение каталога со всеми базами: 
setfacl -m u:user:rx /srv/bases
Затем полный доступ к каталогу с базой, в которой этот пользователь будет работать:
setfacl -m u:user:rwx -R /srv/bases/base_for_user

Получается достаточно красивая схема разграничения доступа пользователей к информационным базам. 
<b\>Иногда из-за непонятных мне причин пользователь не может открыть базу 1с. При входе в 1с базу на долю секунды выскакивает окно загрузки данных а затем  это окно исчезает</b>. В логах ничего. Симптом закрытия окна загрузки напоминает отсутствие прав доступа к данному каталогу, хотя при проверке прав доступа с помощью getfacl права на каталог выставлены корректно. 

Замечено, что при повторном выставлении прав доступа (запуска предыдущих двух команд), база 1с грузится нормально. Такое ощущение, что при повторном запуске снимаются какие-то блокировки. 

 Для решения данной проблемы мною придуман такой "костыль". Написан скрипт выставления прав доступа к соответствующему каталогу для каждого пользователя. Этот скрипт запускается каждые 5 минут, и при появлении этого "глюка" необходимо подождать 5 минут и продолжать работать, но это сильно напрягает бухгалтеров.

Очень не хочется отказываться от setfacl. Не понятно, кто виновник этого глюка: 1с, setfacl, etersoft@wine или файловая система?
Comment 1 Денис Баранов 2009-11-26 15:20:05 MSK
Посмотри по возможности.
Comment 2 mlof 2009-11-27 10:36:06 MSK
(In reply to comment #1)
> Посмотри по возможности.
> 

Чтож подождем...
Comment 3 Devaev Maxim 2009-12-14 22:47:00 MSK
А в консоли при этом wine что-нибудь пишет?
Comment 4 mlof 2009-12-15 15:54:44 MSK
(In reply to comment #0)
> Система: 
> Терминальный сервер на базе Ubuntu 8.10 server; xfce4;
> WINE@Etersoft version: 1.0.10-eter25/18
> 
> Каждая база 1с находится в своем каталоге.
> Для обеспечения безопасности доступа к
> базам задаю права пользователей на
> соответсвующие каталоги с помощью функции
> setfacl.
> Сначала права на чтение каталога со всеми
> базами: 
> setfacl -m u:user:rx /srv/bases
> Затем полный доступ к каталогу с базой, в
> которой этот пользователь будет работать:
> setfacl -m u:user:rwx -R /srv/bases/base_for_user
> 
> Получается достаточно красивая схема
> разграничения доступа пользователей к
> информационным базам. 
> <b\>Иногда из-за непонятных мне причин
> пользователь не может открыть базу 1с. При
> входе в 1с базу на долю секунды выскакивает
> окно загрузки данных а затем  это окно
> исчезает</b>. В логах ничего. Симптом
> закрытия окна загрузки напоминает
> отсутствие прав доступа к данному
> каталогу, хотя при проверке прав доступа с
> помощью getfacl права на каталог выставлены
> корректно. 
> 
> Замечено, что при повторном выставлении
> прав доступа (запуска предыдущих двух
> команд), база 1с грузится нормально. Такое
> ощущение, что при повторном запуске
> снимаются какие-то блокировки. 
> 
>  Для решения данной проблемы мною придуман
> такой "костыль". Написан скрипт выставления
> прав доступа к соответствующему каталогу
> для каждого пользователя. Этот скрипт
> запускается каждые 5 минут, и при появлении
> этого "глюка" необходимо подождать 5 минут и
> продолжать работать, но это сильно
> напрягает бухгалтеров.
> 
> Очень не хочется отказываться от setfacl. Не
> понятно, кто виновник этого глюка: 1с, setfacl,
> etersoft@wine или файловая система?
> 

В консоли ничего не пишет. Просто вываливается. Может стоит запустить с ключом -дебаг?
Comment 5 Devaev Maxim 2009-12-15 16:56:41 MSK
Да, попробуйте.
Comment 6 Vitaly Lipatov 2010-01-05 17:46:01 MSK
Тут нужно смотреть на наследование прав.
Некоторые файлы (например, 1cv7.lck) создаются заново при запуске первой 1С,
соответственно выставленные вами ACL на него не действуют.
Comment 7 Vitaly Lipatov 2010-01-26 20:32:39 MSK
Надо проверить у нас, обратив особое внимание на comment 6 (что происходит с правами на файлы, которые создаёт 1С) и постараться воспроизвести проблему без WINE.

Comment 8 Vitaly Lipatov 2010-03-08 19:58:42 MSK
Бага висит с ноября!
Comment 9 Devaev Maxim 2010-03-11 21:12:07 MSK
Базы, я так понимаю, получаете по самбе?
В smb.conf на сервере допишите:
------------------------------
inherit owner = yes
inherit acls = yes
inherit permissions = yes
map acl inherit = yes
------------------------------
Если будет глючить, можно попробовать добавить locking = no. (хотя сомневаюсь, что это правильно).
Comment 10 Devaev Maxim 2010-03-11 21:13:22 MSK
Ну и наконец, пример с наследованием прав:
-------------------------------
[liksys@kusanagi test]$ getfacl 1/
# file: 1/
# owner: liksys
# group: liksys
user::rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx

[liksys@kusanagi test]$ touch 1/1
[liksys@kusanagi test]$ getfacl 1/1
# file: 1/1
# owner: liksys
# group: liksys
user::rw-
group::rw-
other::rw-
-------------------------------
Comment 11 Vitaly Lipatov 2010-03-11 21:36:33 MSK
(In reply to comment #9)
> Базы, я так понимаю, получаете по самбе?
Базы лежат в локальном каталоге.

> В smb.conf на сервере допишите:
> ------------------------------
> inherit owner = yes
> inherit acls = yes
> inherit permissions = yes
> map acl inherit = yes
> ------------------------------
> Если будет глючить, можно попробовать
> добавить locking = no. (хотя сомневаюсь, что это
> правильно).
Да, сверяй советы с документацией:
You can also disable byte-range locking completely by using locking = no. This is useful for those shares that do not support locking or do not need it (such as CD-ROMs).

Не надо никому советовать отключать блокировки.
Comment 12 Vitaly Lipatov 2010-03-11 21:39:44 MSK
(In reply to comment #10)
> Ну и наконец, пример с наследованием прав:
> -------------------------------
> [liksys@kusanagi test]$ getfacl 1/
> # file: 1/
> # owner: liksys
Ну вот а теперь надо это проверить на терминальном сервере между двумя пользователями.

И написать документацию, как настраивать совместный доступ на терминальном сервере при использовании ACL.

По моему предположению, исходная проблема вытекала из следующего:
"Для каталогов существуют права по умолчанию. Вот их установите, и тогда все объекты которые будут создаваться в этом каталоге, будут наследовать этот дефолтный список."
http://unixforum.org/index.php?act=findpost&pid=819561

Но поскольку бага возникает лишь иногда, возможно имеет место какая-то бага с кэшированием атрибутов или что-то такое.
Comment 13 Devaev Maxim 2010-03-11 22:00:21 MSK
Вся проблема в том, что дефлолтные права могут иметь только каталоги.
Comment 14 Devaev Maxim 2010-03-11 22:01:29 MSK
И мой пример почему-то не весь вставился, а я не проверил :-/

[liksys@kusanagi test]$ mkdir 1
[liksys@kusanagi test]$ setfacl -m d:u::rwx,g::rwx,o::rwx,m::rwx 1
[liksys@kusanagi test]$ mkdir 1/dir
[liksys@kusanagi test]$ touch 1/file
[liksys@kusanagi test]$ getfacl 1/*
# file: 1/dir
# owner: liksys
# group: liksys
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx

# file: 1/file
# owner: liksys
# group: liksys
user::rw-
group::rw-
other::rw-

[liksys@kusanagi test]$ la
итого 32
drwxrwxr-x.  3 liksys liksys  4096 Мар 11 21:59 .
drwx------. 54 liksys liksys 20480 Мар 11 21:54 ..
drwxrwxrwx+  3 liksys liksys  4096 Мар 11 21:59 1
[liksys@kusanagi test]$
Comment 15 Devaev Maxim 2010-03-11 22:02:48 MSK
(In reply to comment #13)
> Вся проблема в том, что дефлолтные права
> могут иметь только каталоги.
> 

Хм, извиняюсь, проблемы, собственно, нет :-)
Comment 16 Devaev Maxim 2010-03-11 22:06:02 MSK
(In reply to comment #14)
> [liksys@kusanagi test]$ setfacl -m d:u::rwx,g::rwx,o::rwx,m::rwx 1
вся соль именно в ключике d:, он задает дефолтный acl.
Comment 17 mlof 2010-03-13 13:50:09 MSK
(In reply to comment #16)
> (In reply to comment #14)
> > [liksys@kusanagi test]$ setfacl -m d:u::rwx,g::rwx,o::rwx,m::rwx 1
> вся соль именно в ключике d:, он задает
> дефолтный acl.
> 

Выставил права с ключиком d: . Будем ждать глюков. Первый день теста пошел... 
Comment 18 Vitaly Lipatov 2010-03-17 20:50:16 MSK
Багу закроем после получения положительного отзыва о работе
и создания раздела в документации об использовании ACL при
совместном доступе.

Как получить документацию для редактирования:
http://wiki.etersoft.ru/support/writedocs


Comment 19 mlof 2010-03-22 15:05:38 MSK
(In reply to comment #18)
> Багу закроем после получения
> положительного отзыва о работе
> и создания раздела в документации об
> использовании ACL при
> совместном доступе.
> 
> Как получить документацию для
> редактирования:
> http://wiki.etersoft.ru/support/writedocs
> 

Прошла неделя. У бухгалтеров пропало "моргание" окна запуска 1С. Я ни разу не включал скрипт перепрописывания прав доступа к базам. Заметил, что если использовать доступ к базам без ACL, то глюк появляется. Считаю, что использование ACL c ключом 'd', это обязательная опция при внедрении на сервере терминалов, т.к. убирает проблемы блокировок на временные файлы в каталоге с базой. Багу считаю ликвидированной. Спасибо.
Comment 20 Devaev Maxim 2010-03-22 15:30:42 MSK
> Прошла неделя. У бухгалтеров пропало
> "моргание" окна запуска 1С. Я ни разу не
> включал скрипт перепрописывания прав
> доступа к базам. Заметил, что если
> использовать доступ к базам без ACL, то глюк
> появляется. Считаю, что использование ACL c
> ключом 'd', это обязательная опция при
> внедрении на сервере терминалов, т.к.
> убирает проблемы блокировок на временные
> файлы в каталоге с базой. Багу считаю
> ликвидированной. Спасибо.

Не могли бы вы детально описать иерархию баз и какие права выставляли? Чтобы мы на будущее имели пример использования 1C+ACL
Comment 21 mlof 2010-03-23 12:49:36 MSK
(In reply to comment #20)
> > Прошла неделя. У бухгалтеров пропало
> > "моргание" окна запуска 1С. Я ни разу не
> > включал скрипт перепрописывания прав
> > доступа к базам. Заметил, что если
> > использовать доступ к базам без ACL, то глюк
> > появляется. Считаю, что использование ACL c
> > ключом 'd', это обязательная опция при
> > внедрении на сервере терминалов, т.к.
> > убирает проблемы блокировок на временные
> > файлы в каталоге с базой. Багу считаю
> > ликвидированной. Спасибо.
> 
> Не могли бы вы детально описать иерархию
> баз и какие права выставляли? Чтобы мы на
> будущее имели пример использования 1C+ACL
> 

Есть семь каталогов. В каждом из каталогов размещается база данных 1с одного из подразделений нашей фирмы. Главный бухгалтер должен иметь доступ ко всем базам. Бухгалтеры подразделений только к базам своих подразделений.
Каждый бухгалтер авторизуется своим логином\паролем. Аккаунты для авторизации на NX-сервере заведены в host-системе, как реальные пользователи со своими домашними каталогами в \home\...
Для того, чтобы каталоги с базами были видны в окружении wine. Устанавливаем линки, как написано в мануале.
Итак, необходимо распределить права по доступу к семи каталогам с базами 1с:
1) Главнму бухгалтеру рекурсивно выдаем полный доступ ко всем семи каталогам.
   setfacl -m u:glavbuh:rwx -R /srv/bases
!!! не забываем ключик d !!!
   setfacl -m d:u:glavbuh:rwx -R /srv/bases

2) Для того, чтобы в 1С можно было выбрать каталог с конкретной базой, сначала ВСЕМ!!!НЕ РЕКУРСИВНО!!! выставляем права на чтение на каталог, в котором расположены наши семь папочек с базами:
setfacl -m u:user1:rx /srv/bases
setfacl -m u:user2:rx /srv/bases
           .
           .
           .
setfacl -m u:userN:rx /srv/bases

3) Для каждого конкретного бухгалтера  РЕКУРСИВНО выставляем полныые права на нужный каталог. НЕ ЗАБЫВАЕМ КЛЮЧ "d": 
setfacl -m d:u:user1:rwx -R /srv/bases/base_for_user1
setfacl -m d:u:user2:rwx -R /srv/bases/base_for_user2
             .
             .
             .
setfacl -m d:u:userN:rwx -R /srv/bases/base_for_userN

4) Логинимся на сервер. Запускаем 1С. Жмем "добавить базу". Заходим в каталог с базами. Видим, что выбрать можно только разрешенные базы. 

В процессе эксплуотации сервера терминалов пришлось перейти с XFCE 4 на GNOME.
Т.к. в XFCE не решаема проблемма с фокусом модальных окон - "Прыгает фокус". В гноме - всё хорошо, но он гораздо больше ест ресурсов.

Если, что-то еще интересует, могу добавить.
Comment 22 Devaev Maxim 2010-03-23 17:19:36 MSK
Спасибо, все вполне подробно описано)
Comment 23 Devaev Maxim 2010-03-23 18:24:57 MSK
http://kb.etersoft.ru/Пример_использования_1C_и_ACL

Задокументировал решение. Ошибку можно закрывать.