sudoers 策略中的 Date_Spec 是什么?

sudoers 策略中的 Date_Spec 是什么?

我正在阅读 sudoers 政策手册。在“用户规范”部分下,我看到Date_Spec的一部分Option_Spec,又是 的可选部分Cmnd_Spec

 User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \
               (':' Host_List '=' Cmnd_Spec_List)*

 Cmnd_Spec_List ::= Cmnd_Spec |
                    Cmnd_Spec ',' Cmnd_Spec_List

 Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd

 Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'

 Option_Spec ::= (Date_Spec | Timeout_Spec)

 Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp')

 Timeout_Spec ::= 'TIMEOUT=timeout'

这是做什么的?根据我的阅读,它看起来像是我可以用来限制用户运行命令的时间跨度。那是对的吗?如果是这样,这种功能的可能用例是什么?

参考:man 5 sudoers

答案1

版本中似乎已添加对 Date_Spec 的支持1.8.20,与变更日志表明代码已于 2017 年 2 月 18 日更改:

添加 NOTBEFORE 和 NOTAFTER 命令选项,类似于 LDAP 中已有的选项。

该选项的作用与您猜测的完全一样:限制相应的规则具有开始和/或结束日期。

例如,我添加了这条规则:

jeff2 ALL=(ALL) NOTBEFORE=20190409212700 /bin/ps

然后执行以下命令jeff2

$ sudo -l
# ... elided ...
User jeff2 may run the following commands on r2d2:
    (ALL) /bin/ls
    (ALL) NOTBEFORE=20190410012700Z /bin/ps
$ date -u '+%Y%m%d %H:%M:%S'
20190410 01:25:52
$ sudo /bin/ps
Sorry, user jeff2 is not allowed to execute '/bin/ps' as root on r2d2.
$ sleep 2m   ## plus get distracted by something
$ date -u '+%Y%m%d %H:%M:%S'
20190410 01:29:33
$ sudo /bin/ps
  PID TTY          TIME CMD
 9607 pts/1    00:00:00 ps

我可以看到一个用例,您希望授予临时额外访问权限(例如特定应用程序升级或更改),但您不希望必须记住在该时间范围之前和之后登录来更新 sudoers。也许您有一个特权用户正在更改角色,并且在某个日期之后不再需要某些命令;您可以NOTAFTER在方便时使用,然后稍后再进入并在稍后的某个时间删除规则。同样,NOTBEFORE某人将角色转变为更有特权的角色。

相关内容