создать исключение в разрешениях папки для cron - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу получить письма, хранящиеся на локальном почтовом сервере, из задания cron. Задание выполняет служебную работу для сайта, размещенного на том же компьютере, и в настоящее время выполняется под учетной записью пользователя, настроенной для этого сайта. Проблема в том, что почтовый сервер имеет контроль над папкой, и, очевидно, пользователь, который запускает задание, не может просмотреть файлы в нем.

Если я настрою задание на выполнение под root, код будет запущен хорошо, но я бы предпочел сохранить cron под пользователем сайта.

Я попытался добавить запись acl для этого пользователя с помощью:

setfacl -Rm u:my_user:rw /folder

, и когда я проверяю результат с помощью getfacl , он показывает пользователя в списке, но код (включенный ниже) не работает (без исключений, просто без файлов). Кроме того, я добавил файл вручную, и, очевидно, параметр acl не применяется к новым файлам, поэтому даже если я его запустил, он не будет сканировать новые электронные письма - новые останутся заблокированными для чтения

Хотя, вероятно, это не применимо, cron запускает команду управления django, которая извлекает файлы, используя следующий фрагмент:

l_pendingEmls = []  
for box_name in l_mailBoxes.keys():
    l_boxData = l_mailBoxes[box_name]

    l_emldir = l_mailBoxPath + box_name + '/Maildir/new'

    print(l_emldir) 
    #load files from the box
    for dirpath, dirnames, filenames in os.walk(l_emldir):
        for f in filenames:
            fp = os.path.join(dirpath, f)

            # skip if it is symbolic link
            if not os.path.islink(fp):
                print(fp)
                mail = mailparser.parse_from_file(fp)

                print(mail.attachments)
                print(mail.body)
                print(mail.date)
                print(mail.subject)             

Учитывая, что Я действительно хочу избежать использования root в cron, каковы мои варианты? Я думал о втором задании, которое запускается как root и перемещает файлы, но почтовые ящики, которые я хочу сканировать, настраиваются с сайта, поэтому я не могу по-настоящему настроить вспомогательное задание, если не добавлю действительно уродливый хак с временными файлами , Кроме того, добавление большего количества рабочих мест для обхода разрешений похоже на идею, которая немного менее страшна, чем повышение первоначальной, поэтому я немного застрял

Любые идеи приветствуются, ребята и девчонки


VPS-машина с root ОС доступа: CentOs 6,8, python 3,6 django 2,1

...