Skip to content

cron 보안설정#

crontab 설정#

crontab#

crontab

cron 설정 파일은 cron table을 줄여서 crontab으로 cron 작업을 설정한다. crontab 명령어는 아래와 같다.

  • crontab [ -u 사용자 id ] 파일
  • crontab [ -u 사용자 id ] ( -l | -r | -e )
  • crontab -l : 예약된 작업리스트
  • crontab -e : 예약된 작업 수정
  • crontab -r : 예약된 작업 삭제
  • crontab -u 사용자명 : 루트관리자는 해당 사용자의 crontab 파일을 보거나 삭제, 편집가능
Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -x <mask>  enable debugging

Default operation is replace, per 1003.2

crontab 구성#

crontab 설정

cron은 RHEL5 버전까지 crontab에 설정되어 있던 run-part부분, 즉 /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 의 실행부분이 빠져 있었으나, CentOS Linux release 7.6.1810 (Core) 버전을 쓰는 OS는 run-part부분이 설정되어 있다. 기본적으로 cron이 참조하는 crontab 파일 위치는 아래와 같다.

  • /var/spool/cron
  • /etc/cron.d
  • /etc/crontab

/var/spool/cron#

시스템 개별 사용자를 위한 crontab 파일 위치이며 일반적으로 root 계정용 하나와 계정 사용자당 1개의 파일이 생성한다. 계정명으로 파일이 생성되고 cron에서 각 설정 파일에 지정된 작업들을 실행할 때 사용할 UID를 결정한다. 해당 설정파일들은 crontab 명령으로 관리한다.

/etc/cron.d#

관리자가 지정한 cron 작업들을 설정하며, 임의 사용자 권한으로 실행할 수 있다. 시스템 관련 작업들을 등록하는 위치다.

/etc/crontab#

패키지 설치시 필요한 주기적인 cron 작업을 등록하는 위치다. 임의 사용자 권한으로 실행할 수 있다.

cron 사용자 제어#

cron 사용자 제어

cron은 동작 시 사용자에 대한 제어가 가능하다. 아래의 각 파일을 통해서 root 이외의 사용자에 대한 crontab 접근 제어 및 실행을 제어할수 있다. 각 파일들의 유무에 따라 동작 여부가 다름으로 유의해야한다. cron 동작에 제어에 관여하는 파일들은 아래와 같다.

  • /etc/cron.allow
  • /etc/cron.deny

cron.allow#

/etc/cron.allow 파일에 사용자의 계정을 아래와 같이 추가하면 해당 사용자는 사용자 cron을 실행 가능하다

  • /etc/cron.allow
root
ACCOUNT

cron.deny#

/etc/cron.deny파일에 특정 사용자의 계정을 아래와 같이 추가하면 해당 사용자는 사용자 cron을 사용할 수 없다. 단 root는 무의미 하다.

  • /etc/cron.deny
ACCOUNT

cron.allow, cron.deny파일 존재 유무에 따른 동작#

cron.allow, cron.deny파일 존재 유무 및 내용에 따른 동작

  • 비어있는 cron.allow 파일만 존재할 경우
    • root crontab 사용가능
    • 사용자 crontab 사용불가
  • 비어있는 cron.deny 파일만 존재할 경우
    • root crontab 사용가능
    • 사용자 crontab 사용가능
  • 비어있는 cron.allow, cron.deny 파일 모두 존재하는 경우
    • root crontab 사용가능
    • 사용자 crontab 사용불가
  • cron.allow, cron.deny 파일 설정이 되어 있는 경우
    • root crontab 사용가능
    • 사용자 crontab 사용가능

crontab 파일 형식#

crontab 파일 형식

crontab 설정은 아래와 같이 두가지 형식이 존재한다. 필자는 아래의 두 가지 설정을 통한 충돌로 고생하였다. /etc/cron.d, /etc/crontab에서 동작하는 파일 형식과 사용자 등록 작업은 각 상황에 맞게 설정하지 않으면 동작하지 않으니 유의해야 한다. 두 파일 형식의 큰 차이는 사용자 계정의 유무로 작성에 주의해야한다.

/etc/crontab, /etc/cron.d#

시스템 전체와 /etc/crontab, /etc/cron.d 에 적용되는 양식이다

  • 시스템 전체 /etc/crontab, /etc/cron.d 양식
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

사용자 crontab#

crontab -u 를 통해 사용자 지정을 통한 등록의 경우 아래 양식을 사용해야 한다. /etc/crontab, /etc/cron.d 양식과 같이 사용자 계정이 들어가게 되면 동작하지 않음으로 작성에 유의해야 한다.

  • 사용자 cron 양식
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *   command to be executed

crontab 작성#

crontab 작성

등록 내용 설정

  • 분,시,일,월,요일, [ 사용자명 ] 실행명령 순으로 설정한다
  • 마지막에 공백 라인을 넣어야 한다.

crontab 파일 형식

필 드 의 미 범 위
첫번째 0-59
두번째 0-23
세번째 0-31
네번째 1-12
다섯번째 요일 0-7 (0 또는 7=일요일, 1=월, 2=화,...)
여섯번째 사용자명 /etc/crontab, /etc/cron.d 에 저장될 경우 필요
일곱번째 작업명령 실행할 명령을 한줄로 작성

Reference


Last update: 2020년 5월 12일 01:38:31