我的第一个想法是一个包装脚本,你在其中授予对该脚本的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是分钟数.
username ALL=(ALL:ALL) /usr/sbin/shutdown +18[0-9], \n /usr/sbin/shutdown +19[0-9], \n /usr/sbin/shutdown +[2-9][0-9][0-9], \n /usr/sbin/shutdown +[1-9][0-9][0-9][0-9]*
这拼写了分钟180到189,190到199,200到999,然后是任何(数字或其他!)以至少4位数字开头,第一位不能为零.这将允许无效的时间范围,例如/usr/sbin / shutdown 9999jeff,这只会导致关闭时的解析错误:
Failed to parse time specification: +9999jeff