sudoers 中程序参数的严格条件

sudoers 中程序参数的严格条件

由于 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]

答案1

不,这并不“坏”。

您所拥有的应该可以正常工作,但通常最好编写一个包装脚本来检查参数。例如,在/etc/sudoers

user ALL = (root) NOPASSWD: /usr/local/bin/suprogram

以及类似以下内容/usr/local/bin/suprogram

#!/bin/bash

if [[ $1 =~ ^[0-9]{1,4}$ ]]; then
  exec program "$1"
else
  echo "Bad argument, only 1 to 4 digits allowed"
fi

这可以扩展以允许和检查更多参数(例如,检查文件名参数是否在某个目录内或匹配某个模式;或者禁止将某些选项传递给 sudo 程序;等等)。

您可以在 shell 脚本中执行的任何操作(包括运行 awk、sed、perl 等其他工具)都可以用于验证和清理您传递给使用 sudo 运行的程序的参数。

检查也不仅仅限于参数。您可以检查 uid、gid、用户是本地登录还是通过 ssh 登录、日期、时间、网络状态、守护进程状态、可用磁盘空间、月相等等。

相关内容