【发布时间】: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