如何验证用户是否可以使用crontab?

如何验证用户是否可以使用crontab?

我想验证特定用户是否可以使用 crontab。我想在 shell 脚本中使用此验证。

这样做的正确方法是什么?

答案1

VISUAL=true EDITOR=true crontab -e 2>/dev/null

此命令是静默的,但其退出状态指示您的脚本(以及运行它的用户)是否可以使用crontab.

要测试另一个用户添加-u username(如果您crontab支持),但这只有在您的脚本有足够的特权可以代表其他用户-u运行时才有效。crontab非特权脚本将获得退出状态1,就好像其他用户无法使用crontab.或者使用sudo -u username …(但sudo可以或者可能不会允许您设置环境,具体取决于其配置)。

缺点:

  • crontab可能支持也可能不支持-e(POSIX 说它是可选的)。
  • 该方法并不完全验证“用户可以使用crontab”,而是“脚本可以crontab代表用户使用”。这可能是也可能不是您想要的。如果“特定用户”是指“运行脚本的用户”,那么您不需要,-u并且该方法应该可以正常工作。

优势:

  • 您不需要分析/etc/cron.allowand /etc/cron.deny(如果使用的话,它们位于实现定义的目录中);您不需要构建任何逻辑来组成最终答案。crontab它本身会为你做一切。

笔记:

  • 在我的 Kubuntu 18.04.5 LTS之前crontab检查过,但是VISUALEDITORPOSIX规范仅提及EDITOR。这就是为什么这个答案设置了两个变量。
  • 它可能看起来crontab -l更好,但如果 crontab 不存在,那么该命令将返回失败(至少这是它在我的 Kubuntu 中的行为方式)。
  • 在我的 Kubuntu 18.04.5 LTS 中,如果 crontab 不存在,那么VISUAL=true crontab -e将会不是安装一个空的。我不确定其他实现。如果 crontab 不存在,安装空的 crontab 可能会产生副作用。

相关内容