无法使用 root 以外的用户运行 crontab

无法使用 root 以外的用户运行 crontab

我的目标是运行一个包含 crontab 的 Docker 容器。因此,我希望作为非 root 用户能够运行计划的 crontab 作业。我正在运行以下 Docker 映像:

FROM openjdk:8
RUN apt-get update && apt-get -y install nano
RUN apt-get update && apt-get -y install cron
RUN service cron start # tried both
RUN cron               # tried both
ENV TZ="Europe/Rome"
RUN useradd -u 8877 myuser
USER myuser
CMD ["tail", "-f", "/dev/null"]

我将其部署在 Docker 堆栈中:

...
crontab:
  image: reg/image
  cap_drop:
  - cap_dac_override
deploy:
  mode: replicated
  replicas: 1
  restart_policy:
    condition: any
    delay: 3s
    window: 60s
  placement:
    constraints: [node.role == manager]
  update_config:
    delay: 2s
volumes:
  - v:/my/vol
environment:
  - PUID=8877
  - PGID=8877
...

当我docker exec -it <id> bash以 myuser 身份运行到容器中时,我执行 service cron status 并输出“cron is running”。但如果我运行crontab -e,我正在编写的文件会出现红色错误消息“历史文件有问题”。如果我尝试保存它,则会出现其他错误,例如“没有 myuser 的 crontab - 使用空的一触式:无法触摸 '/home/myuser/.selected_editor':没有这样的文件或目录 无法创建目录 /home/myuser/。 local/share/nano/:没有这样的文件或目录,需要保存/加载搜索历史记录或光标位置。”

答案1

限制 crontab 使用的方法可能不止一种。请参阅您的安装的 crontab 联机帮助页。

在最简单的情况下,控制是通过文件 /etc/cron.allow、/etc/cron.deny 进行的。它们的使用规则非常具体:

  • 如果两个文件都不存在,则只有 root 可以运行 crontab
  • 如果 cron.allow 存在,则必须列出您的用户名才能使用 crontab。
  • 禁止 cron.deny 中的所有用户。
  • 如果仅存在 cron.deny,则所有未提及的用户都可以使用 crontab。

相关内容