【问题标题】:How to open a "root" file without typing your password every time?如何在不每次都输入密码的情况下打开“根”文件?
【发布时间】:2018-09-14 05:49:33
【问题描述】:

我阅读了this very interesting post,它非常接近我的需要,但并不完全,他们将它用于 shell 脚本,而我需要相同的解决方案,主要用于内置 Python 函数。

长话短说:

open("/dev/input/event3", "rb")

这不是开箱即用的,因为为了打开 event3,由于特权提升,我每次执行 Python 脚本时都需要输入密码。我该怎么做才能不必每次都输入密码,也不必将密码写在脚本中的平面文本中?我喜欢我在上面链接的帖子中提供的解决方案,但这不起作用,因为这意味着我在这个打开的文件上获得的-sort of speak-句柄将在另一个范围/python 脚本中。

有什么解决办法吗?

谢谢

编辑

我尝试修改我的整个 Python 脚本的权限,这样我就不需要输入密码,但这也没有用。我尝试了什么:

1) 修改访问权限

sudo chown root:root /home/username/myscript.py
sudo chmod 700 /home/username/myscript.py

2) 修改visudo

myusername  ALL=(ALL) NOPASSWD:  /home/username/myscript.py

3) 尝试执行我的 python 脚本现在失败了,尽管它显然在那里

myusername$ ./myscript
bash: ./myscript: No such file or directory

【问题讨论】:

  • 如果脚本是 root 拥有的,它不会以 root 身份运行,除非您使用 chmod 设置粘性位
  • 出于安全原因,我仍然不会以 root 身份运行整个脚本。最好生成一个sudo 子进程。
  • @Kos 我的 Python 脚本由父进程生成,父进程在一段时间后退出,因此子进程成为守护进程。我使用subrpocess.Popen 来创建孩子。如何在每次启动脚本时不必输入密码的情况下将孩子变成 sudo?
  • 你的脚本上面有something like #!/usr/bin/python 吗?另外,bash 找不到./myscript,因为你拥有的是./myscript.py
  • 快速提问:谁拥有 event3,它需要如此严格的权限吗?

标签: python linux permissions sudo


【解决方案1】:

我突然想到您可能正在倒退解决这个问题。目前,当您每次应该问“为什么我需要输入密码?”时,您都在问如何在不输入密码的情况下提升 python 脚本的权限。

只要文件不存在安全问题,脚本和相关文件都应归输入组中的非 root 用户所有。拥有 python 脚本的用户可以在没有 root 权限的情况下执行它来访问不需要它们的文件。

【讨论】:

    【解决方案2】:

    您可以使用以下语法在命令的同一行中传递 sudo 密码:

    echo password | sudo -S your_command
    

    这样在命令执行之前不会提示您输入 sudo 密码 - 听起来这就是您要寻找的内容。

    【讨论】:

      【解决方案3】:

      详细了解setuid。这很棘手(所以我什至不会在这里解释),并且是与身份验证相关的程序的基础,如sudosulogin 等。另见setreuid(2)setuid(2)、@ 987654324@, credentials(7), chmod(1).

      一本好的 Unix 编程书籍(例如 ALP 或更新的东西)应该用 system calls(列在 syscalls(2) 中)来解释 setuid。

      setuid 可执行文件不能是脚本(带有shebang);它们应该是二进制的ELF 可执行文件(参见elf(5))。但是,您可以用 C(或大多数其他编译语言,例如 Rust、Ocaml、C++、Go 等)编写一些运行 Python 脚本的 setuid 包装程序。小心,因为一个错误可能会打开一个巨大的security hole。但是有了这样一个 setuid 可执行文件,您就不必输入任何密码了。

      您还可以有一些特定的用户或组拥有/dev/input/event3(因此请适当地配置您的系统,通过udevsystemd...)并拥有一个setuid 或setgid 程序。

      顺便说一句,您可以配置sudo(请参阅sudoers(5)this)以避免输入任何密码。当然,这会削弱整个系统的安全性(但选择权在您手中)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 1970-01-01
        • 1970-01-01
        • 2020-11-09
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多