从 python 脚本读取具有 root 权限的文件

Read a file with root permissions from python script

此时我在读取文件权限(root)方面遇到了一些问题。我试图在我的系统 (rsyslogd) 中打开一个由 iptables 生成的日志文件。因此,当我将该文件生成到 /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,但我不是很了解。

我解决了这个问题。包含由 rsyslogd 创建的文件权限。默认情况下是八位字节 644,但在我的情况下是错误的 (640)。

所以,我只是在我的系统中更改 /etc/rsyslog.conf 的值,现在 /var/log/ 中生成的新文件具有正确的权限。

$FileCreateMode 0644

fileCreateMode [default 0644] [octalNumber]

Default: 0644

Sets the default fileCreateMode to be used for an action if no explicit one is specified.

File Output Module rsyslog configuration

感谢您的帮助! =)

PD:现在我对 pygtail 生成的 .offset 文件有另一个问题(也需要权限)。但那是另一个问题,而不是不符合这个问题。