我试图让python脚本访问Odroid XU4上的GPIO引脚,这需要sudo。我想简单地将GPIO引脚从关闭闪烁为开,然后再关闭。 python脚本很好,但是当我运行它时它会要求输入密码。
我已使用visudo
编辑了我的sudoers文件,无需密码即可访问GPIO。从之前的博客中我发现sudoers指令的顺序很重要,并考虑到了这一点。我目前的sudoers文件如下:
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
username ALL=NOPASSWD: /sys/class/gpio/export
username ALL=NOPASSWD: /sys/class/gpio/gpio174/direction
username ALL=NOPASSWD: /sys/class/gpio/gpio174/value
为什么在尝试访问GPIO引脚174时仍然提示我输入密码?我已经在%admin
和%sudo
行之后添加了NOPASSWD指令,正如其他帖子所建议的那样。
答案 0 :(得分:1)
/ sys / class / gpio / export(和其他)是伪文件,而不是程序。 Sudo致力于限制对程序的访问,而不是文件。
我建议查看https://serverfault.com/questions/641483/how-to-grant-user-modify-only-specific-protected-file-by-sudo(或者更具体地说,应该有一种方法可以使用扩展权限来授予用户对您关心的3个sys文件的访问权限。 39; t需要root。
或者,这可能更容易,你可以做到
username ALL=NOPASSWD: /usr/bin/blinkscript
(其中/ usr / bin / blinkscript是你的python程序,其中包含#!/ usr / bin / python和权限,因此用户名不能覆盖文件等。)
明确的具体演示: 给定一个包含以下内容的文件blinkscript:
#!/usr/bin/python
print ("Hello World")
放在/ usr / bin中,由root拥有,权限为700
(正如在做ls -l /usr/bin/blinkscript
时回来的那样:
-rwx ------。 1 root root 40 Apr 8 19:52 / usr / bin / blinkscript
)
然后在表单的sudoers文件的底部有一行:
user1 ALL = NOPASSWD:/ usr / bin / blinkscript
如果我,就像user1那样:
blinkscript
我得到:"许可被拒绝"
如果我,就像user1那样:
sudo blinkscript
我得到:" Hello World" (没有提示输入密码)
(请注意,我不必显式执行/ usr / bin / blinkscript,但这也有效)
如果我作为user2(谁没有任何sudo privs)做:
sudo blinkscript
我收到提示输入密码然后加入坏男孩名单
(另请注意,我使用700的权限来清楚地显示权限;执行类似755的操作也没关系,重点是如果您的脚本试图触摸/ sys文件,它将在使用sudo运行时工作而不是没有;我试图提出的一点是,如果您创建权限777或由user1拥有,那么user1可以编辑该文件以运行他们想要的任何命令,从而违背了不仅仅执行user1 all=all nopasswd: all
的目的第一名
)