Смоленск 1.5 Dovecot и уровни доступа

Mark

New member
Сообщения
2
#1
Добрый день.

Astra Linux SE 1.5 (Smolensk)
Настроен почтовый сервер exim4+dovecot по документации Ruk_admin_1.pdf.
Проблема следующая:
Если клиент (user001) работает под уровнем выше 0 и в thunderberd примет письмо с 0 уровнем, то на почтовом сервере в папке /var/mail/user001/ изменится мандатная метка файла dovecot-uidlist
Код:
root@ns1:/var/mail/user001# pdp-ls -M /var/mail/user001/
итого 56
drwx--S---m--  2 user001 mail Уровень_3:Низкий:Категория_1,Категория_2,0xfffffffffffffffc:ccnr,ehole cur
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot.index.cache
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot.index.log
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot.mailbox.log
-rw-------m--  1 user001 mail Уровень_1:Низкий:Нет:0x0                                               dovecot-uidlist
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot-uidvalidity
-r--r--r--m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot-uidvalidity.5b1b6732
drwx--S---m--  2 user001 mail Уровень_3:Низкий:Категория_1,Категория_2,0xfffffffffffffffc:ccnr,ehole new
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             subscriptions
drwx--S---m--  2 user001 mail Уровень_3:Низкий:Категория_1,Категория_2,0xfffffffffffffffc:ccnr,ehole tmp
затем, когда user001 перезаходит под 0 уровнем и запускает клиента thunderberd, то он не видит никаких писем во входящих из-за несмены метки на этот файл.
Лог dovecot:
Код:
Jun 09 11:59:58 imap-login: Info: Login: user=<user001>, method=PLAIN, rip=192.168.2.75, lip=192.168.2.71, mpid=4090, session=<ut2wvTFucgDAqAJL>
Jun 09 11:59:58 imap(user001): Info: Current process with pid=4090 ppid=4056 (level=0, category=0x0)
Jun 09 11:59:58 imap(user001): Info: Current socket (level=0, category=0x0)
Jun 09 11:59:58 imap(user001): Info: getmacnam_r = OK
Jun 09 11:59:58 imap(user001): Info: Result of mac_set_proc() is 0 for pid 4090 (No such file or directory)
Jun 09 11:59:58 imap(user001): Info: Process with pid=4090 (level=0, category=0x0)
Jun 09 11:59:58 imap(user001): Info: /usr/sbin/astrase-fix-maildir /var/mail/user001
Jun 09 11:59:58 imap(user001): Info: /usr/sbin/astrase-fix-maildir /var/mail/user001
Jun 09 11:59:58 imap(user001): Error: open(/var/mail/user001/dovecot-uidlist) failed: Operation not permitted
Jun 09 11:59:58 imap(user001): Info: Can't read mail(level=0, category=0x0, uid=1)
Jun 09 11:59:58 imap(user001): Error: open(/var/mail/user001/dovecot-uidlist) failed: Operation not permitted
Jun 09 11:59:58 imap(user001): Info: Can't read mail(level=0, category=0x0, uid=2)
как видно из лога, команда /usr/sbin/astrase-fix-maildir /var/mail/user001 выполняется, но она не меняет метку файлу /var/mail/user001/dovecot-uidlist

если по ssh зайти на почтовый сервер под user001, то мы не видим этот файл:
Код:
user001@ns1:~$ pdp-ls -M /var/mail/user001/
итого 52
drwx--S---m--  2 user001 mail СС:Низкий:0xffffffffffffffff:ccnr,ehole cur
-rw-------m--  1 user001 mail Обычный:Низкий:0x0:ehole                dovecot.index.cache
-rw-------m--  1 user001 mail Обычный:Низкий:0x0:ehole                dovecot.index.log
-rw-------m--  1 user001 mail Обычный:Низкий:0x0:ehole                dovecot.mailbox.log
-rw-------m--  1 user001 mail Обычный:Низкий:0x0:ehole                dovecot-uidvalidity
-r--r--r--m--  1 user001 mail Обычный:Низкий:0x0:ehole                dovecot-uidvalidity.5b1b6732
drwx--S---m--  2 user001 mail СС:Низкий:0xffffffffffffffff:ccnr,ehole new
-rw-------m--  1 user001 mail Обычный:Низкий:0x0:ehole                subscriptions
drwx--S---m--  2 user001 mail СС:Низкий:0xffffffffffffffff:ccnr,ehole tmp
а вот под рутом видим:
Код:
root@ns1:/var/mail/user001# pdp-ls -M /var/mail/user001/
итого 56
drwx--S---m--  2 user001 mail Уровень_3:Низкий:Категория_1,Категория_2,0xfffffffffffffffc:ccnr,ehole cur
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot.index.cache
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot.index.log
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot.mailbox.log
-rw-------m--  1 user001 mail Уровень_1:Низкий:Нет:0x0                                               dovecot-uidlist
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot-uidvalidity
-r--r--r--m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot-uidvalidity.5b1b6732
drwx--S---m--  2 user001 mail Уровень_3:Низкий:Категория_1,Категория_2,0xfffffffffffffffc:ccnr,ehole new
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             subscriptions
drwx--S---m--  2 user001 mail Уровень_3:Низкий:Категория_1,Категория_2,0xfffffffffffffffc:ccnr,ehole tmp
если из под рута выполнить /usr/sbin/astrase-fix-maildir /var/mail/user001, то все становится нормально до следующего получения почты с уровнем выше 0
Код:
root@ns1:/var/mail/user001# pdp-ls -M /var/mail/user001/
итого 60
drwx--S---m--  2 user001 mail Уровень_3:Низкий:Категория_1,Категория_2,0xfffffffffffffffc:ccnr,ehole cur
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot.index.cache
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot.index.log
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot.mailbox.log
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot-uidlist
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot-uidvalidity
-r--r--r--m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             dovecot-uidvalidity.5b1b6732
drwx--S---m--  2 user001 mail Уровень_3:Низкий:Категория_1,Категория_2,0xfffffffffffffffc:ccnr,ehole new
-rw-------m--  1 user001 mail Уровень_0:Низкий:Нет:ehole                                             subscriptions
drwx--S---m--  2 user001 mail Уровень_3:Низкий:Категория_1,Категория_2,0xfffffffffffffffc:ccnr,ehole tmp
Собственно вопрос, как исправить ситуацию? Какие данные еще необходимы для поиска проблемы?

10.06.18
удалось более детально понять механизм проблемы
допустим клиент почты запущен под уровнем 2, тут ему пришло новое письмо
файл dovecot-uidlist стал с атрибутами Уровень_2:Низкий:Нет:0x0
и вот если юзер сейчас закроет тандерберд и перезайдет под меньшим уровнем, то права на этом файле так и останутся и проблема остается.
А вот если под этим же уровнем 2 перезапустить тандерберд, то на почтовом сервер выполниться /usr/sbin/astrase-fix-maildir /var/mail/user001 и атрибуты файла dovecot-uidlist станут нормальными Уровень_0:Низкий:Нет:ehole.
Теперь при выходе со 2 уровня в 1-ый или нулевой все будет нормально.
Приучить пользователей перед логаутом перезапускать почтовый клиент не вариант.
Надо как-то фиксить работу dovecot-а, чтобы внешний скрипт /usr/sbin/astrase-fix-maildir /var/mail/user001 запускался не только вначале подключения клиента, но и после его дисконекта. Ну или придумать еще какой-то костыль.
Пока что в таком виде работа почты под разными уровнями не возможна. Это серьезная проблема, которая стопорит внедрение данной системы. Неужели раньше никто с этим не сталкивался?
 
Последнее редактирование:

cogniter

Moderator
Team Astra Linux
Сообщения
101
#2
Добрый день, попробуйте навесить атрибут ehole на служебные файлы dovecot.

Например, такой командой:
Код:
find /var/mail/ -name dovecot*  -type f -exec /usr/sbin/pdp-flbl :::ehole {} \;
 

Mark

New member
Сообщения
2
#3
Добрый день, попробуйте навесить атрибут ehole на служебные файлы dovecot.

Например, такой командой:
Код:
find /var/mail/ -name dovecot*  -type f -exec /usr/sbin/pdp-flbl :::ehole {} \;
Добрый день, а какой смысл, если утилита astrase-fix-maildir делает тоже самое. Проблема в том, что если придет очередное письмо, то произойдет запись в файл dovecot-uidlist и на него опять установятся права Уровень_1:Низкий:Нет:0x0 т.е. флаг ehole затрется. Чтобы вернуть флаг ehole надо запустить astrase-fix-maildir под этим же уровнем.
Как мне видится, в данной ситуации помогло бы добавление в исходники dovecot выполнения команды /usr/sbin/astrase-fix-maildir /var/mail/user001 не только после login, но и после logout.