我读了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
答案 0 :(得分:2)
我可能会向后看这个问题。目前,您在询问如何在不输入密码的情况下提升python脚本的权限,每次应该询问时,“为什么我需要输入密码?”
只要文件不是安全问题,脚本和相关文件都应归输入组中的非root用户所有。拥有python脚本的用户可以在没有root权限的情况下执行它,以访问不需要它们的文件。
答案 1 :(得分:2)
详细了解setuid 。它很棘手(所以我甚至试图在这里解释它),并且是sudo
,su
,login
等身份验证相关程序的基础。另见{ {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
(因此,通过udev
或systemd
...正确配置您的系统,并拥有setuid或setgid程序
顺便说一句,您可以配置sudo
(请参阅security hole和sudoers(5)
)以避免输入任何密码。当然,这会削弱整个系统的安全性(但选择权在你手中)。
答案 2 :(得分:0)
您可以使用以下语法在命令的同一行传递sudo密码:
echo password | sudo -S your_command
这样一来,在命令可以执行之前不会提示您输入sudo密码 - 听起来就像你正在寻找的那样。