编辑sudoers文件仍然要求输入密码

时间:2016-04-08 21:32:45

标签: sudo gpio sudoers

我试图让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指令,正如其他帖子所建议的那样。

1 个答案:

答案 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的目的第一名 )