Прочетете файл с 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 Опитах това, но имам същия проблем с разрешенията. Мисля, че решението може да е в bit 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] [octalNumber]

По подразбиране: 0644

Задава fileCreateMode по подразбиране, който да се използва за действие, ако не е указано изрично такова.

Конфигурация на rsyslog модул за изходен файл

Благодаря за вашата помощ! =)

PD: Сега имам друг проблем с .offset файл, генериран от pygtail (също и разрешения). Но това е друг проблем, който не отговаря на този въпрос.

person MGautier    schedule 15.01.2016