루트가 아닌 사용자를 사용하여 crontab을 실행할 수 없습니다

루트가 아닌 사용자를 사용하여 crontab을 실행할 수 없습니다

내 목표는 crontab이 포함된 Docker 컨테이너를 실행하는 것입니다. 따라서 루트가 아닌 사용자로 예약된 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을 사용할 수 있습니다.

관련 정보