由于 sudoers 不支持正则表达式,是否有人像我在下面的示例中那样做,或者那很糟糕?
user ALL = (root) NOPASSWD: /bin/program [0-9],\
/bin/program [0-9][0-9],\
/bin/program [0-9][0-9][0-9],\
/bin/program [0-9][0-9][0-9][0-9]
不,这不是“坏”。
您所拥有的应该可以正常工作,但通常最好编写一个包装脚本来检查参数。例如,在
/etc/sudoers
:以及类似以下的内容
/usr/local/bin/suprogram
:这可以扩展以允许和检查更多参数(例如检查文件名参数是否在某个目录中或匹配某个模式;或禁止将某些选项传递给 sudo 程序;等等)。
您可以在 shell 脚本中执行的任何操作(包括运行其他工具,如 awk、sed、perl 等)都可用于验证和清理您传递给使用 sudo 运行的程序的参数。
检查也不仅限于参数。您可以检查 uid、gid、用户是本地登录还是通过 ssh 登录、日期、时间、网络状态、守护进程状态、可用磁盘空间、月相等等。