Прочитайте файл с правами root из скрипта python

В это время у меня есть некоторые проблемы с правами на чтение файлов (root). Я пытаюсь открыть файл журнала, созданный iptables в моей системе (rsyslogd). Итак, когда я создаю этот файл в /var/log/iptables.log, созданный пользователем root (вместо этого у моего пользователя есть все разрешения, предоставленные конфигурацией sudoers)

Я использую оболочку для открытия файла (Pygtail), но это то же самое, что и функция открытия в python.

for line in Pygtail(self.path_source):
    if len(line) > 1:
       print "\n Procesando línea --> " + str(line)
       self.processLine(line)

Когда я запускаю скрипт, мой терминал показывает мне эту ошибку:

IOError: [Errno 13] Permission denied: '/var/log/iptables.log'

Exception IOError: (13, 'Permission denied', '/var/log/iptables.log') in <bound method Pygtail.__del__ of <pygtail.core.Pygtail object at 0x7f2fb8127350>> ignored

И разрешения iptables.log:

-rw-r----- 1 root adm 0 dic 20 11:27 iptables.log

Я просто хочу открыть файл, прочитать все строки и обработать их в моем скрипте Python. Ничего больше.

Любые идеи? Я увижу некоторые библиотеки в pip, такие как oslo.rootwrap, но я не понимаю это очень хорошо.


person MGautier    schedule 30.12.2015    source источник
comment
Можете ли вы выполнить скрипт как root? (например, sudo) ?   -  person rafaelc    schedule 30.12.2015
comment
Да, но если есть другая возможность, лучше :( (Я только что видел что-то, связанное с SUID, но не знаю, будет ли это связано.)   -  person MGautier    schedule 30.12.2015
comment
Похоже, что Pygtail может иметь некоторые дополнительные функции, которые вызывают проблемы с разрешениями. Вы пробовали просто читать файл в обычном режиме? print [line for line in open('/var/log/iptables.log').read().splitlines()]   -  person vesche    schedule 30.12.2015
comment
@vesche Я пробовал, но у меня та же проблема с разрешениями. Я думаю, что решение может быть в битовом SUID файла (но тоже не работает =()   -  person MGautier    schedule 13.01.2016
comment
Не знаю, опасна эта форма или нет, но она работает. Я просто меняю права доступа к файлу с помощью chmod : chmod 4644 iptables.log. Но я не понимаю, почему (это бит SUID, но работает только в том случае, если 3 октета имеют права на чтение).   -  person MGautier    schedule 13.01.2016


Ответы (1)


Я исправил проблему. Заключается в том, что права доступа к файлам создаются rsyslogd. По умолчанию это октет 644, но в моем случае было неправильно (640).

Итак, я просто изменил это значение для /etc/rsyslog.conf в своей системе, и теперь новые файлы, сгенерированные в /var/log/, имеют правильные разрешения.

$FileCreateMode 0644

fileCreateMode [по умолчанию 0644] [восьмеричное число]

По умолчанию: 0644

Устанавливает режим fileCreateMode по умолчанию, который будет использоваться для действия, если он не указан явным образом.

Конфигурация модуля вывода файла rsyslog

Спасибо за вашу помощь! знак равно

PD: Теперь у меня есть другая проблема с файлом .offset, сгенерированным pygtail (с разрешениями тоже). Но это другая проблема, чем не соответствовать этому вопросу.

person MGautier    schedule 15.01.2016