我正在阅读 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
某人将角色转变为更有特权的角色。