我想制作一个可以改变屏幕亮度的脚本,其中需要这个命令:
echo "$number" | sudo tee /sys/class/backlight/intel_backlight/brightness
脚本要求我提供root密码,我认为这是不必要的,因为它只会改变亮度。我尝试添加sudo -S
并回显密码,但不仅让我对输入的内容感到困惑,而且脚本写出了[sudo] password for user:
提示,这很烦人。我如何使每个人都可以运行脚本(从脚本内部和外部,我这样做是为了练习更多)?
答案 0 :(得分:3)
您可以配置系统,以便sudo
不要求任何密码。我不建议这样做(将ALL=NOPASSWD:
放在适当位置的/etc/sudoers
文件中),因为这是一个安全漏洞。
但你真正想要的是制作一个setuid可执行文件(BTW /usr/bin/sudo
本身就是一个setuid可执行文件)。这很难理解,你可以犯很大的错误(打开大的安全漏洞)。请仔细阅读execve(2)& Advanced Linux Programming。花几个小时来理解 setuid 的事情(如果你误解它,你就会遇到安全问题)。另见credentials(7)& capabilities(7)
出于安全原因,无法将shell脚本设为 setuid 。因此,您可以在C中编写一个小包装器,在适当的调用(例如setresuid(2)和朋友)之后运行脚本execve
,将该C程序编译为setuid可执行文件(所以chown root
和chmod u+s
你的可执行文件)。在您的特定情况下,您甚至不需要编写启动shell命令的C程序(您应该fopen
/sys/class/backlight/intel_backlight/brightness
伪文件然后fprintf
进入它,{{1它)。
实际上,我不相信做所有必要的事情,因为你应该能够配置你的系统让你的屏幕亮度由非root设置。我不知道如何准确地做到这一点(但这是一个不同的问题)。