sudoers 中用户关闭的时间范围选项

sudoers 中用户关闭的时间范围选项

我需要为用户授予 sudo 权限以获得关机权限。但用户只能发出时间大于 3 小时的关机请求。我一直在尝试通过实现通配符。

例如 :

username ALL=/usr/sbin/shutdown +[[:digit:]] -> Trial for any number 
username ALL=/usr/sbin/shutdown +[180-*] -> Trial for 180 minutes and beyond

还有许多其他情况,但没有任何效果。

答案1

我的第一个想法是一个包装脚本,您可以在其中授予对该脚本的 sudo 访问权限,然后在该脚本中进行参数检查。

username ALL=/usr/local/sbin/shutdown-wrapper

然后对于关闭包装器来说是这样的:

#!/bin/sh

case $1 in
  *[!0-9]*) echo Invalid; exit 2;;
esac

if [ "$1" -ge 180 ]
then
  /usr/sbin/shutdown +"$1"
else
  echo Invalid
  exit 2
fi

...并指示用户拨打,sudo /usr/local/sbin/shutdown-wrapper N其中 N 是分钟数。

另一种选择是使用从sudoers 手册页的通配符部分:

username ALL=(ALL:ALL) /usr/sbin/shutdown +18[0-9], \
                       /usr/sbin/shutdown +19[0-9], \
                       /usr/sbin/shutdown +[2-9][0-9][0-9], \
                       /usr/sbin/shutdown +[1-9][0-9][0-9][0-9]*

这表示分钟 180 到 189、190 到 199、200 到 999,然后是至少以 4 位数字开头的任何内容(数字或其他!),其中第一个数字不能为零。这将允许无效的时间范围,例如/usr/sbin/shutdown +9999jeff,这只会导致 的解析错误shutdown

无法解析时间规范:+9999jeff

相关内容