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> bashmyuserでコンテナを実行すると、サービスcronステータスが実行され、「cron is running」が出力されます。しかし、実行すると、crontab -e私が作成しているファイルに「記録ファイルに問題があります」という赤いエラーメッセージが表示されます。保存しようとすると、「No crontab for myuser - using 空のワンタッチ: '/home/myuser/.selected_editor'をタッチできません。そのファイルまたはディレクトリはありません。/home/myuser/ディレクトリを作成できません。local/share /nano/: 検索履歴やカーソル位置を保存/ロードするために必要なファイルやディレクトリはありません。

答え1

crontabの使用を制限する方法はいくつかあります。インストール方法については、crontabのマンページを参照してください。

最も簡単な場合、制御は/etc/cron.allow、/etc/cron.denyファイルを介して行われます。使用規則は非常に具体的です。

  • 両方のファイルが存在しない場合は、ルートのみcrontabを実行できます。
  • cron.allowが存在する場合、crontabを使用するにはユーザー名を一覧表示する必要があります。
  • cron.denyのすべてのユーザーを禁止します。
  • cron.denyのみが存在する場合は、記載されていないすべてのユーザーがcrontabを使用できます。

関連情報