簡體   English   中英

腳本內部的sudo,其中包含需要輸入的命令(bash)

[英]sudo inside of a script with a command that needs input (bash)

我想制作一個可以更改屏幕亮度的腳本,並且需要以下命令:

echo "$number" | sudo tee /sys/class/backlight/intel_backlight/brightness

該腳本要求我提供我的root密碼,我認為這是不必要的,因為它只會更改亮度。 我嘗試添加sudo -S並回顯密碼,但不僅使自己對輸入內容感到困惑,而且腳本[sudo] password for user:提示寫了[sudo] password for user:提示很麻煩。 如何使每個人都可以運行該腳本(無論是在腳本內部還是在外部,我都是通過練習來了解更多信息)?

您可以配置系統,以便sudo不要求任何密碼。 我不建議這樣做(將ALL=NOPASSWD:放在/etc/sudoers文件中的適當位置),因為這是一個安全漏洞。

但是,您真正想要的是使setuid可執行文件(順便說一句, /usr/bin/sudo本身就是setuid可執行文件)。 理解起來很棘手,您可能會犯下很大的錯誤(打開大的安全漏洞)。 還要仔細閱讀execve(2)Advanced Linux Programming 花幾個小時來了解setuid的內容(如果您誤解了它,則會遇到安全問題)。 另請參閱憑據(7)功能(7)

出於安全原因,不能將shell腳本設置為setuid 因此,您可以在C中編寫一個小的包裝程序,該包裝程序將在適當的調用后(例如,對setresuid(2)和朋友)通過execve運行腳本,將該C程序編譯為setuid可執行文件(因此chown rootchmod u+s您的可執行文件) 。 在您的特定情況下,你甚至都不需要編寫啟動shell命令(你應該只是一個C程序fopen/sys/class/backlight/intel_backlight/brightness偽文件,然后fprintf進去, fclose它)。

實際上,我認為不需要做所有必要的事情,因為您應該能夠配置系統,以使屏幕亮度可以由非root用戶設置。 我不知道如何精確地做到這一點(但這是一個不同的問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM