这个问题是完全笼统的,不仅适用于我的情况,而且...我有一个小型busybox设备,希望非root用户能够使用root特权执行特定脚本。例如,类似以下这样$1
的小脚本来启用DHCP,其中在cmdline(!!)上发送的唯一变量()是要发送的主机名:
#!/bin/bash
udhcpc -b -i eth0 -h $1
像这样运行udhcpc需要root用户访问权限,因此,我计划进行修改/etc/sudoers
以包含此行:
joe ALL = NOPASSWD: /path/to/enable_dhcp.sh
只需运行以下命令,即可使“ joe”轻松地以root特权运行该脚本:
sudo /path/to/enable_dhcp.sh
而不是要求输入密码(这是我想要的,因为我希望joe能够编写此脚本)。
现在..我知道(或者至少我认为这样做),$1
在可以轻松使用root特权运行的脚本中使用是一个可怕的想法,因为您可以向其中注入任何内容。
那么...解决此问题的最佳方法是什么?我如何让Joe用root特权执行我想做的事情,如何允许他传入变量(或者像使用环境变量那样有效地传递变量),同时又不对注入攻击敞开大门?