如何打开" root"文件没有每次都输入密码?

时间:2018-04-04 15:24:25

标签: python linux permissions sudo

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

长话短说:

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

这并不是开箱即用的,因为为了打开event3,我需要在每次执行Python脚本时输入密码,因为提升了权限。我能做什么,所以我不必每次都输入密码,也不必在我的脚本中用平面文字写密码?我喜欢上面链接的帖子中提供的解决方案,但这并不起作用,因为这意味着我在这个打开的文件中使用的语句 - 句柄将在另一个范围/ 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

3 个答案:

答案 0 :(得分:2)

我可能会向后看这个问题。目前,您在询问如何在不输入密码的情况下提升python脚本的权限,每次应该询问时,“为什么我需要输入密码?”

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

答案 1 :(得分:2)

详细了解setuid 。它很棘手(所以我甚至试图在这里解释它),并且是sudosulogin等身份验证相关程序的基础。另见{ {3}},setreuid(2)setuid(2)execve(2)credentials(7)

一本优秀的Unix编程书(例如chmod(1)或更新的东西)应该用ALP(在system calls中列出)来解释setuid。

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

您还可以让某个特定用户或群组拥有/dev/input/event3(因此,通过udevsystemd ...正确配置您的系统,并拥有setuid或setgid程序

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

答案 2 :(得分:0)

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

echo password | sudo -S your_command

这样一来,在命令可以执行之前不会提示您输入sudo密码 - 听起来就像你正在寻找的那样。