如何在linux中严格使用python读取具有管理员权限的二进制文件



所以我试图读取一个需要"sudo'd"进入的配置文件,但我试图仅使用python读取其内容而不使用终端。当我使用下面的代码时,我得到如下所示的错误:

with open('/etc/motion/motion.conf','rb') as file:
 data = file.readlines()
IOError: [Errno 13] Permission denied: '/etc/motion/motion.conf'

我可以尝试用python严格读取文件的内容吗?

您应该从shell脚本调用您的python文件,将该脚本的所有者更改为root,然后设置该脚本的SUID位。用户将能够运行脚本,但脚本的所有者将是root:

  • http://www.codecoffee.com/tipsforlinux/articles/028.html
  • http://www.linuxnix.com/2011/12/suid-set-suid-linuxunix.html
  • 等。

当然,您必须意识到这样做可能涉及的安全问题,但对于本地使用一个简单的脚本做一件事,这是OK的。

Permission denied表示您没有权限读取该文件。

如果您在Linux上,您应该使用chmod命令更改文件的权限。或者你可以使用sudo命令像这样运行python:

sudo python filename.py

或以root身份登录,然后运行python:

su - root
python filename.py


如果您希望每次都以root身份运行程序,您可以使用os.execlpe()函数,如下所示:

import os
import sys
euid = os.geteuid()
if euid != 0:
    args = ['sudo', sys.executable] + sys.argv + [os.environ]
    os.execlpe('sudo',*args)
with open('/etc/motion/motion.conf','rb') as file:
    data = file.readlines()
print data    

这个解决方案来自这里:
python脚本中的身份验证以root身份运行
@samplebias

相关内容

最新更新