【问题标题】:Editing sudoers file still asks for password编辑 sudoers 文件仍然要求输入密码
【发布时间】:2016-04-08 21:32:44
【问题描述】:

我正在尝试让 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 指令。

【问题讨论】:

    标签: sudo gpio sudoers


    【解决方案1】:

    /sys/class/gpio/export(和其他)是伪文件,而不是程序。 Sudo 致力于限制对程序的访问,而不是文件。

    我建议查看https://serverfault.com/questions/641483/how-to-grant-user-modify-only-specific-protected-file-by-sudo(或者更具体地说,应该有一种方法可以使用扩展权限来授予用户对您关心的 3 个 sys 文件的访问权限,而无需 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 权限)执行以下操作: sudo blinkscript 我被提示输入密码,然后被列入坏男孩名单

    (另请注意,我使用 700 的权限来清楚地显示权限;执行类似 755 的操作也可以,关键是如果您的脚本试图触摸 /sys 文件,则在使用 sudo 运行时它会起作用并非没有;我试图说明的一点是,如果您将权限设置为 777 或由 user1 拥有,那么 user1 可以编辑文件以运行他们想要的任何命令,从而违背了不只是在第一个执行 user1 all=all nopasswd: all 的目的地方 )

    【讨论】:

    • 感谢您的快速回复!设置 #!/usr/bin/python 和权限以使用户名不能覆盖它到底是什么意思?此外,尝试将username ALL=NOPASSWD: /usr/bin/blinkscript 插入我的 sudoers 文件会导致语法错误,我不知道为什么。我必须包含.py 扩展名吗?
    • 更新:我能够将username ALL=NOPASSWD: /usr/bin/blinkscript 添加到 sudoers 文件中,但它仍然要求在终端中输入密码。
    • @M.Bedros 我用一个经过测试的例子进行了更新;只是为了检查:您的 blinkscript 是否在执行任何在脚本中调用 sudo 的操作?
    • 感谢您提供清晰的示例,是的,我的眨眼脚本确实在脚本内部调用了 sudo。该脚本完全按照预期工作,唯一的问题是它要求输入密码。我现在正在尝试您的示例。
    • 我不仅完成了您的示例的运行,而且将其合并到了我的实际 python 脚本中,它可以完美运行。改变的是我对文件本身的文件权限不正确。让文件由 root 拥有和执行允许它在不通过终端询问密码的情况下运行。谢谢!
    猜你喜欢
    • 2013-08-09
    • 2013-05-05
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 2015-02-02
    • 2018-09-22
    • 1970-01-01
    相关资源
    最近更新 更多