在sudoers
文件中我们可以限制运行不带选项的命令
例如/bin/su
应该失败,并且后面任何su
超过 4 个字符的内容都应该运行。例子:
sudo su daniel
应该运行
michael ALL=(ALL) NOPASSWD:ALL, /bin/su [a-z]{5,}
只是尝试用这些术语
无论如何要实现这一目标?
答案1
您可以在 sudoers 命令规范中使用通配符。要/bin/su
仅允许使用以 5 个小写字母开头并后跟任意数量的其他参数的参数运行,您可以使用
michael ALL=(ALL) NOPASSWD: /bin/su [a-z][a-z][a-z][a-z][a-z]*
除非该参数具有固定大小,否则无法限制为单个参数,因为唯一可以匹配可变长度字符串的通配符是*
并且它也匹配参数边界。
如果您需要更复杂的规则,请配置 sudo 以允许运行包装器脚本,并在该包装器脚本中执行参数检查。
…: ALL, /bin/su …
没有任何意义,因为ALL
已经允许任意命令。它只是相当于…: ALL
.
目前尚不清楚您想要从 sudoers 配置中获得什么语义,因为您专注于特定的实施而不是目标。如果您想允许 Michael 在没有密码的情况下以某些用户身份运行任意命令,那么调用su
是一种奇怪的间接方法。 sudo 已经做了权限提升,为什么还要在上面使用 su 呢?定义一组用户并允许 Michael 以其中任何用户的身份运行任意命令。
User_Alias target_users = alice, charlie, dominique
michael ALL = (target_users) NOPASSWD: ALL