【问题标题】:Read a file with root permissions from python script从 python 脚本读取具有 root 权限的文件
【发布时间】:2023-03-21 14:35:02
【问题描述】:

此时我在读取文件权限(root)方面存在一些问题。我正在尝试在我的系统(rsyslogd)中打开由 iptables 生成的日志文件。因此,当我将该文件生成到 /var/log/iptables.log 时,由 root 用户创建(而不是我的用户拥有 sudoers 配置授予的所有权限)

我正在使用包装器打开文件(Pygtail),但与 python 中的 open 函数相同。

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这样的库,但我不是很了解。

【问题讨论】:

  • 你能以root身份执行脚本吗? (例如sudo)?
  • 是的,但如果有其他更好的可能性:((我刚刚看到一些与 SUID 相关的东西,但不知道它是否会相关。)
  • 看起来Pygtail 可能有一些导致权限问题的附加功能。您是否尝试过正常读取文件? print [line for line in open('/var/log/iptables.log').read().splitlines()]
  • @vesche 我试过了,但我有同样的权限问题。我认为解决方案可能是文件的位 SUID(但也不起作用=()
  • 我不知道这种形式是否危险,但它有效。我只是用chmod 更改文件的权限:chmod 4644 iptables.log。但我不明白为什么(这是 SUID 位,但只有在 3 个八位字节具有读取权限时才有效)。

标签: python file permissions root


【解决方案1】:

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

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

$FileCreateMode 0644

fileCreateMode [默认 0644] [octalNumber]

默认值:0644

设置默认的fileCreateMode用于一个动作,如果没有 明确指定一个。

File Output Module rsyslog configuration

感谢您的帮助! =)

PD:现在我对 pygtail (permissions too) 生成的 .offset 文件有另一个问题。但这是另一个问题,而不是对应于这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    相关资源
    最近更新 更多