2016-04-08 66 views
0

我試圖讓一個python腳本訪問Odroid XU4上的GPIO引腳,它需要sudo。我想簡單地將GPIO引腳從關閉閃爍到開啓,然後再次關閉。 python腳本沒問題,但是我運行它時會要求輸入密碼。編輯sudoers文件仍然要求輸入密碼

我編輯了我的sudoers文件,使用visudo不需要密碼,以便進行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

/sys/class/gpio/export(和其他)是僞文件,而不是程序。 Sudo致力於限制對程序的訪問,而不是文件。

我建議看看https://serverfault.com/questions/641483/how-to-grant-user-modify-only-specific-protected-file-by-sudo(或者更具體地說,應該有一種方法可以使用擴展權限來以不需要root的方式將用戶訪問權限授予您關心的3個sys文件,

另外,這可能是更容易,你可以做 username ALL=NOPASSWD: /usr/bin/blinkscript

(這裏的/ usr/bin中/ blinkscript與#你的Python程序!設置在/ usr /斌/ Python和權限,使用戶名不能覆蓋文件等)

關於clarit Y:做ls -l /usr/bin/blinkscript

#!/usr/bin/python 
print ("Hello World") 

這是把在/ usr/bin中,由root擁有,權限700 (如回來的東西,如: 給定文件blinkscript是由

-rwx ------。1根根部40年04月08 19點52分的/ usr /斌/ blinkscript

然後具有朝向形式的你的sudoers文件的底部的行:

USER1 ALL = NOPASSWD:在/ usr/bin中/ blinkscript

如果我作爲USER1做: blinkscript 我得到:拒絕 「權限」

如果我作爲USER1做: sudo blinkscript 我得到:「Hello World」的(沒有提示輸入密碼) (請注意,我沒有明確的做的/ usr/bin中/ blinkscript,但也作品)

如果我作爲用戶2(誰沒有任何須藤PRIVS)做: sudo blinkscript 我得到提示輸入密碼,然後把壞孩子名單上

(另請注意,我用的權限700清楚地顯示權限;做類似755的事情也可以,如果你的腳本試圖觸摸/ sys文件,它可以在使用sudo運行時運行,而不是沒有;我試圖做的一點是,如果你使權限777或用戶1擁有,那麼用戶1可以編輯文件來運行他們想要的任何命令,這樣做的目的不僅僅是在首先做user1 all=all nopasswd: all

+0

感謝您及時的回覆!通過設置#!/ usr/bin/python和權限以便用戶名不能覆蓋它,究竟是什麼意思?此外,嘗試將'username ALL = NOPASSWD:/ usr/bin/blinkscript'插入到sudoers文件中會導致語法錯誤,我不知道爲什麼。我必須包含'.py'的擴展名嗎? –

+0

更新:我能夠將'username ALL = NOPASSWD:/ usr/bin/blinkscript'添加到sudoers文件,但它仍然要求在終端中輸入密碼。 –

+0

@ M.Bedross我更新了一個測試的例子;只是爲了檢查:你的閃爍腳本是否在腳本內部調用了sudo命令? – Foon

相關問題